How publishing works here


This post exists to explain the workflow of this site — and to be the first thing you delete once you’ve read it.

Draft, preview, publish

Every change to this site follows the same three steps.

Draft. A new piece of writing starts life on its own, separate from what’s live. Nothing you write can affect the published site until you decide it should.

Preview. The moment a draft exists, it gets built and served at its own private URL. This is the real site — same build, same styling, same everything — just not the public one. Share the link, read it on your phone, sit on it for a week.

Publish. When the preview looks right, you publish. The live site updates in about a minute.

That’s the whole model. There is no save button that half-publishes something, and no way to accidentally push a rough paragraph to the world.

What’s underneath

If you’re technical: the draft is a git branch, the preview is a Cloudflare Pages deployment for that branch, and publishing is merging to main. The discipline is always branch, never commit to main directly.

If you’re not technical, none of that matters, and you’ll never be asked to learn it.

Writing a post

Posts are Markdown files in src/content/blog/. Each one starts with a small block of metadata:

---
title: 'Your title'
description: 'One or two lines. This shows up in search results and previews.'
pubDate: 'Aug 28 2026'
---

Only title, description, and pubDate are required. You can also set updatedDate, and heroImage if you want an image at the top.

After that, write normally. Headings, bold, code, links, lists, and images all work the way you’d expect.

Making it yours

Everything site-specific lives in one file: blog.config.json, in the root of your repository. Your name, the site title and description, the URL, and your social links are all there. Change them there and they update everywhere — header, footer, RSS feed, and search metadata.

Then delete this post and write your own.