How this site is built: the stack, the tooling, and the decisions behind it.

A record of what the site runs on, and why each piece is here.

[ intent ]What this is

A personal site that stays out of its own way: fast to read, quiet to look at, and honest about how it works. Anything that can't earn the bytes it costs is left out.

[ stack ]The stack

The load-bearing pieces, each earning its place rather than its hype.

[ type ]Typography

Three weights from the Geist family: Geist Sans for reading, Geist Mono for the technical labels, and Geist Pixel Square for the headings.

Geist Sans carries the reading.

Geist Mono [ the technical labels ]

Geist Pixel Square

[ principles ]Design principles

Minimal, static-first, and dark-mode-first. Stable content is inlined at build time (no runtime calls to third-party APIs for things that don't change), so pages render instantly whether or not the network cooperates. Most of the work is in the CSS, not the dependency list.

[ tooling ]Tooling & infra

Bun runs and bundles, ESLint and Prettier keep me honest, and Playwright catches the regressions I'd otherwise ship at 2am.

Read the source →

[ thanks ]Credits & inspiration

This site stands on open-source primitives: base-ui, motion, hugeicons, shiki, and the Next.js and React teams who do the unglamorous work so this site can be small.