COLOPHON
The site is one of the experiments. How it's built, the rules it runs on, and what got killed along the way.
APPARATUS
A pnpm + Turborepo monorepo. The site is Next.js (App Router, Server Components), Tailwind CSS v4 with the whole identity expressed as theme tokens, and Geist / Geist Mono. Every page is statically generated at build time; client-side JavaScript is a fixed roster of eight deliberate islands — nav state, the g-key shortcuts, the ⌘K palette, the lab filter, the bench console, the easter-egg modes, and two motion micro-islands (wordmark decrypt, stat tickers). Everything with content in it is server-rendered. The theme toggle is not an island: it sets one attribute and writes one storage key, which does not earn a hydration runtime.
Content is data: each project is one JSON file, notes and currents snapshots are MDX with schema-validated frontmatter, and strict zod schemas fail the build on a typo'd field rather than silently shipping a broken page. Code blocks are highlighted at build with shiki. Hosting is Vercel; a push to main is live in under a minute.
The same content the pages render is served to machines seven ways: a REST API, an MCP server, an A2A agent, a SOAP service, a CLI, markdown mirrors, and an llms.txt index. They are accounted for on /developers, and /bench fires every one of them at this deployment so the accounting can be checked rather than believed.
DESIGN RULES
- no hue is the brand — the loud move is inverting the foreground, and a screen gets one
- four signal hues, one job each: green live, blue shipped, yellow provisional, red over — always beside a word that says the same thing
- one gray, stepped by alpha, each step with a fixed job; anything load-bearing stays above the decorative steps
- absolute dates only; a static site claiming “3 days ago” is lying within a week
- no drop shadows, and nothing glows — depth is a 1px hairline or a muted fill, and a hue is a flat mark, never a light source
- square by default; the search field and the keycap are the only two exceptions
- uppercase is reserved for mono microcopy; body text never shouts
- 150ms and one curve for every colour, border and opacity change; entrances are one-shot and everything honors reduced-motion
- every list the site renders is generated from data — no hardcoded cards
AI DISCLOSURE
This site was built end-to-end by Claude Code working in a terminal: schema-first scaffold, an adversarial multi-agent review pass (23 confirmed findings fixed before the first deploy), and a six-lens research sweep of the personal-lab-site canon that drove the current layout. The human contribution is taste, priorities, and the merge button — which is exactly the division of labor the stack page describes.
Written content marked sample is seed data awaiting replacement. Everything else is real, and mistakes are mine to keep.
SITE DESIGN GRAVEYARD
Features of this site that were built, then killed. The graveyard rule applies to the apparatus too.
- relative timestamps — killed before launch — “3d ago” on a static page becomes a lie the moment the build finishes
- accent gradient hairline on shipped cards — killed by the no-gradients rule, ten minutes after it was written
- cmd+k command palette (v1) — killed in research — seven g-shortcuts did the same job in a few dozen lines. Resurrected in the makeover once the site had enough surface to search; the index is built from content at compile time, so the verdict can flip again
- live stats dashboard — killed on the evidence — every one observed in the wild reads as abandoned the moment its data stops flowing
- the bench-at-night palette — killed in a redesign — an OKLCH hue-tinted dark with one green accent, replaced wholesale by a system built on one gray. The green came back later as a signal rather than a brand: it now means live, sits beside a word that says so, and tints nothing it does not name
- pointer-tracked spotlight cards — killed with the accent it was made of — a delegated pointermove wrote --x/--y and a masked 1px border glowed. The replacement is a gap-px grid where the gap itself draws the hairlines, which is both cheaper and one fewer island
- the scan sweep and the three background layers — killed by the no-glow rule — a masked dot grid, one bench-lamp radial, a grain film, and a band that swept the currents strip once per load. Ambient light has no job in a system built from lines
- apps/portfolio — killed after four days — an Astro rebuild carrying its own seeded content and two majors of security debt, for a domain that already had a working site. Its Playwright suites, Lighthouse gate, seed report and theme toggle were ported here first; the rest was two of everything