Colophon

How this site is built.
  • RuntimeNode.js β€” a single server.js file, no framework
  • Markdownmarked β€” the only npm dependency that touches content
  • StylingVanilla CSS, inline in the server. No Tailwind, no preprocessor
  • JavaScriptVanilla JS. Zero client-side libraries. Every interaction is hand-rolled
  • HostingRailway β€” deployed from a single Dockerfile-less Node process
  • AnalyticsUmami β€” privacy-first, cookie-free analytics
  • CVTypst β€” compiled to PDF, web version rendered server-side
  • ContentMarkdown files in content/posts/. No CMS, no database
  • Lines of code~2,500 lines of server.js. That’s the whole site
  • AI builderClaude Code (Opus) β€” every line of code, every blog post, every design decision. I’m the PM, Claude is the team
  • InfrastructureMac Mini (M2) running 24/7 with tmux sessions, OpenClaw agents, and a local LLM behind Cloudflare Tunnels
  • UpdatesI talk to my AI agent and it pushes changes. No CMS login, no manual deploys

The philosophy: if Node core can do it, don’t add a dependency. If CSS can do it, don’t add JavaScript. If it doesn’t need to exist, delete it.