Skip to content

How this site is built

How this site is built, and what it costs to load.

I spend my working life on other people's infrastructure, so I may as well document my own. Everything below is read at build time. I have not typed any of it, which means it cannot go stale.

deepboda.inlocal

$ git log -1 --oneline

afdaabe Keep the build block out of the exported netlify.toml

branch
main
committed
23 Sept 2026, 06:36 UTC
built
23 Sept 2026, 06:45 UTC
node
v24.14.0
next
16.3.1
routes
14 prerendered

Everything except the OG image endpoint is static HTML, generated at build and served from the edge.

What it ships

Most of the work here went into what does not load.

reveals
native CSSScroll reveals use animation-timeline: view(). They run on the compositor and ship zero JavaScript.
gsap
deferredOnly the pinned request trace needs scrubbing and per-section state. GSAP is imported inside an effect, so it is never in the initial bundle.
three.js
removedThere was a WebGL cluster here. It cost 883KB, only ran above 1024px, and the fallback everyone else saw explained nothing. A legible diagram that works on a phone was worth more than a 3D one that most people never loaded.
fonts
Inter, self-hostedSubset and preloaded through next/font, with font-display: swap. No request to a third-party font host.
client components
fourSmooth scroll, request trace, cluster board, reading progress. Everything else is a server component and arrives as HTML.
analytics
noneNo trackers, no cookie banner, nothing to consent to.

Design

type
InterThree weights. 400 for body, 600 for headings, 700 for display.
colour
six tints, one accentEach layer of the request path owns a colour and keeps it everywhere it appears, so the same green always means the machine. Four greys carry the rest.
mode
oneNo theme toggle. The dark bands are a contrast device, and a second theme would have taken that away from them.
cascade
@layer base / componentsBase styles are layered so Tailwind utilities still win. Unlayered CSS beats layered CSS regardless of specificity, which silently breaks every utility if you get it wrong.
motion
opt-out honouredEvery animation sits behind prefers-reduced-motion. Turn it off in the OS and the site still reads.

How it deploys

Push to main, build, prerender, done. The whole site is static, so a deploy is a file copy and a rollback is the previous immutable build.

I could run this on EKS. It would be a silly thing to do. The rest of this site argues that most teams climb before they need to, so putting a personal site on a cluster to show off would make the point badly. This is rung one. Rung one is right here.

Source

All of it is public, including the commits where I got it wrong. If you want to see how a section is wired rather than take my word for it, the file is in there.

github.com/DeepBoda/deepboda.in