💾 Archived View for figbert.com › log › 2020-08-22-going-full-static.gmi captured on 2022-06-11 at 20:38:18. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-11-30)
-=-=-=-=-=-=-
Those of you who read my last "I Wrote This" post will know that I was having some trouble with my website. My site was coded using Sapper, a Svelte-based web-app framework I had been using for some time. I had chosen to use Sapper because it allowed me to stay as close to the web-metal as possible, while still letting me do some fancy things like use components, scoped CSS, and server routes. However, after diving deeper into website tests and statistics, I started noticing that my "static" site had a lot more moving parts than I thought. The HTML was crammed full of inline scripts and blobs, tanking performance, wreaking havoc on my CSP, and breaking the site for people with scripts disabled. I decided to move the site to Zola, a ludicrously simple static site generator made in Rust.
Svelte (still my JS framework of choice, when I must touch the seething wound that is JS)
I decided I was going to rewrite my site partially because I have a bad habit of rewriting everything all the time, but also because of Sapper's underwhelming response to this Github issue:
An issue suggesting the creation of a "script export" mode
The issue proposes a "strict export" for Sapper sites to remove inline scripts and use of eval(). I think this is a great idea, but it unfortunately has not received much attention.
--- BEGIN EDIT ---
When I initially wrote this post, I saw that the issue had been added to a "Roadmap Triage" project board. Checking back now (2021-04-12), Sapper is being retired in favor of SvelteKit. However:
-- END EDIT ---
I started a new branch and began working to translate my site to Sapper's main competitor, Routify. Sapper and Routify are not the same thing, but for me they both would serve well enough. After around two days, I had a working MVP of my site in Routify.
Then disaster struck: I got a bunch of emails from Github. A series of high priority security vulnerabilities had been found in dependencies used by basically all of my web projects. I spent a day force-updating all the dependencies of my web projects – a bit of a pain because npm refuses to natively upgrade breaking changes – and decided to stay as far away from the Javascript ecosystem as possible. I hate that when I install a JS framework, a fundamental tool of modern web development, I install a million other dependencies that could, and often do, have critical security vulnerabilities. I'm thankful that Dependabot caught these ones, but it really killed my enthusiasm for using any JS framework on my site – which means Routify was out of the picture.
I decided to use a static site generator. I'd heard of many of the big boys in the past, like Hugo, Jekyll, and Eleventy, but they all had their own problems when I looked at them in the past. Hugo has god-awful templating syntax, Jekyll is Ruby-based and I don't know Ruby, and Eleventy isn't even an escape from Javascript! So I decided to use Zola, a "one-stop static site engine.". Zola is made in Rust, so it's super fast, and it's designed to be dead simple. Seriously: the CLI has only five commands, everything is configured from one .toml file, and your content is all written in "Augmented Markdown."
The interesting thing is that there's honestly not much more to the story because of how easy and simple Zola is to use. All of my posts and projects go into the content directory, my CSS, favicon, and miscellaneous files (non-content related stuff like emojis and public keys) go in the static directory, and templates and shortcodes go into the templates directory. If I was using a theme, it's files would go into a theme directory.
EDIT: This issue has been fixed in Zola – you can now add attributes like noreferrer to links automatically... so I guess no drawbacks? Yeah that feels right.
I'm really happy with using Zola, and I look forward to continuing to work with it in the future. I want to publish my blog's styles and templates as a Zola theme, but I have to iron out a few kinks (like anchor links, which are still a bit finicky on my end) before that. I also have yet to re-implement a bunch of the indie-web features and GoatCounter analytics of my old site into this version. Overall though, I think it's been a really fun and productive experiment using Zola, and I'd highly recommend using it for anybody looking for a great, no-nonsense static site generator.
EDIT: Anchor links are working, and I decided to forgo analytics altogether. My site's better off without JS.
Until next time, FIGBERT.