Notes Aug 23, 2026 · 1 min read

Hello, world — and how this blog works

The first post, and a short tour of how writing here actually works — a Markdown file, a build, a deploy. No CMS, no database.

This site used to be a single HTML file. It still mostly is — but now it has a blog, and the whole thing is generated from a folder of Markdown files by a script small enough to read in one sitting.

Why not a CMS?

Because I don't want one. A CMS is a second product to maintain, with logins, plugins and a database that needs backups. For a personal site, a text file in a folder beats all of that:

  • Writing happens in any editor, offline, with the same tools I use for code.
  • Versioning is free — the posts live next to the site source.
  • Publishing is one command that takes about ten seconds.

Anatomy of a post

Every post is a .md file in blog/ with a small header block at the top:

---
title: Hello, world — and how this blog works
description: One or two sentences for the list page and search engines.
date: 2026-08-23
category: Notes
tags: [meta, writing]
cover: images/hello.jpg    # optional
---

The post body, written in plain Markdown…

The file name gives the URL — 2026-08-23-hello-world.md becomes /blog/hello-world/. The category becomes a filter on the list page and gets its own URL under /blog/category/…. Reading time is computed from the word count, so there's nothing to fill in by hand.

What the build does

  1. Reads every file in blog/, skipping anything marked draft: true.
  2. Renders the Markdown to HTML, with syntax highlighting for code blocks.
  3. Writes a page per post, a page per category, the list page, an RSS feed and a sitemap.
  4. Drops the three newest posts onto the home page.

Then npm run deploy pushes the output to Cloudflare Pages, and that's it.

The best publishing workflow is the one that doesn't make you think about publishing.

If you're reading this, it worked.