Skip to content

Blog archaeology

meta

After the recent switch to VitePress, I became curious about how many of the previous iterations I still had access to. I’ve been an obsessive git packrat for years, and I figured that there’d be some secrets in the git repo. So I went spelunking in the history.

What I found was more extensive than I expected. The repository I’m currently working in—benswift.github.io—turned out to be just one chapter in a longer story. A bit more digging on GitHub revealed earlier chapters I’d (pretty much) forgotten about.

The Octopress era (2012)

The earliest archaeological evidence dates back to August 2012: a fork of imathis/octopress that I used for a few months. The repo’s first commit is Brandon Mathis’s initial Octopress setup, and my last customisation was on 8 November that year. I added Ubuntu fonts and a custom GitHub sidebar.

I do remember the Octopress setup. One interesting nugged I’d forgotten was showed up in some commit messages which mention “new ‘detached’ octopress/org blogging works”—apparently I was already integrating org-mode with my blogging setup back then.

The Clojure experiments (2013-2017)

Then came “the Clojure years”. I still really like Clojure in a lot of ways, but have moved all that sort of work to Elixir these days.

First up: November-December 2013. I forked nakkaya/static, Nurullah Akkaya’s Clojure-based static site generator. My first tweak was on 28 November, my last commit on 4 December. Only one week! I was clearly keen to try something new, but went back to something more mainstream.

But I wasn’t done with Clojure. In December 2014 I created a separate repository called “biott”[1]—built on Cryogen, another Clojure-based static site generator. This one stuck around longer, with commits running from December 2014 to January 2017. It used Cutestrap for CSS, which tells you something about mid-2010s web aesthetic sensibilities.[2]

The biott repository is now archived. This was my main blog during 2014–2017.

The Jekyll era (2018)

I forked John Otander’sPixyll theme in late 2018 when I moved away from biott/Cryogen.

On 30 December 2018, we get commit c1a4d0225—“initial commit of jekyll files”. A complete restart, moving to a custom setup based on Jekyll’s Minima theme. I remember doing this initial work on my laptop on the kitchen table at my in-laws place. Same day, commit eaf35f115: “migrate content from old blog version”.[3] This is the setup that would stick around for six years.

Looking at the commit statistics, 2019 was wild: 1,405 commits out of roughly 3,500 total. That’s 40% of the entire repository’s history in a single year. What was I doing?

Well, everything:

  • January 2019: integrating reveal.js for slide presentations (a feature I’ve used constantly ever since)
  • October 2019: Jekyll 4.0 upgrade
  • December 2019-January 2020: a complete asset pipeline refactor, switching from jekyll-scholar to bibtex-ruby
  • Custom syntax highlighting for xtlang[4]

The reveal.js integration turned out to be the most enduring feature. Every subsequent version—including the current VitePress setup—has had to support it. Turns out when you give a lot of talks and teach a lot of classes, you need slide support everywhere.

The present (2024)

Fast forward to November–December 2024, and I finally pulled the trigger on migrating to VitePress. The migration took about two days of intensive work (commits 97ae2f706 through 42a26bd25 on 30 November–2 December), with an assist from Claude Code. The last Jekyll version is preserved at the jekyll tag. TypeScript instead of Ruby, Vue components instead of Liquid templates, modern ES6 modules instead of… well, whatever Jekyll was doing with its asset pipeline.

What’s the point?

So what does this archaeological expedition tell us?

First, the pattern is clear: Octopress → Clojure experiments (static, Cryogen) → long Jekyll tenure → VitePress. The blog has always been a place to try new things—two separate Clojure attempts, multiple Jekyll themes, and now a Vue-based system. Each iteration taught me something. It’s basically my “TODO app”; the place where I experiment with new technologies and ideas.

Second, there’s something satisfying about having this entire history preserved. Every commit tells a story—not just “what changed” but often “why I wanted to change it”. The commit messages are a diary of sorts: technical decisions, aesthetic tweaks, occasional outbursts.

The git packrat habit means I can see exactly when I added that custom CSS for blockquotes (multiple times, apparently), when I first integrated reveal.js (September 2018), and how many times I’ve tweaked the font rendering (too many to count). It’s all there in the log—across multiple repositories, spanning over a decade.

But here’s the thing: the actual frameworks matter less than the content and the features that support creating it. Octopress, two different Clojure generators, Jekyll with three different themes, VitePress—they’re all just different ways to serve markdown files with syntax highlighting and presentations. The actual blog posts survived.

So was migrating to VitePress worth it? Yep—it’s faster, the tooling is better, and I can use modern JavaScript without fighting the framework. But in six years when I’m “nuking all the things” again, will the next framework be fundamentally different? Probably not.

As long as I keep committing everything to git, I’ll be able to look back and see exactly when—and why—I decided the blockquote padding needed to be 0.5em instead of 1em. And honestly, that’s kind of beautiful.


  1. “Ben is On The Tubes”. Obviously. ↩︎

  2. Cutestrap described itself as “A sassy, opinionated CSS Framework. A tiny alternative to Bootstrap.” The repo is now archived. RIP. ↩︎

  3. The scare quotes around “migrate” are doing a lot of work here—it was more like copying markdown files and hoping for the best. ↩︎

  4. The programming language I use for livecoding. Every blog framework has had to learn to syntax-highlight it. ↩︎