Choosing a CMS is a bit like asking your boyfriend of two days to move in with you. Whichever you select will be in your life for years to come. Just like with a significant other, you won't always agree with the developer's decisions. As time rolls on, you'll discover all its faults, quirks, and the way it goes ballistic when you squeeze the toothpaste tube in the middle.
Wait! Call me selfish, but I wouldn't share my toothpaste with my own mother let alone a boyfriend.
When you first select a CMS, no one warns you that due to the time and expense involved you have locked yourself into this system for years, maybe decades. At least, that's what I've observed from my writing clients. Consider yourself warned.
My relationship with WordPress stretches back to 2007 when I installed it on a localhost and began using it as a personal wiki. For the next ten years, I used this local installation as a notebook. Plug-ins, particularly PressThis, made clipping web notes and images ridiculously easy. When I started, scheduling backups meant SQL commands, tar, and Cron. If you don't know what that is, don't worry. By the time I migrated my notebooks to simple markdown files, WordPress backups were automated and even sent themselves straight to my Dropbox. I've also created my own WordPress plug-ins and customized themes.
Although I've posted thousands of articles over the years, the vast majority are for sites I don't own. (I'm a freelance writer who works with small businesses. Many of whom prefer that I post their articles after approval.) On a scale of one to ten, where one is a WordPress newbie and ten contributes to WordPress's core, I'm about an eight. I'm not an average WordPress user, which means my expectations and requirements may not be the same as a typical user. I get that.
Over the years, I've watched as WordPress rolled out new features. Some, like the old WYSIWYG editor, made WordPress more accessible to normal people. Others, including the admin bar, made life easier for everyone because they put key features front and center. Then there's the bizarre category, such as the microblogging feature they rolled out in 2011 and the emoji support, which they added in 2015.
Sorry, but a microblog that meshes the worst of Twitter and Tumblr into a single feature sounds more like a hot mess than a good idea. As for the emojis, let's not encourage anyone to liberally sprinkle their text with smiley faces, sweat drops, hearts, and piles of poop.
Please. My questionable sanity begs you.
By 2010, WordPress and I had a love-hate relationship. I loved that I didn't need to upload files via FTP to publish them on a website. I disliked the never-ending stream of broken widgets and plug-ins. I hated when new versions introduced breaking changes that forced my clients to choose between the custom theme they sold their firstborn for and WordPress's security updates. At times, it seemed like the phrase "backward compatibility" wasn't even in WordPress's vocabulary.
Despite my growing concerns and its increasingly cluttered interface, I still installed WordPress on my personal site in 2018. Between its core and its massive plug-in library, WordPress offered every shiny bell and whistle I could ever need. Plus, hosting was dirt cheap and most offered one-click installs.
I went with it because it's easy.
Then Gutenberg Struck
Gutenberg hit my work process like a nuclear bomb.
No longer was it enough to add an image or bold a line of text. Gutenberg dragged me kicking and screaming into graphic design land.
As a writer, I don't think in blocks. I think in paragraphs. Turning everything from a header to an image to each paragraph into individual blocks made my brain hurt.
Instead of starting a list with a single click, I needed two. There is an old adage to never use two clicks when one will do. WordPress ignored this. By hiding the interface and not including any shortcuts like markdown, they committed the gravest of sins. They added to my workload.
Not to mention — all right, I'll mention — the bugs. This criticism does not just apply to the early adopter's beta. Less than 11 days before they pushed WordPress 5.0 to the masses, developers and users alike were begging them to hold back the release because Gutenberg had over 400 unresolved issues. That ain't good.
I suppose you could say that one gets what they expect. I went into the 5.0 upgrade expecting a disaster. I got one.
By the end of January, I began making a list of clients and their WordPress version. If they used 5.0, I took the estimated posting time and multiplied it by 5. This is not an extreme reaction.
Overnight, I went from posting completed 1500 word articles with bullets, images, and tables — nothing fancy — in less than 10 minutes to needing 45 or more for the same article.
To put this in context, I spent less than two hours dictating and editing this post. Posting two articles using the new Gutenberg editor takes about as writing a standard length paid article. Gutenberg costs me money.
As a business owner, I now must weigh changing my long-standing free WordPress posting policy. As a website owner, I cannot justify using a CMS that's more geared towards page creation then post creation.
In late January, I finally faced the truth. By implementing Gutenberg despite thousands of one and two-star reviews, making it one of the lowest rated plug-ins in WordPress's ecosystem, WordPress crossed the Rubicon and broke an unspoken pact with their user community.
While millions of WordPress users followed them as faithfully as Caesar's legions once did, I stopped and stared at the gurgling stream. Perhaps, it was the look of stupefied disbelief reflected in the shining pool. Perhaps, it was pure frustration. Whatever it was that stopped me, I found myself looking back on how WordPress evolved from a simple blogging platform to a complex CMS that now powers almost one-third of the world's websites. I looked at what it once was, what it had become, and froze.
I was at a turning point.
If I reaffirmed my commitment and leaped across like thousands of WordPress users before me, I would be stuck with an increasingly complicated CMS that did everything I didn't need and hindered my day-to-day activities. Turning back meant starting over. Migrating content, customizing another theme, finding that theme to begin with, and maybe even changing web hosts. This was not something to do on a whim.
I wish I could say that I left no stone unturned, that I ran extensive tests on usability and performance, and that I made every effort to evaluate each platform objectively. I can't.
My Jekyll, Hexo, and Hugo tests all included Netlify CMS. Considering this would be my primary posting interface, I was actually comparing Netlify CMS and Ghost.
When I first typed "ghost start" into PowerShell and navigated to the admin page, I was underwhelmed.
Where was the dark bar on the left-hand side? What happened to the two dozen admin sections? Why was everything so freaking clean?
It looked too simple.
Then I test published The Wattpad Fanfiction Conundrum.
Five minutes and 37 seconds later, I fell in love. That's how long it took me to finalize the article using the same draft I spent 45 minutes massaging with WordPress. I made my decision then.
Oh, I still checked out commercial themes for each platform, performance metrics, and compared features, but I had already made my decision.
What About Comments and Forms?
Like most of the others I tested, Ghost does not offer built-in comments or forms. If you want comments, you must either add a service like Facebook or Disqus or host one yourself.
For contact forms, you'll need to select a provider like Google or Formspree and embed theirs. Alternatively, you can self-host Formtools or Formspree. Maily Form looks promising, but it's not quite mature enough for the real world. I suppose you could also code your own form and use a simple mailto event.
Performance issues aside, Disqus and Facebook both have questionable business practices. I'm not saying Google is squeaky clean; they're not. However, they are a little less in-your-face about their privacy problems. Plus, my Google form only appears on a single page, not all of them, and it doesn't embed ads.
Just as an FYI, ad blockers and third-party script blockers often remove Facebook and Disqus comments. Disqus has a bad habit of sending information back to Facebook even when a reader isn't logged in and has no account on their site. Needless to say, I did not consider these viable options.
During the investigation phase, I tried the following self hosted comment solutions:
Although ISSO showed a great deal of promise, it does not offer a honeypot, reCaptcha, askimet, or any other spam protection feature. Hashover Next is not mature enough for a production site. Hashover, the production version, is getting a little long in the tooth. I loved Schnack. It did everything I needed except permit anonymous comments. I'm not entirely convinced that I need or want anonymous comments, but I'd like to have the option. ISSO doesn't let commenters authenticate themselves with an alternative service like Google or Twitter.
Based on my needs and testing, I opted for a self-hosted Commento installation. You can test it out for yourself below.
I did not try Discourse or Talk by the Coral Project. Talk, in particular, is a fabulous solution for a larger site. If I ever hit it big, I may reconsider this decision.
Why Swapping to Ghost Meant Changing Web Hosts
I used A2Hosting for my WordPress site. This is not a critique of their service. Overall, I found their uptimes laudable and their speed quite decent for a budget web host. Although their shared hosting plans do allow node applications like Ghost, I feared their installation method would grow unwieldy in the long term. Remember, I also run my own business. I can foresee a future in which I have more than one website operating at the same time.
Additionally, neither ISSO nor Commento would run on their shared host. I had already ruled out Schnack and Hashover.
Unlike WordPress, few budget web hosts offer one-click Ghost installation. Most that advertise it are actually selling unmanaged virtual private servers, also known as a VPS.
Unmanaged means that you install everything yourself. I'm not talking about a one-click install from cPanel either. I mean installing an operating system and NGINX or Apache to serve your webpages, setting up SSH keys, generating SSL certificates, locking down ports, and much more. This is not for the faint of heart.
Ghost Pro, the hosted version, is a little pricier than my VPS and it doesn't let you install your own comment solution on their machines. However, if you're less technically inclined and you don't mind serving Disqus ads or subscribing to Commento, it's a viable alternative.
When I think about hosting multiple domains and subdomains, using a variety of services and applications, and appropriate SSL certificates for all domains and subdomains, my mind instantly turns to docker and docker compose. This is an ease-of-use (for the administrator) thing.
Since A2 only supports docker on their Flex Dedicated Servers — a month costs more than my annual hosting budget — I needed a new web host.
Digital Ocean met both my needs and my budget. Here's a referral link, if you're interested.
Looking Towards the Future
My days as a server admin are well behind me. I haven't kept up with recent advances as well as I should have. Although I can set up and administer a single machine VPS, I'm quite aware that should my website take off I may need to hire somebody to scale up my system.
Reaching that point is the writer's equivalent of winning the lottery. I doubt this will ever happen. But I'm a planner. Part of planning means that I must acknowledge that I will have problems if it happens. This is a big if. I'm not holding my breath.
Long-term, I don't know that my personal and business goals will match with Ghost any better than they currently do with WordPress. My grandmother used to say to wait until the cows come home before you make that decision. My cows are still in the back pasture.
Thank you for joining me on this journey. Feel free to test out the comments. Drop me a line if you want a few extra screenshots of the backend or an update.