Well it's happened again. I've done yet another rebuild of this website using Django and Wagtail. For my previous build, I used Gatsby to build a static site which I hosted on Netlify. The dynamic content of the site was stored in an instance of Ghost which was then pulled in at build-time.
Overall, I was quite disappointed with Gatsby. I found the framework to be quite over-engineered. At one point, I found myself trying to resize a photo or something and it required some (to me at least) very complex configuration and some fancy graphQL query just to get the image to load. Another issue I have is with the offline plugin. Gatsby uses service workers to cache your entire site offline which can then be served by a service worker in case your users have spotty internet. Or no internet. The problem comes with removing this service worker once you move away from the framework. I needed to do quite a bit of research to figure out how to delete the service worker once I moved over to the new site since Gatsby chooses to use caching very aggressively which is not recommended.
As for Ghost as a headless CMS – I think there are some limitations there. Overall, Ghost is a great platform. It's reliable and usable and has a good writing experience. I do think that their push into the JAMStack fad was mostly a marketing play since some limitations were never addressed even after several years. I would definitely use Ghost again, just not as a headless CMS. I would use it how it was primarily designed to be used.
So why did I choose Django and Wagtail? Well, I've been using Django on and off for a long time. Probably 7 years at this point. The framework is reliable and seriously productive. Wagtail is built as a Django "app" so it's very familiar to me and it's very powerful. Overall, I'm content with the developer experience so far. I think the admin interface that is used to publish content could use some work. It's functional but frankly it's pretty ugly. Especially compared to something like Statamic which has been getting some attention lately.