02 · Personal · 2026
This site
Proves
One person with a written plan, a set of rules and a few gates can build what used to take a team.
Role
Brief, decisions and approval
Stack
- Next.js
- React
- TypeScript
- Tailwind
- Storybook
- Zod
- Vitest
- Playwright
- axe
- Biome
- Claude Code
The problem
A portfolio is a design system, a content model, a writing job and a front-end build, for a reader who gives it ninety seconds. Done alone and by hand it takes long enough that the last version of this site still carries a title I no longer hold.
The site this one replaced. Home.
Work, as a grid of logos.
Google, as a list of bullets.
About.
Handing the whole job to an agent fails differently. You get something plausible, fast, with invented numbers and the voice of nobody.
The move
Harness first
The harness came first and the site second. I wrote the brief and made the decisions: scope, projects, the look, what could be said about Reddit. A lead Claude Code session turned those into a plan, a conventions file, a frozen content schema and a fact ledger before a page existed.
Contracts
Components hold no copy. Every number on the site has to match a ledger entry with a source, and a test fails when one doesn't. The schema is frozen, so the agent writing the words and the agent building the page can't drift apart.
Agents in parallel
The work was split so agents could run in parallel without colliding. Each one owned a directory and touched nothing outside it.
The thing itself
You're looking at the artifact. How it was built has the phases, the gates, and counts read from the repository at build time. The design system's Storybook is public.
What it took
Next.js, React, TypeScript and Tailwind, with the design system documented in Storybook. Content is typed objects validated by Zod at module load, so a bad edit fails the build instead of the page.
- Story coverage: every exported component has stories.
- Accessibility: axe on every story and every route.
- Visual baselines: screenshots compared on each change.
- The fact ledger: a figure with no source fails the test.
- Token contrast: the color tokens are tested in both themes.
- Typecheck and lint: strict TypeScript and Biome.
The hard part was the ordering: tokens, schema and ledger had to be settled by one hand before anything could run in parallel. After that, four agents on the parts, two on patterns and chrome, one on routes, three on review. One commit per agent.
The honest part
This site argues for a harness while showing very little usable product. The most demanding thing a visitor does here is read.
The content lives in typed files. Changing a sentence means editing code and passing the gates.
And agents wrote the code and the copy, these sentences included. My part was the brief, the decisions, the choice of skin and the approval.
The outcome
A site with a documented design system, typed content and a test that refuses unsourced numbers, made by one person directing agents.
You have been reading the output.