Blog Infrastructure


Mostly I just wanted to write a blog about learning to use AI and share the good, bad, and weird experiences of using it. Like so many things these days it turned out to be shockingly aggravating.

I had some goals in mind:

  1. I didn’t want to host anything if I could help it (this is just bonus headache for no real reason)
  2. I wanted to write something once and have it serve as both a blog post that could be read on a website and also a newsletter-style email in case folks preferred to get posts that way
  3. I really needed at least some control over the formatting of the content; I knew I would be posting code, prompts, and AI generated text and wanted to differentiate between all of these

I thought about Substack at first. Their editor is better than average, they cover both the blog and newsletter “channel”, they have at least some scraps of discoverability being a dedicated platform, and (though it wasn’t a goal) they had an easy paid subscription path if that ever made sense. Problems appeared pretty quickly though.

First of all, while the Substack UI is nice to work in, it really wasn’t flexible enough for all the formatting I wanted to be able to support. Since there’s no support for custom CSS that’s a difficult obstacle to work around. Substack’s analytics are also very mid and while they do support injecting tracking IDs for popular analytics tools you can’t add a code snippet for anything they don’t have first-class support for. Substack’s vibes are also pretty dodgy (that’s a whole other thing that I won’t go into detail about here, but it was definitely on my mind).

So how about Medium? Medium is popular.

Medium had two problems for me: first, you are buying in pretty deeply to the Medium platform. It’s clear that Medium is particularly interested in Medium as a brand; they very much want to be directly recognized by readers regardless of who wrote the content. That custom formatting for different bits of content is never going to happen on Medium. Even exporting your own subscriber list from Medium is limited by fairly recent policy changes.

The second issue is Medium’s stance on AI writing. I knew I was ultimately going to want to include significant chunks of text written by AI; almost certainly with commentary around them, but still very AI-forward. I think AI writing can be weird and interesting, so I want to talk about it, but I’d rather not be running afoul of Medium’s “we don’t promote AI written content” stance (especially since the biggest argument for Medium is better discoverability).

OK. Not Medium.

I poked around a bit and found a bunch of interesting platforms and tools but none that felt particularly good to use – until Ghost.

Ghost is very slick. Their editor is fantastic to work with and produces nice looking newsletters and posts without much fiddling. It supports custom analytics snippets and CSS. It even still has the path to monetization. The discovery options are pretty hand-wavy and honestly seemed to just not really do anything at all, but that’s OK – the Substack version of discoverability wasn’t anything to write home about and Medium’s probably wasn’t going to help me very much.

It was the tool I opted for and used until very recently.

The problem with Ghost is, firstly, that it is deceptively expensive. There’s a free trial, but no free plan, so you are going to spend something no matter what. The problem is that when you pay for the Starter plan on Ghost you get basically nothing. Custom themes? Nope, those start at the Publisher tier. Any meaningful on-site analytics? Nope. Paid subscription support? Nope.

That lack of themes is a tough pill to swallow and leads into the second issue I had with Ghost: it’s not easy to step outside of or extend its formatting. Just changing text color is going to require a Markdown or HTML block. Custom CSS code injection helps, but it’s still… clunky. It essentially negates how nice Ghost’s editor is, since I’m just going to be writing Markdown or HTML anyway.

In the end it was frustrating enough that I went looking for alternatives. Again.

This time I found my way to Buttondown. Buttondown is actually pretty amazing; in particular it has a great API that opens the door to building my own tools to support managing posts and sending out content regularly. But formatting and theming rears its head again. Buttondown does support text colors – even custom colors – but you can’t save those custom colors anywhere. So if you don’t like the default set you will be picking the same custom color over and over again.

Custom CSS does help the problem of simple formatting, but layouts for the post archives are awfully thin on the ground and the ones that are available are … very average (and strangely don’t do a very good job of displaying header images from posts at the correct aspect ratio).

I’m not really sure why it is such a struggle to get a reasonably nice, modern looking blog and newsletter combination that has a moderate amount of customization as a service. But here we are, at least in my opinion.

Where does that leave things?

Well, basically I gave up. I’m just hosting the blog myself now using Astro and a Cloudflare Worker. This also means I’ve abandoned the newsletter half of things (I am not signing up to manage an email pipeline myself for a blog with somewhere between zero and three readers).

Buttondown also still turned out to be a good discovery. I’m still using it, just not for my personal blog; it’ll be the mechanism for newsletters from Spinfoam Games which, thanks in large part to Claude Code making it possible to cram in extra development in my off hours, actually does have news about things now.


A “fun” bonus observation to close with: most of these platforms will export your content in case you want to move to a different platform. This does not work as smoothly as you might think it would it 2026. If you have anything other than some light italics and boldface in your content you will need to manually re-format it, at least a little bit.

I have around a dozen articles right now so this was mind-numbing but not a particularly big issue. If you happen to be someone with years of blogging content behind you and you plan to switch platforms for any reason brace yourself for weeks of reformatting and fiddling.