It’s been a long time. How have you been?
I took my site down a few years ago to explore the whole Jamstack craze, and setup a Gatsby.js site using Stackbit and ForestryCMS. I really enjoy using and building Jamstack sites and I think they are the future, but the future isn’t here quite yet.
SaaS (Software as a Service) solutions everywhere
Gatsby, Next.js, and 11ty are cool, right? What happens when you’re not a Markdown diehard and don’t want to maintain the hassle of a git-based workflow for publishing or client reasons? You need a CMS (Although I do prefer git-based workflows).
There’s tons of options on headlesscms.org, and I’ve tried 90% of them. Most of the ones listed are SaaS startups that most likely won’t be around in two months, and I really don’t want to pay monthly for a CMS after using free solutions for years. Some of these are definitely excellent, if money isn’t the issue the other problem remains - what happens when (not if) that service shuts down?
So, self-hosted solutions are the answer, where I can trust (for the most part!) that as long as it’s on my server, it will still work even if the parent company goes poof.
The ones available though aren’t very good or are very early in development. Strapi, Netlify CMS, Directus, Craft CMS and Cockpit are the big ones right now. I really like Cockpit and Craft CMS, but if you need to migrate content to any of them, you’re stuck. New sites only. That’s not bad if you’re building a new site, but when you have a site like mine with tons of blog posts, things get complicated fast.
And hosting - the big player right now is Netlify, which is a great service, however it’s another startup with no guarantee of being around in two months.
Fully dynamic - for a price
This is another issue related to the SaaS section above, basically the situation is this: Say you need a form, right? Your options with a Jamstack site is to code a complicated form and backend to handle submissions and storage/emails. Or you could pay a startup. Gatsby.js’s form docs recommends two SaaS startups for building your forms over building your own, because it’s just so complicated.
And that’s the same situation for most other things you might need that aren’t exposed in GraphQL.
There’s always a startup who will take your money to make your problem go away - or rather, postpone the problem until they run out of money.
NPM dependencies break
This is just a fact of life with modern JS development - everything is constantly changing and moving very fast, so that project you worked on three months ago may not compile in Gatsby because 7 dependencies are out of date. Then you go to update them and new issues arise. It’s a whack-a-mole disaster.
I resurrected a previous version of this WordPress site I archived in 2013 while exploring AnchorCMS to extract content out of, and it worked fine. WordPress updated with no hitch. Sure, some of the plugins were abandoned but the site still worked. Can’t say the same for a JS project.
I could sit down and solve all of these issues probably, with enough time. I still think the Jamstack is a great solution for static sites that rarely change, and I used Gatsby and Netlify to build my wedding site. That was the first Gatsby site I built and it was a lot of fun.
The biggest issue though, I was spending a lot of time testing all the different solutions for my new site, and I was getting nothing done.
After a failed experiment with Ghost, I rebuilt this site using WordPress and GeneratePress. The Lighthouse scores are really good, and I look forward to using this setup for more sites. For fonts, I’m using the system font stack for maximum performance by only using system fonts. I may still spend two or sixteen hours browsing Google Fonts, however I do like the look right now.
I’m using instant.page for preloading and it makes a noticeable difference.
As for post comments, I’m not really sure what to use anymore. I used to use Disqus but it’s definitely gotten a lot heavier since the last time, it added 2 MB (!) of additional heft, so I removed it.
Good Lighthouse scores!
The finished product.