How it's made

Colophon

Cream paper, ink, hairline rules, and one electric blue accent. Built to read like a printed spec sheet and to load like a static page, because a portfolio arguing for engineering craft should survive being opened in dev tools.

Version

v3.067

Runtime dependencies

9

Build-time dependencies

10

Tech stack

The system

Framework
Next.js 16, App Router
Language
TypeScript, strict
UI
React 19, server components by default
Styling
Tailwind CSS v4, CSS-first config
Components
Hand-rolled editorial primitives
Theming
next-themes, class strategy
Runtime
Bun
Hosting
Vercel
Analytics
Vercel Analytics

Typography

Three typefaces, three jobs

Archivo

Display and interface

Headlines, section titles, buttons. Extrabold and tight for anything that needs to land.

Newsreader

Body

Every paragraph on the site. A serif because this is a page of arguments, not a dashboard.

JetBrains Mono

Labels and metadata

Stamps, eyebrows, spec labels, and link actions. The engineering voice in the layout.

All three self-host through next/font, so there is no request to a font CDN and no layout shift while they load.

Color

Six tokens carry the whole site

--background#fbfaf6#16140f
--foreground#16140f#f2efe6
--muted#f2efe6#221e16
--border#dcd7ca#35301f
--accent#e6eafb#1b2340
--primary#1b3bd4#5b78f0

Light value, then dark. Everything else on the site is one of these six, or text sitting on top of one of them.

Build

How it gets to you

Bootstrapped with v0, then taken apart and rebuilt by hand. Maintained with Claude Code. Every route except the dynamic Open Graph image is prerendered at build time, so the site is static files on a CDN.

The build type-checks. It used to skip that, and it used to ship 51 runtime dependencies for a site that imports 9. Both are fixed, and this page lists what is actually installed, so it stays honest.

Dependencies

Runtime packages

@vercel/analytics
^1.6.1
class-variance-authority
^0.7.1
clsx
^2.1.1
lucide-react
^0.574.0
next
^16.2.12
next-themes
^0.4.6
react
19.2.8
react-dom
19.2.8
tailwind-merge
^3.6.0

Dependencies

Build-time packages

@tailwindcss/postcss
^4.3.3
@types/bun
^1.3.14
@types/node
^25.9.5
@types/react
^19.2.18
@types/react-dom
^19.2.4
eslint
^9.39.5
eslint-config-next
^16.2.12
postcss
^8.5.25
tailwindcss
^4.3.3
typescript
^5.9.3