Personally, I have been experimenting with precompiling my content-heavy sites in CI from markdown then delivering them as static HTML.
The git repo is a bunch of folders with markdown, where the file path in the repo becomes the URL on the website.
e.g. "/articles/foo.md"
Becomes: "https://example.com/articles/foo.html"
If I need dynamic functionality, I'll sprinkle in a little Preact, petite-vue or alpine-js.
Some examples of dynamic functionality are article search (done on the client side with a pre-computed index), a comments section or a contact submission form.
This opens the door to:
- Pre-downloading articles in the background using service-worker
- Your site being incredibly small and jarringly fast
- Largely free to host using AWS S3 + Cloudfront/Cloudflare
- Easier to manage from an SEO standpoint
You can see an example of this here: https://ozkiwi2001.org
I'm not a designer though so the design is pretty spartan haha. I also haven't yet updated my own portfolio site with this approach and I haven't found a minimal solution to serverless/free analytics.
In the above example, rather than a CMS, I taught the client (the OzKiwi team) how to use SourceTree/git and they edit the content markdown directly via a markdown editor.
It was interesting for me to see if people without software development experience would be motivated to learn these tools to maintain their website - in exchange they get effectively-free hosting costs.
They did super well, calling me every now-and-then when an image doesn't appear on their site because of a malformed URL, haha). I added a few pre-commit hooks to do validation on file names and so on.
That said, it might be easier to do this with a single SPA entry point and the content delivered separately (still precomputed during CI)