~/colophon
How this site is built
This site is small on purpose. The goal is to outlive any given stack, framework, or vendor. Everything that matters — the writing, the projects, the photographs — lives in plain text and image files in a Git repository. The framework around it is replaceable.
Stack
- framework
- Next.js 15 (App Router)
- language
- TypeScript
- styling
- Tailwind v4 + hand tokens
- content
- MDX in /content
- hosting
- Vercel
- source
- GitHub
- analytics
- [ADD — Plausible, Vercel, none]
Type
Set in Geist Sans and Geist Mono— both designed by Vercel. Geist Sans handles body and headings; Geist Mono handles metadata, timestamps, breadcrumbs, and code. Two faces, one family.
Colour
Near-black background (#0A0A0A), near-white ink (#EDEDED), and a single sharp green accent (#00DC82) used for hover, focus, selection, and live-state indicators. Everything else is a step on a cool gray scale.
Decisions worth knowing
- Content as files, not a database. Every note and project lives as an
.mdxfile in the repo. You can change frameworks; you can’t easily change content systems. - Static rendering by default.Pages are generated at build time, then cached at Vercel’s edge. Fast everywhere, cheap to run.
- Minimal client-side JavaScript. The site is mostly HTML and CSS. Faster, more accessible, easier to maintain.
- Permanent URLs. Once published, a URL never changes. Redirects fill any gaps.
What I borrowed
The structure of this site — the /nowpage, the build-log model — owes a lot to Derek Sivers, Robin Sloan, and a generation of small, handmade websites that have been quietly compounding for decades. The visual language owes to Vercel and Linear — the standard-bearers for what modern dev-tool aesthetics look like.
Source
The full source is at [ADD GITHUB REPO URL]. Feel free to borrow anything useful.