Setting up a blog

I'll start this blog by writing about the experience of setting up the blog. Usually, WordPress would be my tool of first choice for easily standing up a dynamic website with static content (pages) and blog content (posts). But recently, every time I try it, it sucks more.

I'll start this blog by writing about the experience of setting up the blog.

WordPress

Usually, WordPress would be my tool of first choice for easily standing up a dynamic website with static content (pages) and blog content (posts). Back in the day, when WordPress was primarily self-hosted, I even contributed code to the WordPress core, and I could get a new blog up and running rather quickly: Create a database, configure the webspace, upload the WordPress files, edit the config, go. Editing themes was a bit annoying since you had to know some PHP, but it also meant the rules around themes were rather clearly defined, and your expressive power was theoretically unlimited. Then you wrote your content in a semi-structured format, and content and styling were well separated.

The Block Editor

Modern WordPress has given in to the demands of visual design and to that end has introduced the "block editor" a while back. Instead of writing semi-structured text with shortcodes, or Markdown, users now get a more or less WYSIWYG (what you see is what you get) interface that lets them add different kinds of components in an assisted visual manner. For example, where before you would just write a paragraph, leave a blank line, and write the next paragraph, the block editor would let you add a "Paragraph block" that can take a paragraph as content, and then add another such block. For basic text content, that's quite cumbersome, despite hotkeys and automatisms. For more complex content, the block editor often allows much easier editing in theory, e.g. when setting up complex multi-column layouts. In practice, the expressive power usually isn't quite enough, and users end up having to build complex constructions out of column holders, row holders, offsets, and generally forcing things in a way that feels a bit iffy.

Site Customization

Very recently - and just in time for attempting to set up this blog with WordPress - the block-based editing has been extended to general aspects of the site design. Instead of a PHP-based theme with fixed CSS defining the overall layout, colors, fonts, and so on, the themes now get to define variables, styles, parts, templates, blocks, and maybe some other things - the terminology isn't quite clear to me.

Out of the box, WordPress 6.4 with the 2024 theme will present a ton of what looks like sample content to your visitors. This is intended as a showcase for the site and block editors, I suppose, but it was not at all clear to me how to proceed to set up the web site I wanted: A simple layout showing blog post excerpts on the home page, with the possibility to configure a side bar, headers, footers, menus, and potentially add static pages. In the end, I had to search the web for how to even get to the right point in the WordPress admin menu structure, and every step along the way was painful and felt like I was doing the wrong thing in the wrong place.

Ultimately, I managed to manually delete a ton of content from the template(?) called "Blog Home", which, ironically, was mostly not blog content, but static hero image, gallery like stuff.

Sufficiently annoyed, but as yet unwilling to give in and go to a site builder service such as Squarespace, I decided to give Ghost another try.

Ghost

In 2021, fed up by similar issues they had with WordPress, John O'Nolan posted their idea for Ghost. From initial idea through a $300k kickstarter, Ghost launched in October 2013 to great fanfare. As John wrote on the initial idea page:

WordPress is awesome - it changed my life and made my career - and it's amazing for building websites (The website for Ghost would run on WordPress). But for blogging itself, I think there's room for something more niche and more agile. Something like Ghost.

(Side note: I find it a little funny that Ghost is highly optimized for newsletter-style publications, including integrations with mass mailing services, billing backends, and so on. I remember when all of that was just called blogging, and people published content for free and syndicated it through feeds. Oh, well.)

Installation

Installation documentation is not super clear, because the focus for Ghost really appears to be on them hosting it for you, or – seemingly begrudgingly – having someone else host a bunch of Ghost commercially. However, the documentation works well enough once you have dug through it and figured out what the Ghost CLI (command-line interface) can do and what you need to edit the configuration file for.

Setting Ghost up with Cloudflare and a Caddy proxy was a bit annoying due to Cloudflare's default of "Flexible SSL", meaning the connection from Cloudflare's servers to the actual backend server will happen over HTTP, which Ghost did not like. It tried redirecting to HTTPS, which Cloudflare diligently spun into an endless redirection loop. Setting the SSL mode to "Full (strict)" fixes this and is just good practice anyway. Still, it threw me for a loop at first - pun intended.

Setting up mail

Ghost, with the strong focus on monetizable newsletters, requires users to set up a "professional" (i.e., third-party) mail service for most mailing. Transactional mails can be handled through a traditional SMTP server, but to blast out missives to large subscriber lists, only services like Mailgun are supported. So I set to configure that.

Creating an account at Mailgun is easy enough, and they heavily imply that you will be able to send emails programmatically pretty much immediately after signing up. In actuality, that only works with a sandbox domain they create for you, and only if you set up specific allowlisted email destinations. Alternatively, you can upgrade to a paid plan, but more on that later.

