I moved my blog from WordPress.com to Bluehost and the open-source version of the WordPress engine back in 2018. I wanted more control, and wasn’t willing to pay the Automattic folks for the right to add more plugins to my blog. Instead, I probably paid even more money to a different corporation because, well, it felt better.

Technology has evolved, and I’ve decided to move backwards and save some money. With three or four hours of work, I migrated my entire blog off WordPress and into Hugo, a lightweight static blogging engine, relies directly on Markdown, and is simple and cheap to manage on a hosting provider like Netlify.

It’s not perfect. My fun footnotes no longer appear on hover, instead reverting to the tried and true anchor link method. I managed to maintain $\KaTeX$ support, but only just. I have yet to figure out how to enable environments like array and align. And publishing isn’t quite as slick because I’ve given up the convenience of directly tying Ulysses to WordPress and instead must add my markdown file to GitHub either by pushing from the terminal, or uploading it directly. Like an animal.

Yet, I’m superbly pleased I managed to pull this off so quickly. My blog is more accessible in numerous ways. It relies on even more open technology, and its use of Markdown makes the content transparent and transportable. How I write these posts is precisely how they’ll display on the website without manual interference and tweaking like I always had with WordPress. And, it’ll save me a couple of hundred dollars each year.1

That didn’t use to be the case, which led to a couple of technical hurdles that I used Claude for to help resolve. Both of these involved “short codes” to enable WordPress plug-ins. Footnotes looked like this over on WordPress:

...of the Harley's[mfn]We didn't know their actual name, but they both drove Harley motorcycles.[/mfn] we switched...

This made writing pretty nice, actually. You could naturally insert a footnote as an aside in the middle of the prose. However, this is not how standard Markdown/HTML footnotes work. You instead reference a footnote that is placed at the end of the document:

...of the Harley's[^1] we switched...

[^1]: We didn't know their actual name, but they both drove Harley motorcycles.

I threw Claude at the problem. It created a simple Python script that found every instance of these footnote pairs, extracted the actual text of the footnote, replaced the tag with the anchor link, and tossed the footnote reference at the end of the document. It was slick and worked the very first time.

Math formatting was simpler in some ways, but required more manual work. Luckily, my blog hasn’t been a math blog in quite a while so there were only around 20 posts out of 475 that needed intervention.

There are two math tags: [katex] and [katex display=true], which need to map to $ and $$ respectively to render in Hugo. I also had some even older $latex instances, some of which I’ve ignored for now.

With those out of the way, there were a few more problems like managing image and document references, ensuring Hugo maintained links between posts once I relaunched the blog, and changing the default font for the PaperMod theme I chose.2 I’ve also iterated on creating a theme in Ulysses that will roughly match my blog. That’s still a work in progress.

I’ve always been someone who likes messing around with my tools to help reinvigorate interest in what those tools create. Just look at some of my past writing setup descriptions. But this change has tangible, monetary benefits besides the particular fun of being a tech nerd. Hopefully, it’s a fun and ultimately unimportant change for the few readers I have.


  1. Look, I’m also upset I was spending that much on a blog nobody reads. Just be proud that I’m fessing up to it. ↩︎

  2. For the moment, I’ve settled on Atkinson Hyperlegible. It’s a sans-serif font that can still distinguish between 1, l, and I. ↩︎