capad.fyi · hero · sticker sheet, three ways

The same idea, three different relationships to size

You liked the Sticker Sheet and asked for two things: push it further, and make the photos do something interesting as the screen stretches or shrinks. So every option below is drawn at three true widths — 390, 820 and 1440 — rather than one static picture. The thing to judge is not how it looks but how it changes.

Each frame is rendered at its real pixel width and scaled down by the same factor (0.38), so the three are directly comparable. Aspect ratio is held at 16:10 across all three on purpose: that isolates width as the only variable. On a real phone the hero would be portrait, which changes the composition and is noted per option.

All three keep the Sticker Sheet DNA: a physical paper object, one accent ink, accession labels, and the sense that it was photocopied rather than rendered. What changes is what the viewport does.

5 unique cut-out photos paper #f1f0ec · ink #0b0b0d · accent #e3492f all five shown at 3 widths no JS in any of these mockups
A

Contact Sheet

The hero is a roll of 35mm, already developed, laid out as a contact sheet. Widening the window does not enlarge the photographs — it reveals more frames, the way pulling more of the roll off the spool reveals more exposures. This is the most literal answer to your brief and the least decorative of the three.

How it responds to size. Frame count is a container query, not a scale: <600px shows 2 frames, 600-999px shows 4, ≥1000px shows all 5. Each frame is flex:1, so the frames that are showing always fill the strip edge to edge — they get wider, but no photograph is ever blown up past its natural size. The sprocket-hole rails and the frame numbers scale with the strip, so the whole thing reads as one object at every width.

390 2 frames

01
02
03
04
05
I build the tools that shouldn’t need to exist. Aadarsh Upadhyay
See the work
contact sheet
35mm · 2026

820 4 frames

01
02
03
04
05
I build the tools that shouldn’t need to exist. Aadarsh Upadhyay
See the work
contact sheet
35mm · 2026

1440 5 frames

01
02
03
04
05
I build the tools that shouldn’t need to exist. Aadarsh Upadhyay
See the work
contact sheet
35mm · 2026
Size behaviourThe strongest of the three. Count changes, nothing is upscaled, and the object stays one object.
Cost to buildLow. Five images, a flex row, one container query. No JS.
Keeps from todayEyebrow, CTA, availability, shipping strip (as the accession label), ambient, grain.
RiskFrames are crops, so a face can land awkwardly in a narrow frame. Needs per-photo object-position tuning — the real work here, and it is art direction, not engineering.
On a real phoneA 16:10 strip on a 390px portrait screen is a thin band. This one wants the hero to be landscape-ish, or the strip to rotate 90° and run down the page.
Verdict: the cleverest and the most restrained, and the only one of the three where the responsive behaviour is the concept rather than a consequence of it. If your instinct was "make it feel like a real thing a photographer made", this is it.
B

The Drawer

The photographs are prints stored in a shallow paper tray on the desk. Width is how much room there is on the desk, so a wider window lets more of them slide out and fanned open. Narrow and only two clear the tray; wide and five are laid out across it.

How it responds to size. Three things move together and all three are container queries: count (2 → 3 → 5), travel (how far each print has slid out, 0% → 6% → 12% of the tray height) and fan (0° → a ±5° spread). This is the most physical of the three: resizing the window reads as opening a drawer further, which is a direct answer to "innovate how they work as the screen stretches or reduces".

390 2 prints, travel 0

I build the tools that shouldn’t need to exist.
portrait
studio
full
reach
phone
Aadarsh Upadhyay

820 3 prints, travel 6%

I build the tools that shouldn’t need to exist.
portrait
studio
full
reach
phone
Aadarsh UpadhyaySee the work

1440 5 prints, travel 12%, fanned

I build the tools that shouldn’t need to exist.
portrait · cut-out
studio, 2026
full length
reaching
phone up
Aadarsh UpadhyaySee the work
Size behaviourThe most physical. Count, travel and fan all move; the metaphor survives every step.
Cost to buildLow. Five absolutely-positioned prints, three container queries, no JS.
Keeps from todayStatement, name, CTA, ambient, grain, paper stock.
RiskA print hanging off the left edge of a phone is easy to get wrong. The 2-print narrow case has to be composed, not just scaled.
On a real phoneSame problem as A: landscape strip on a portrait screen. Would want the tray to run up the page instead.
Verdict: the one that best sells your brief. If someone opens the window and watches the prints slide out, that is the "innovative on it more" feeling you asked for, and it needs no pointer tracking to work.
C

Riso Layers

Each photograph is separated into three spot-ink layers that multiply together, the way a risograph print is built from misaligned screens. The layers never quite line up, and the gap between them is a live function of the viewport width — so the print drifts further out of register the wider you make the window.

How it responds to size. A single custom property --mis is the whole mechanism, stepped by container query: 0.35cqw → 0.9cqw → 1.8cqw. The three layers read it and offset against each other. Because it is expressed in cqw, the misregistration is a proportion of the object, not a pixel constant — so it looks identical on a phone and a 27″ monitor instead of vanishing on one and looking broken on the other. This can also be driven by scroll or pointer later without touching the layout.

390 deliberate 0.35cqw offset

I build the tools that shouldn’t need to exist.
Aadarsh Upadhyay

820 deliberate 0.9cqw offset

I build the tools that shouldn’t need to exist.
Aadarsh Upadhyay See the work

1440 deliberate 1.8cqw offset

I build the tools that shouldn’t need to exist.
Aadarsh Upadhyay
Size behaviourSubtle at every size, and the one property that could later be driven by scroll or pointer for free.
Cost to buildCheapest of the three. One image, three stacked layers, one custom property.
Keeps from todayKeeps the statement, name, CTA, ambient, grain. Uses one photograph, not five. If you wanted your photo set to be the hero, this does not do that.
RiskThree mix-blend-mode: multiply layers is exactly the kind of compositing that costs on a weak rasteriser. Given you are already chasing a frame-rate problem, this is the one to be careful about.
On a real phoneWorks well — the misregistration scales down with cqw so it stays proportional rather than becoming a muddy smear.
Verdict: the boldest visually and the cheapest to build, and the only one that improves rather than degrades on mobile. But it quietly drops most of your photo assets, and it adds blend layers to a page that is already fighting for frame budget. Pick it for how it looks, not for how it scales.