How this
site is built
Built with Claude Code, then set up and hosted on Cloudflare. Since I spend my working life on other people’s systems, it seemed fair to show the wiring on my own.
Boring on purpose.
Astro
Static site generation with TypeScript in strict mode. No React, Vue, or Svelte — the site has no client-side state worth a framework, so every page ships as HTML with a small amount of vanilla JavaScript for the motion and the contact form. None of it is needed to read a page.
Hand-written CSS
One stylesheet of design tokens and shared primitives. No Tailwind and no component library — a deliberate choice, since the palette and type treatment are the point and a utility framework would have meant fighting its defaults.
Archivo and IBM Plex Mono
Archivo is a variable font with both width and weight axes, which is what lets the name stretch to 120% without a second font file. IBM Plex Mono carries the labels and captions. Both are self-hosted rather than loaded from Google, so reading this page contacts no one but this server.
SVG, CSS and two small scripts
The integration map is inline SVG; its packets travel on native SMIL animation, and each node flares as one arrives. The rest is CSS — the name resolving on Archivo’s width and weight axes, the copper fill and reading line tied to scroll, the page-to-page transitions — plus three small scripts: one reveals each section as you reach it, one draws the copper wire that carries the map’s current down every page and powers each section on as it arrives, and one adds a soft light that follows a mouse pointer. No animation library. If your system asks for reduced motion, or you press “Pause motion” in the footer, every page is drawn complete and still.
Set up and hosted on Cloudflare.
Cloudflare Pages
Static assets served from Cloudflare’s edge network. The build runs on Cloudflare, not on my machine.
Push to main
Every commit pushed to the main branch triggers a build and goes live. There is no separate deploy step and no staging environment — which keeps the discipline honest about what gets merged.
Cloudflare
The domain runs on Cloudflare nameservers with the site records proxied, and TLS is Full (strict) end to end.
Pages Function → Resend
The form posts to a serverless function running on Cloudflare, which validates the message and hands it to Resend to deliver. Nothing is written to a database, because there is no database.
Git and GitHub
Version controlled from the first commit. The repository is private for now.
Nothing is watching you read this.
No analytics, no cookies, no tracking scripts. If you pause the motion, that one preference is remembered in your own browser and never sent anywhere. The fonts are served from this domain rather than Google’s, so reading any page here contacts nobody but this server.
The one exception is deliberate and confined to the contact page, which loads Cloudflare Turnstile to keep automated submissions out. It is a privacy- preserving check — no tracking cookie, no cross-site profile — but it is a request to Cloudflare, and claiming otherwise while shipping it would be a lie. Every other page makes zero third-party requests.
If you use the form, the message goes to my inbox and nowhere else — it is not stored, logged, or added to a list, because there is no list.