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.