Mobile-Friendly Headless CMS's with Astro

#blogging

A while back, I set up Obsidian for my blog post workflow. There are many great things about it; the editor is minimal and distraction free. My notes and blog posts all lived in one app. And I felt like a hacker setting up GitHub actions, symlinks, and custom plugins to automate git pushes.

But there was one thing I felt missing. A mobile publishing experience. I've been using Day One lately to journal and I've loved writing a quick entry while waiting at the coffee shop. Or while sitting on a bench in the park with my pup. I wanted to bring that to my blog post workflow. Anything to reduce the friction of hitting "publish".

To achieve this, I wanted to use a Headless CMS. I tested four: Sanity, Ghost, TinaCMS, and PagesCMS. I chose based on some loose criteria:

In the end, I decided to go with Ghost. Here's why I chose it over the others.

Why Ghost?

Mobile editing is the dealbreaker

While I still do most of my writing on desktop, I wanted a great mobile friendly user experience for publishing. And I liked Ghost's experience the most out of the CMSs. It has a clean canvas when you load up a new post. It's a distraction free writing experience that lets you focus on the content not the structure of your blog post.

Ghost mobile views (left is editing a post, middle is post settings, right is the Posts view). The views are mobile friendly with the editing post view a canvas where you can just start writing.
Ghost mobile views (left is editing a post, middle is post settings, right is the Posts view)

In comparison, the other CMSs editors felt clunky.

From left to right; Sanity CMS, Pages CMS, Tina CMS mobile editing experience
From left to right; Sanity CMS, Pages CMS, Tina CMS mobile editing experience

At the time of writing, Sanity is experimenting with a Canvas similar to Ghost's editing experience. But to translate the Canvas content you need to use an experimental Content Mapping feature.

Straightforward Ghost CMS setup

Setting up Ghost was straightforward. I followed the Astro + Ghost setup guide with a Ghost trial account and got something working in under an hour. In comparison setting up Sanity felt much longer. And honestly, Sanity felt like overkill for a solo developer blog. Both TinaCMS and PagesCMS were straightforward to setup too. In many ways they matched my workflow better with existing blog posts in markdown files. But when it came to images I needed more work to get them behind a CDN (through cloudinary or aws for example).

Newsletter capabilities ✨

What pushed me over the edge was Ghost's newsletter capabilities. I could have my blog post content and my newsletter being managed by a single platform. I'm currently using Beehiiv to send newsletters. And while I haven't written a newsletter in a while, consolidating content to one platform is very enticing!

Why not Ghost?

There are two reasons why Ghost might not be the right fit for you: cost and CMS limitations.

Ghost Pro is Expensive

Ghost Pro is the hosted version. To use it as a headless CMS, you need to subscribe to the Publisher plan. This plan is $29 USD a month 😱 which is very expensive. Especially, if all you want is to author blog post content. Ghost does offer a self hosted alternative that will bring the cost down. But that brings additional setup and long term maintenance.

CMS limitations

Ghost in comparison to the other three CMSs was more limited in what you could do. For example, with the other three CMSs you could define whatever schema you wanted for your blog post. And with Sanity and TinaCMS you could also enable live preview editing. Not so with Ghost. But I'm okay with Ghost's constraints. It makes setup simpler.

To CMS or not to CMS

That is the question. At the end of the day, I think we can all agree that as a solo dev posting a handful of posts a year I don't need a CMS. You can get far with markdown files.

What about my old Obsidian setup? It's still there. I'm honestly too lazy to migrate those markdown files to Ghost. And at some point might want to author an mdx post that is more customizable than Ghost. Thankfully, with Astro content collections it's easy to load both markdown files and your CMS content. So my advice: give both approaches a try and see what works best.


🦋 likes on Bluesky

Comments

Like this post or add your comment on Bluesky

Want to stay connected?

Subscribe to my newsletter

Weekly, bite-sized, practical tips and insights that have meaningfully improved how I code, design, and write.

No spam. Unsubscribe anytime.