This site is a single Go binary running on a NixOS server at Vultr. Caddy terminates TLS (Let's Encrypt, DNS-01) and forwards to the binary on a local port.
The whole server is one Nix flake: the app, the web server, the firewall, the mail relay, the disk layout. The root filesystem is erased at every boot — ZFS rolls it back to a blank snapshot, and only state I have explicitly chosen survives. What the machine runs and what it remembers are both written down in the site's repo.
The binary is Go + Templ for HTML, with Datastar driving the frontend (hypermedia + SSE, no SPA) and Stellar CSS for design tokens. Content — posts, pages, talks, recipes, menus — lives in Stardust, a temporal fact database, currently pre-alpha, because a personal site is exactly the right place to run a pre-alpha database. Posts are facts with history; I edit them in the browser, and the markdown stays in git as a paper trail.
Local dev uses Air for hot-reload of .go/.templ files and Stellar's watcher for CSS, orchestrated by Task. Deploys are one command: Nix builds the binary and the content, ships the closure over Tailscale, and switches the system atomically.
Source lives on my self-hosted Forgejo and is mirrored to GitHub.
Talks are part of this site at /talks. The design goal is the same as before: small footprint, kind to the user and the planet — minimal JS (just Datastar), self-hosted fonts (IBM Plex), server-rendered HTML.