This Blog’s New Engine
A couple of years ago I was inspired to rebuild my online presence after a period of letting it languish. I don’t do this for monetary or professional reasons, so there’s always been a bit of a conflict between the effort required and the reward, and if the effort is anything more than minimal I don’t bother. The reward is just the sense of hashing out some ideas and getting them out there, regardless of the number of readers or personal benefit. One invested reader was infinitely more valuable to me than a thousand social media “read the headline and start hashing out a comment” passer-bys.
At the time I was working with a custom blog engine1 with client-side rendering. Authoring content was a pretty tenuous operation and putting out thoughts was often less enjoyable or rewarding than I’d hoped: on each outing I’d get tied up in engine-related stuff rather than the content, usually in a deep malaise about “is this the optimal way to…”
I had a lot of big plans, including a mostly built-out process of authoring in Markdown and then running through pandoc to generate the final HTML, but there were always little hiccups and irritations that I put on a todo list but that never got addressed.
I put out a flurry of content in the summer of 2023, but then committed to not writing more until I rebuilt the engine, fantasizing that this would motivate me to complete the work I set to do. But professionally it was a very low priority so that hypothesis didn’t hold.
So it kept rusting. It sat at a SCHED_IDLE priority and there were always more important things using my time instead.
I’d gone through a number of iterations of blog engines over the many years I’ve had an online presence, acquiring many inbound links, including some pretty high value ones, but with each iteration I’d obliterate all those links, relegating them to 404s. There was no real goal I was building towards.
I wasn’t trying to gain inertia or pagerank or anything like that. I just enjoyed a venue without the cesspool that most of social media is.
My own place.
Astro
A lot of Artificial Intelligence work and research has often left me wanting to talk about approaches and solutions that many don’t know about, so again I got the itch to start writing. I refuse to sharecrop on one of the enshittification platforms and absolutely must own my own thing, so I needed something that I could hash out in an afternoon as the foundation.
A quick chat with Claude AI and it offered up some suggestions based upon my need, enumerating the benefits and detriments of each. Most compelling to me was Astro. I had never heard about this project before, but Claude’s description sounded exactly like my dreams of what I looked to build myself. Only better than I would have ever built.
Namely a generator that emits a fully static site. Where authoring content is effortless and empowered, in either MD or MDX (MD with JSX). Where I could customize any page and entry precisely how I wanted, injecting whatever special styles or scripts or custom HTML I wanted, including via reusable, trivial to author components.
Where JavaScript can be used for some value-adds, but is entirely optional. Users who are annoyed by the JavaScript excess on the modern web can run without it and enjoy largely the same experience.
In prior iterations of this approach I often spent enormous amount of time trying to minimize the compute required for each generation, so I would always get caught up in esoteric approaches that would incorporate any change delta with the minimal processing possible, but that always turned into quicksand2. Now…my storage speed is seemingly infinite and the cycles are copious, so I don’t care if it rebuilds it from scratch even if I had a million entries.
Claude Code
I pointed Claude Code at an empty directory and told it what I wanted. It built out the Astro blog scaffolding, alongside copious documentation. We iterated as I asked for specific behaviours I wanted such a collapsible header, footnote text popups, and so on. A few times it went down the wrong path, but after being corralled back progress rapidly continued.
I’m very pleased with the result. The entirety of the code is extremely clear and easy to follow, and Astro offers up basically infinite flexibility to do exactly what I wanted. Authoring new content is flexible and responsive. The live dev server makes all of it an absolute delight.
All over a couple of hours on the long weekend. Glorious.
Exactly what I wanted. And basically exactly what I’d hoped to build if time were unlimited. It would have taken magnitudes more time and effort if I did go through with building something similar from scratch. Even just screwing around with CSS nonsense can be such a colossal time sink, and out of the gate Astro brought most of us what I wanted, including decent desktop and mobile support, that it was just some fine-tuning for my preferences.
Another goal of the new web home was an extremely efficient, speedy experience for users. And indeed, this site now scores a 100 out of 100 on PageSpeed, which is what I hoped.
A Note on Markdown
John Gruber’s Markdown is such a winning solution. Before choosing Astro I had already migrated my Note taking to Obsidian, adopting it after a period with Apple Notes, and earlier still Google Keep, alongside so many other abandoned notes projects. Obsidian is a perfect complement for Astro on the blog side, and already I’ve configured an interlink between the two. The filesystem becomes the database, replicated via the cloud provider, and I can structure naturally and make complex, interlinked notes. Glorious.
Kickoff Content
I’ve migrated a tiny amount of content from the old blog over, but other than that this will be a fresh start. I’ve setup the automatic build/deploy process so it should have a low enough effort that I’ll be induced to actually write something.
Footnotes
-
There were many blog engines I used in prior iterations, including a whole Wordpress phase. The customization of the same is what fomented my severe dislike of PHP. I’ve used several custom built blog platforms, along with several off-the-shelf static generators ↩
-
“There are two hard problems in computer science: cache invalidation, naming things, and off-by-1 errors.” ↩