← Projects

How hornof.org was built

This site is deliberately small — and still ships no tracking. It's built with Astro: pages and layouts compose from small components, the content — projects, talks, publications — lives in typed content collections, and a single style.css holds the entire look, so a future re-skin touches nothing else. The interactivity is a handful of tiny vanilla scripts: the scroll-spy, the time-machine, the theme toggle, the breathing panorama, and the project lightboxes. astro build compiles it all to static HTML, hosted on Cloudflare Pages and deployed straight from a git push.

The more unusual part is how it was built. hornof.org was rebuilt as the first real lane of an agentic engineering loop: an approved product spec and engineering doc up front, then one pull request per feature. Every feature starts as Playwright tests written from its acceptance criteria — the tests come first, the implementation follows until they pass. Lighthouse budgets (performance and accessibility both ≥ 95) gate every change, and a human reviews and merges each PR. The agent is Claude Code; a person stays in the loop for taste, review, and the calls a model shouldn't make alone.

The whole thing — history, tests, and this page — ships one reviewed pull request at a time. More of my work is on GitHub.