Skip to content
colophon

How this site is built

I write here about keeping software boring and legible, so it would be strange not to say how this one works. There is not much to it, which is the point.

Framework
Nuxt 4, prerendered to static HTML
Hosting
Cloudflare Pages
Content
Markdown in the repo
Styling
Tailwind CSS
Type
Geist and Geist Mono
Runtime
Node 20

No CMS, no database

Every essay is a markdown file in the repository. Projects, bookmarks and the rest are plain JavaScript objects in a static/ folder. Nothing to log into, nothing to migrate, and nothing that can go down on its own. Publishing is writing a file and pushing it.

Every page is also readable as plain markdown: add .md to any URL. There is an llms.txt and a small MCP server for anything reading this without a browser.

Why build it this way?

Because I have spent years shipping into systems that were already live and could not be taken down to be fixed, and the habit sticks. A site with no database has no database to restore. A page that is a file cannot half render. If something breaks, it breaks at build time, in front of me, rather than in front of a reader.

The one place I have not followed my own advice is measurement: the analytics are heavier than I would like, and the privacy policy is specific about what loads and when.

let's talk

Building something where this kind of work matters?

I'm in GMT+6 and work async-first, so your timezone is never a reason not to reach out.

Get in touch