Should I UnJam my Ghost blog?

Wondering if you should Jamstack your Ghost site? You might want to read this article because I was wondering otherwise. 🙊

8 min read
Should I UnJam my Ghost blog?
Photo by JÉSHOOTS from Pexels

Context

A few weeks ago, I updated my Ghost instances and noticed that new features were added to the application. Unfortunately, I couldn't immediately start using them because they weren't implemented in my Jamstack version. 🙈

This incident made me wonder if it was worth having a Jamstack site. Should I go back and use Ghost as my frontend as well? I could just use the latest release and have new features in seconds. I could have a newsletter already integrated for me. What else am I missing? 😍

Don't get me wrong, I love Jamstack. It's amazing to own every piece of my stack. I've been able to try a lot of new technologies since I started my blog. But, in recent months, I haven't had time to add new features to my website. I managed to write one article by week, but that's it. 😑

How do I know if it's time to ditch my Jamstack version? 🤔

I choose to make a comparison between them and write this article to help me see more clearly. 🤓

👻
For Ghost's frontend, I used its default theme, Casper.

In the screenshots below, you might notice some visual differences I implemented for myself (see my Ghost articles), but I don't think their absence would have made a difference.

Let's see if there is a clear winner. 😎

Features

Since the first time I created my blog with Eleventy, many features have been added or improved in Ghost. Since I haven't implemented them yet, my blog won't look good if I try to use them. 🤕

But exactly how many features am I missing? I published an orphan page to see some of them and I estimated it would take a few weeks to implement them all.

Let's list all the functionalities that my Jamstack version currently lacks:

  1. Bookmark cards
  2. Twitter embeds
  3. Inline code
  4. A lot of integrations
  5. Image gallery
  6. YouTube links
  7. Buttons
  8. Collapsible content
  9. File uploads
  10. Product cards
  11. Audio cards
  12. Video cards
  13. Header cards
  14. RSS for authors and tags
  15. Lazy loading on homepage
  16. Newsletter
  17. Membership integration with Stripe
  18. Menu 🙊

And now, let's see what features I've implemented that the Casper theme doesn't currently have:

  1. Atom feeds
  2. JSON feeds
  3. A page that lists all tags
  4. AVIF and WebP support for images
  5. Button to toggle the dark theme
  6. Minification of many files: HTML, JavaScript, CSS, JSON and XML
  7. Automatic image compression
  8. Cumulative data for tags and authors
  9. Multiples images in sitemap.xml
  10. Breadcrumbs in JSON+LD schema
  11. Reading progress indicator
  12. Application manifest
  13. Accessibility

By modifying the default Casper theme, I'm sure I could easily implement some of the features that my blog currently has. But not all. 😶

🏆
Not only does the native version of Ghost have more features than mine, but it also has features that wouldn't be easy for me to implement.

Ghost is therefore the big winner in terms of functionality. 👏
💡
Did you know that on GitHub, you can filter the pull requests based on their merged date? This can be useful if you want to track changes to replicate them in your custom theme. 🙊

Performance

Most website owners already know this: every website should be performant. The user may leave your website if it takes too long to load. 🙈

Often, an optimized website uses fewer resources, so it's more environmentally friendly! For these reasons, website performance is critical for me. 🍃

Google Lighthouse

Let's see how the famous Lighthouse tool audits certain pages of my website. 😚

Well, there is a lot of measurements, right? Overall, my current version seems to do better than the Casper version. I tried to optimize it as much as possible and it seems to have paid off. 🤑

The Casper version lost a few points on SEO because I have a meta tag to disallow crawlers from indexing this website.

<meta name="robots" content="noindex, nofollow" />
This meta tag is used to remove the site from indexing. It shouldn't be there normally.

The only page that the Casper theme seems to do better than mine is the front page. Although it only loads a few posts, my version loads them all. 🙈

GTmetrix

Both versions seem to have an excellent score. Each of them currently has some issues that could be improved, unfortunately. 😥

Website Carbon Calculator

By optimizing images and other resources, I was able to reduce CO2 emissions by a factor of 3.125! Imagine how many trees I helped save with a few optimizations! 🌲

webhint

Oh man! The default Casper theme doesn't look very good on webhint! It has 3 times more hints than my Jamstack version! 😯

🏆
On the performance side, it looks like my Jamstack version is a clear winner.

Security

Even though my website doesn't have interactive features, it's still important for me to keep an eye on security. Indeed, it is possible to use external scripts (like the Casper theme) and these can quickly become attack vectors. 😲

HTTP Observatory

For this test, both versions have currently a good score. The Ghost version lost 5 points as I didn't implement the Content Security Policy. It lost an additional 5 points because it uses resources from other domains and doesn't use Subresource Integrity. 😮

Security Headers

Again, you can see that Ghost doesn't provide these headers. I guess it wouldn't really make sense because it's something very technical for the common blogger. 😋

webbkoll

Using Nginx to deliver files of my frontend, it was easy to add headers to further secure my website.

🏆
The tools are unanimous: my Jamstack is more secure than the frontend of Ghost. It's all the more clear that I don't have backend features on my version, unlike Ghost's frontend.

Social media

One feature that wasn't easy to implement in my current stack in Web Components was the social media preview. You know, the way social media choose to display one of your links inside a post or a Tweet? 🕊

This is now something I want to make sure everything is okay if I choose to fully embrace Ghost. 😝

Twitter

For Twitter, the two sites have the same preview, but there is a really small difference between the two screenshots: the title of the page. On my current stack, I add my full name in the title of each article, unlike the default Casper theme. 😣

This will be something that I'll need to fix if I choose to go back to Ghost. 🤭

Facebook

Except for the different titles again, Facebook sees my pages the same way. With the default Casper theme, Facebook warns that fb:app_id is missing, but this is something that could easily be fixed again. 🤗

LinkedIn

Screenshot of LinkedIn Post Inspector tool for the same post, with the Jamstack version on the left and the Casper version on the right.

There are no real differences again for LinkedIn, except it looks like I implemented more JSON+LD because it found the post author.

🏆
While there are small differences between the two versions, I don't think there are enough to determine a clear winner for social media! 🙄

Development

Screenshot of one of the GitLab projects I have for my Jamstack blog.

I haven't counted the number of hours I used to program my solution, but the answer is probably too many! 😅

It can take a long time to implement a frontend on a different stack as I did with Web Components. I learned a lot doing it and I have to say that I'm proud of the result. 😎

But if I had chosen to use Ghost as my frontend, I wouldn't have needed to have such a complex setup. 🙊

For example, it can take more than 8 minutes to regenerate my entire site! My GitLab pipelines fetch data from the Ghost Content API, process it and most importantly, generate next-gen images, which can take a few minutes. Once that's done, I can start generating each component with Eleventy. 😴

🏆
Unless you want to control every aspect of your blog and are ready to commit, I recommend using Ghost as your frontend and only developing your theme.

Conclusion

In conclusion, you could see like me that there are two sides of the coin to create a Jamstack version of a Ghost site. 🥉

Depending on what features your site needs, I still think it may be beneficial to detach from the Ghost interface. But this requires having adequate resources (temporal ⏲, monetary 💰 and human 👴).

But that doesn't answer my original question: do I keep my Jamstack version of Jamstack? 🤔

The answer may surprise you, but I decided not to. 😨

I want to explore Ghost's native features more and it's hard to scale everything for multiple sites. So, in the next few weeks, I will start working on the fourth version of my website. 🤗

Would you have made the same choice? 😉