After following the steps outlined in the Ghost documentation, the setup would not work: Mailgun would reject the authentication. This led to some head-scratching until I realized that Ghost just didn't pay heed to the fact that Mailgun has separated US and EU sites, and the SMTP host is (obviously, in retrospect) different.

However, with that sorted, sending the signup confirmation email still failed. The Mailgun documentation is not super clear on this, referring to authorized recipients and so on, but those only appear to be an option for the initial sandbox domain. If you want to use a custom domain like I did, you can set it up and confirm it, but you will not be able to send mail through it, and you cannot set up allowed recipients either. Neither the error message returned by the Mailgun servers nor the Mailgun dashboard or documentation made this particularly clear.

During signup, I chose not to enter my credit card details, because Mailgun implied I could still send a few mails without on the Free plan. So now I thought I'd have to upgrade to make the custom domain work. Here's the next confusing part: When I hit the prominent [Upgrade] button, I was shown rather expensive looking, monthly recurring plans, whereas during signup, there was mention of a Flex plan with a low number of free mails and then overage pricing. This plan was nowhere to be seen, but Mailgun promised a free trial of a "Foundation" plan, so I went with that.

Not only did upgrading to the Foundation trial not fix my issue sending mail - the exact same authentication error kept showing up - but it also broke my Mailgun dashboard, account settings, and billing screen! I tried different things to make it work, even including chatting up the entirely unhelpful customer support chatbot, to no avail. In the meantime, I found out that to get to the Flex plan, one only has to enter credit card details through the billing settings, but due to the brokenness of the trial upgrade, I could not "downgrade" my plan. I was at a loss.

For several minutes - I'm going to say it was about ten, give or take - I could not do much with Mailgun at all and already imagined myself having to send them a threatening email (through old-fashioned SMTP) to get them to delete my data and not start an unstoppable recurring subscription charge. And then things just magically... fixed themselves?

It looks like adding billing info or starting a trial just takes a while to process on the backend, or something. Eventually things just worked and I could finish configuring Mailgun for Ghost, and then – at last – sign up at my new Ghost website. Or so I thought.

First run

Unlike lots of other software, Ghost neither creates an initial admin user for you during installation nor will it ask you to create one on your first use of the site proper. I also found the documentation not very clear on that and tried several times to "Sign up" like a normal reader of the blog, hoping for admin access. What you actually have to do is access a specific path, and then sign up there – which is also where you get a sort of first-run experience.

Once I had all that figured out, using the Ghost admin is actually quite enjoyable, it's fast, beautifully designed, options are clearly described, and the available actions are (positively) quite limited. Ghost also still follows the approach WordPress used to follow until the introduction of the Block Editor and the Site Editor, in that the themes are quite powerful and can be opinionated. You're not going to visually edit the site layout and design in Ghost, that much seems sure.

Writing

Instead, the Ghost UI is very simplified and lets you focus on writing content. It appears to be taking a lot of inspiration from Medium and similar publishing portals, which is frankly a good thing. So here, finally, I am writing the first blog post, after fiddling and struggling with WordPress over the course of several months.

And if that's not a clear win for Ghost, I don't know what it is.

Conclusion

What sucked:

  • WordPress 6.4 was just a bad experience. The whole new site customization feature appears to be badly thought through and documented even worse. I should not have to search the web for "WordPress 6 how to remove demo content".
  • Ghost's installation documentation could be improved, it felt a bit disparate and kinda just ended after getting the basic installation in place. It should instead direct people to the documentation of the configuration file so they can discover all the settings the installer didn't show them, for example.
  • The Mailgun sign-up and first-use experience was just bad. I might not have followed the happy path where the user immediately gives them their credit card info and then just ends up in Mailgun Flex automagically, but having modal signup flows, unclear documentation, and unhelpful error messages combined with an account dashboard that was just broken for several minutes did not inspire confidence.
  • Accessing the Ghost admin felt annoying. I had to actually search the web for "Ghost create admin user" because I could not figure it out (and the installation documentation does not include that part), and then misread the site describing how to create your first admin user several times because the admin path is /ghost, which my brain instantly parsed as the root folder of the Ghost installation. It also seems hard to bootstrap as it appears that you need to have mail sending already configured before you can do this - but that might just be because I tried doing it the wrong way first?

What didn't suck:

  • Ghost is fast, focused, and a joy to use. Things kinda just work how I expect them to work, and there's lots of tiny delights. For example, I just clicked the Preview button for the first time, and Ghost opens a little overlay that is styled like a browser window - which is cute. But it's also useful: you can toggle to see different renderings of your content, for desktop, mobile, email clients, and sharing on social media.

Subscribe to Everything's UX

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
[email protected]
Subscribe