About a year ago, to put a cap on my struggles with Hugo, I wrote up some thoughts on the whole static-site-generator (SSG) concept. One point I made concerned the amount of “meta-data management” that the typical SSG does: creating tag collections; creating sitemaps, and so on. And what a pity it is, that most SSGs don’t seem to surface this information in a way that would be usable by other tools.
It took another year for me to realize that, in fact, “meta-data management” goes beyond “static site generation” in the strict sense. Collecting, managing, and using information about the content that is being displayed is properly the purview of a content management system or CMS!
This is funny, because now we seem to have come full circle: SSGs were intended to avoid and overcome the bulk of a typical CMS. Yet, as it turns out, meta-data management is an essential part of site generation: it comes back in through the back door. You just can’t avoid it.
Which makes me wonder whether the somewhat dodgy state of the Jamstack experience is due to the fact that its basic functional decomposition is wrong: you can’t have a pure SSG without CMS. Trying to do so simply leads to an SSG with a poor-man’s CMS tacked on as an afterthought. Hugo serves as a particular painful example of this observation: most, if not all, of its convoluted complexity seems to stem from the need to incrementally add more and more bits of CMS functionality.
Instead, it might be worth to start with a CMS (all that meta-data management and so on), and then add a simple SSG engine to it. In this case, the SSG could be quite stupid, merely formatting content using templates. Because the CMS would drive all decisions, in particular the matching of content to templates, many of the implicit rules that make current SSGs so confusing would be unnecessary. All the pages would still be generated ahead of time, and served as static content by a simple web server.
Such a design might be considered an “offline CMS”: CMS with SSG. (By contrast, Jamstack tries to do it the other way around: SSG with CMS tacked on.)
Note added later: I have since learned that the notion of a CMS without a presentation engine is not a new concept; it is known as a “headless CMS”.