Colophon
How this site is made
The paper
One fixed canvas behind the whole document: cream, two enormous soft discs of ink bleeding through it, a fibrous grain and a handful of scratches. Sections are transparent and just declare whether they want the warm interlude.
That interlude is the only inversion on the site. A scroll-linked ramp, measured from the real DOM, floods the whole sheet brown while the shelf is on screen — and the star specks that were invisible on cream suddenly become a sky.
The stripes
Five bands that run in from one edge and turn a hard corner. Each band’s corner is offset by exactly one pitch from its neighbour’s, which is what keeps the bundle parallel through the turn. It has to be a stroked path with a mitre join — filled polygons will not corner cleanly.
The type
Archivo, which is variable on width as well as weight — the extended cut at heavy weights is what makes the headlines read as 1970s print rather than as a UI font. JetBrains Mono appears only at small sizes, for labels and numbers, so data looks like data.
Everything else
Next.js on the app router, Tailwind v4, Motion for the reveals and parallax, Lenis for scroll smoothing. The projects are typed data rather than markup, so the shelf is edited by changing an array. It lives in a pnpm monorepo alongside the API and the apps themselves.