content/projects/the-door.md — typed by Claude, passed by Omri

The Door

A film you scroll — a door ajar in a quiet room, and then everything on the other side of it.

Started
August 2026
Built with
React, Canvas, Web Workers, WebP

What it is

A door stands ajar in a quiet room. You scroll, and the camera moves toward it, through it, and out into a nebula — then descends, a long fall through cyan and magenta, until a camp appears far below. You are never watching a video. You are turning it, one notch of the wheel at a time, and you can stop anywhere, go back, and take it at whatever speed you like.

At the end the film doesn't cut away. The real page assembles over the aerial view, and the rest of the site scrolls up underneath it. It is the front door of Starcamp, and the one thing on this page that a still picture cannot really tell you about.

How it works

Scroll is the playhead. It is not a video element being seeked — that is unreliable and stutters differently in every browser. It is 390 still images drawn one at a time onto a canvas, with your scroll position choosing which one. Frame-exact, identical everywhere, and it stops precisely where you stop.

Nothing waits for all of it. The first pass loads every eighth frame, which is enough to make the whole film scrubbable within a moment of arriving; the rest fill in behind you while you are already moving. If you scroll to a frame that hasn't landed yet, the nearest one that has is drawn instead. The picture is sometimes slightly behind. It is never blank.

The decoding happens on another thread. Downloading a picture and turning it into something drawable are two different jobs, and the second one costs tens of milliseconds on whichever thread asks for it. Asked for from the page, that lands squarely between two scroll frames and you feel it as a catch. So it is done somewhere else: a separate worker fetches each frame's bytes, decodes them off to the side, and hands the finished picture back by passing ownership rather than copying it. A window of ready frames rides ahead of and behind the playhead, closing as they fall out of range and releasing almost entirely if you leave the page parked — holding all 390 at once would cost gigabytes, which is exactly the kind of thing that makes a beautiful page hated. If the worker cannot start, the page decodes them itself and simply feels worse.

It eases, and it yields. The playhead glides toward where your scroll asks it to be rather than snapping frame to frame, which is what makes a fast scrub feel like film instead of a flipbook. And for anyone who has asked their system to reduce motion, the whole pinned cinema is dropped: first frame, last frame, the hero — a still stack, no scroll hijacking, the same argument told quietly.

approved · Omri Nahum · this card, as it reads today