Build journal
How this site was built.
Working notes from the build itself. Branching patterns, photo pipelines, agent versus script tradeoffs.
2026
-
The agent designs. The script ships.
Claude decides what the about page should be. ship.sh decides nothing. The roles don't blur.
-
The card frame went away once the photo had alpha
Stripping the white card revealed the photo as a figure on the aurora instead of a portrait on a plate.
-
Voice constraints are an input, not a style sheet
A list of banned words and punctuation is the most useful single artifact I hand to any agent.
-
Atomic commits by default
Each ship.sh run produces three or fewer commits, each scoped to one logical change.
-
Best-effort patches with explicit fallbacks
The nav patcher tries two patterns, warns if both fail, and never blocks the ship.
-
Branch per feature, named for the moment
Each ship cuts a feature branch from master. The branch name is a sentence about the change.
-
The bundle shipper pattern
When the sandbox can't reach the repo, hand the human a single bash command that does everything.
-
Print cleanup commands. Don't auto-delete.
Every ship script ends with rm commands you can copy. None of them run on their own.
-
Saving alpha into WebP without a halo
alpha_quality=100 and exact=True kept the soft edges of the cutouts clean over the aurora.
-
The working tree must be clean before any ship
Every ship.sh aborts if git diff isn't empty. No exceptions, no auto-stash.
-
Cursor as a continuous slider
Mouse X drives the about hero through ten wardrobe frames as a continuous cross-fade, not a discrete scrub.
-
One signature interaction per page, never the same one twice
The home, about, library, and stack each carry a different interactive idea. None repeat.
-
Extracting the noise URL instead of duplicating it
The about page reuses the home hero's noise texture by reading it out of hero.css at install time.
-
Two media queries decide whether the interaction runs
If the device is touch or the user prefers reduced motion, the script never attaches a listener.
-
Noise is what makes the aurora feel like a surface
A 14% opacity noise layer at mix-blend-mode multiply takes the aurora gradient from CSS to texture.
-
Vercel preview as the review loop
Every branch push gets a real URL. The review happens against the deployed preview, not the dev server.
-
1.5 MB of lossy beats 11 MB of lossless
Quality 92 WebP keeps the photo's perceived quality and ships under a tenth of the lossless weight.