Why I ditched Wordpress for Ghost

It's no secret: I'm a self-hosting nerd. I manage over 40 different websites for my customers, my company, and myself. But that's not all. I also admin dozens of Docker containers and other hosted applications for both business and pleasure.

Why I ditched Wordpress for Ghost
This article contains affiliate links. Affiliate links are denoted by the icon. I get a small kickback if you make a purchase using my link at no additional cost to you.

It's no secret: I'm a self-hosting nerd. I manage over 40 different websites for my customers, my company, and myself. But that's not all. I also admin dozens of Docker containers and other hosted applications for both business and pleasure.

I'm not shy about it, either. I love being able to quickly spin up a new service and learn all about it in real time.

This all started, for me, with Wordpress. Back in the day, Wordpress was the defacto standard. In many ways, it still is. It's the primary Content Management System for the web, being the underpinnings of an estimated 40-something percent of today's websites. I've been using Wordpress for decades (yes, plural).

That's why I went with Wordpress for my blog when I started it last month. It's common. It's familiar. And it's reliable.

Given the drama with Wordpress founder Matt Mullenweg and the way Automattic has been (mis)behaving, though, I felt uneasy about choosing their CMS for my blog. But I wanted a dedicated, stable, and extensible option. After all, that's what Wordpress is known for.

But as I was using it, it felt... let's just say it felt long in the tooth (to say the least). It's slow, it's unfocused, and the plugin system is clunky at best.

Ultimately, though, my goal was to enable the IndieWeb plugin and contribute to the growing community of independent site administrators who are embracing the federated nature of the Internet and using W3C protocols for a more social web.

The issue was, though, the plugin didn't behave in the way I wanted and (no ill-will towards the developer) I found it more frustrating and confusing than helpful.

A screenshot of the IndieWeb Wordpress plugin as it displays likes, reposts, and mentions.
The designer in me has a lot of questions. Why are these avatars so huge? Why are we using emojis as icons? Why are there headers and emojis? Why not just a single facepile of interactions? And why on God's green earth are reposts using the RECYCLING emoji?!?

So, being irritated by the slowness, the odd choices of the main plugin I wanted to use, and my overall disdain for Wordpress' parent company Automattic, I was regretting my decision to use Wordpress.

I'd been searching for alternatives and I was reflecting on my time with Ghost.

Ghost is awesome. And I had considered it when I was thinking about starting this blog. But I had run my old site Viewsink using Ghost and I had two reasons why I didn't want to use it for this endeavor:

  1. It was "too much" for what I wanted.
    1. Ghost has a handful of features that I didn't need
    2. It runs on Node.js (which is not my favorite backend)
    3. I'd have to deploy and manage a Docker container on my limited public cloud infrastructure
  2. It also wasn't "enough."
    1. My primary motivation was the IndieWeb integration (fediverse/webmentions/pubsub/etc)

That last one was critical. I really wanted at least Fediverse integration...

Then, this morning, as I was scrolling through Mastodon, I saw my friend Jason post this:

Post by @killyourfm@layer8.space
View on Mastodon

Well, that clinched it. But I had to complete tomorrow's video before I could migrate the blog.

Here's the video I made today, btw.

After I wrapped up production, I quickly turned my attention to making the switch. I exported my Wordpress blog in .xml format in preparation.

Wordpress export screen

Then, I spun up the docker container using the docker-compose.yaml they provide. Of course, I changed the required sections. Importantly, I had to specify the most recent version of the Ghost image (currently, it's version 5.115.1-alpine).

Maybe the explicit version specification wasn't strictly necessary (I think I probably had the old Ghost image hanging around from the Viewsink days), but it worked for me.

So yeah, I got it set up, got the Wordpress export added and found the images from Wordpress were (mostly) broken. That was a quick 15 minutes of manual labor to download the images from the old site and edit each post in Ghost's backend.

Thankfully, I had only posted a handful of articles so this manual process wasn't too tedious.

But now? We've got a fresh new Ghost install and everything is slick and delicious. I'm trying out the Social Web beta and it seems promising. And I'm excited to see where Ghost goes from here!

If you're interested, you can sign up to get notified when I post new articles. I'm planning on using this as an incubator of sorts. I've also noticed that my content gets scraped by AI chatbots so I may make access require an account soon.