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
- Write a post in Markdown (with the required frontmatter).
blog pub --file post.md --images blah.pngcreates a record in your PDS.blog serveruns 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.