This blog stores every post as a record in an AT Protocol PDS. The page you're reading now fetches those records over XRPC and renders them to HTML. The body is stored canonically as markdown.

I typically keep projects in my big homelab monorepo right now since that's low-friction for me, but I think this rules hard enough to gain a life of it's own, it would need to be split out and published. I'd also have to deslop it though ๐Ÿ˜….

How I use it

  1. Write a post in Markdown (with the required frontmatter).
  2. blog pub --file post.md --images blah.png creates a record in your PDS.
  3. blog serve runs a webserver that fetches records and renders them via Askama templates.

When a post is published, the frontmatter is rewritten to include the rkey and any image-to-cid mappings, so if I need to update it, I just re-run the same command.

The date on this one is a little off because it's essentially a testing post to iterate on, and I'm still not sure I'm happy about it. I don't think UTC has a place in blogging, but I also don't think offsets are good alone. August 3, 2026 in America/Edmonton (-06:00) is the closest I can get to something I like (time optional - that's a display consideration). But I also don't want to mislead people into thinking I'm in Edmonton.

The canonical identifier for this post is its AT URI โ€” portable across PDS hosts and independent of any renderer, at least in theory.

It supports images too, they also live on the PDS.

A photograph of a red Torii gate at Fushimi Inari Shrine, tourists are taking photos.