The Great Website Rebuild of 2025

My website setup has been more than a little janky for a while now. It's been very gemini-first: all my posts are written as .gmi files with the date in the filename. I then used nytpu's gemlog.sh to generate the feed and index page. This worked well when I wanted my site to be gemini-only. I eventually decided I wanted to expose things as an atom feed over https, so I hacked the gemlog.sh script to generate 2 feeds: the gemini feed, and a second feed with content to serve over https. This had the drawback of the "canonical" link being to gemini, though many feed-readers only support https; several elements of the feed wouldn't work properly.

Lately, I've decided to mirror the posts themselves to https, as well. To do this, I wrote an Ada program that converts gmi to html, then a lua script that applies this converter to all the posts and concatenates them with a header and footer. Now, when I make a post, I write the gmi, then run it through the converter with this command:

~/c/ada/gemparse/parse YYYY-MM-DD-post.gmi | cat header.html - footer.html > html/YYYY-MM-DD-post.html

I then sshfs to town to copy over the two new files, then regular-ssh to town to run gemlog.sh and edit the html index page by hand to add the new post.

All this to end up with a feed with broken URLs and bad image handling. It's not ergonomic. It could be a lot better.

So that's my project for the next couple of months. My plan is to convert the posts to markdown with TOML or YAML frontmatter. I'd then have an SSG that generates the https site and atom feed, with another script that converts the .md to .gmi with dates in the filename. Then, gemlog.sh generates the gemini index page and feed. I'll most likely write a parent script that automates all of this, as well as making the connection to town and syncing the files. The goal with this setup is to have a single command that builds and runs everything. I also maintain a little bit of https-gemini separation: If I want to write a more "diaristic" post, I can just write it directly to a gmi file, and it won't be part of the https site.

I'm leaning towards Zola as my SSG, but may consider Hugo and Pelican, too. I've used Hugo before, but I really didn't find it's templating intuitive. Pelican I'm considering just because I'm begrudgingly admitting that python is a kind of alright language after using it for advent of code.