Leaving Ghost for Hugo part 1: the problems with Ghost

For the last few years Ghost has been my CMS of choice, I built my company website and a few personal projects on Ghost. After a decade of Wordpress development Ghost was refreshing. The default theme is elegant, it's relatively simple to customise and the post editor is a beautiful user experience. First, lets look at the main reasons why I've given Ghost the cold shoulder then I'll follow up with the benefits of static site generators like Hugo in part two.

Hosting Ghost is either complicated or expensive

Some people enjoy tinkering with servers and rolling their own infrastructure, I don't. I'll always opt for a hosted solution when it's available at a reasonable price. Ghost's hosted solution starts at US $29 per month (roughly AU $45 at the time of writing), negligible for a large company, but steep for an individual just wanting to throw some words on the screen.

Ghost is open source so you are free to host it yourself. The most cost effective method is Digital Ocean. They even have a "1 click" install, though in reality I still had to SSH into the droplet and screw around to get things right, especially getting an SSL cert via letsencrypt. Once you're done you'll be out of pocket about US $6 per month, which is fair, but you're now responsible for maintaining a server.

Connecting your Digital Ocean droplet to Serverpilot can mitigate server maintenance but it then adds another layer and yet another monthly subscription. It's also not a seamless process, Serverpilot is built for running PHP and Wordpress sites on Digital Ocean but Ghost is written in Node. You can make it work with some effort, but that's kind of defeating the purpose isn't it?

Ghost is heading down a different path

Ghost is under constant development but their roadmap doesn't appear to be heading towards a more capable website and blogging solution. I can understand this to an extent, why try and compete with Wordpress? Subscriptions and Memberships were the headline features from the last major update, which is cool, but also frustrating when there's still no simple way to integrate a contact form.

There's also a heavy focus on the JAMstack and using Ghost as a headless CMS, features that sound great to developers but aren't useful for running a website.

It feels like the folks at Ghost are content with the current suite of features and want to explore different options, which they're obviously entitled to do. I just wish they'd continue to bolster their core product and fill in functionality gaps that many consider to be essential.

No easy way to write custom functions

Ghost is written in Node, but that underlying layer isn't exposed to you as a developer in any simple way. This is most likely by design but frustrating nevertheless when you need to do something that isn't supported out of the box. Coming from Wordpress this was hard to get my head around initially. In the situations where I needed custom functions I resorted to less-than-ideal ways to accomplish it on the front-end.

Ghost has previously talked up the ability to create "Apps", but it's still in beta and after some googling I don't believe anyone has ever made anything useful without jumping through a lot of hoops.

You can of course delve into the Ghost core and rummage around in there, but this isn't supported, there's no documentation and it will almost certainly create a wonderful mess the next time you try to update.

I know moving to Hugo doesn't really solve this problem, I just find it strange to obfuscate the underlying technology from the developer. It really limits the potential of the platform.

I never actually write content inside of Ghost

I prefer to write in a simple text editor, there's fewer distractions. I'm writing this directly in Visual Studio Code. So once I was done writing I'd copy and paste it all into Ghost and hit publish. As much as I loved the design and simplicity of the Ghost admin area, in reality it's almost irrelevant to me.

Using Hugo and writing my content in markdown files allows me to publish directly from VS Code. Once I've finished I just commit and push to Git and Netlify (where I host this blog) will automatically build my website from the repository. This is perhaps the most valuable aspect of the switch, but I'll cover that in more detail in part two.