Colophon

How this site is built, what it costs to run, and why there is no database anywhere in it.

This is the first thing on the site, so it may as well be an account of the site itself.

What it is

Every page you are reading was generated once, at build time, and copied to Cloudflare’s edge as a plain file. There is no server rendering a response for you, no database being queried, no session, and nothing to log in to. A request for a page here is a request for a file — the same one everyone else gets.

That is a deliberate constraint rather than a limitation I am tolerating. A personal site is one of the few things that can be built to outlive its own maintenance: no dependency that must be patched on a schedule, no origin that can fall over, no monthly bill that quietly grows. The cheapest system to keep alive is the one that isn’t running.

The pieces

  • Astro turns Markdown files and a handful of components into static HTML. It ships no JavaScript to the browser unless a page asks for some. So far, no page asks.
  • Cloudflare Workers static assets serves the built files. TLS, HTTP/3 and the certificate renewal are somebody else’s problem, which is the correct place for them to be.
  • No web fonts. Type is set in whatever good faces your device already has. Nothing to download, so nothing to flash, reflow, or fail.
  • Cloudflare Web Analytics counts page views. It is cookieless and stores nothing that identifies you. I look at it perhaps monthly, mostly to find out which posts people actually finished.

Publishing

Writing a post means adding a Markdown file and pushing. Adding a product means adding an entry to one TypeScript array. Both are things I can do from a phone if I have to, and neither involves an admin panel that I would otherwise have to keep secure.

Each piece can exist in English, in Chinese, or in both. The toggle in the corner moves between them; when a translation doesn’t exist yet, it says so instead of pretending.

What it doesn’t do

No comments — if you want to argue with something here, my address is at the bottom of every page, and an email costs you enough effort to be worth reading. No newsletter signup, no cookie banner, no recommendation engine. If a post is worth returning for, the feed is right there.

I expect to change most of this eventually. That is also fine: it is a few hundred lines of my own code and a directory of Markdown, which is about the right amount of machinery for one person’s opinions.

← Back to writing