A New Beginning—with Speed Bumps
In my last blog post I announced our move to a new Astro-powered blog, and said there would be many more incremental updates to come. Today we’re going to look at some of the changes that have landed over the past few weeks.
The biggest structural shift has been the build and deploy pipeline. I moved the site to Vercel, which has made shipping changes feel almost instantaneous: atomic builds, dependable preview URLs per commit, and far quicker deployments than I was ever getting before. Alongside that, I reworked how assets flow through the pipeline—images are now optimized across the board with responsive sizes and modern formats, so pages feel snappier on both mobile and desktop without me hand-tuning every post. While I was in there, I also added proper print styles: if you hit “Print” on any article, the page now formats cleanly on paper—navigation and chrome are hidden, line length and margins are sensible, headings break predictably across pages, and links are expanded so their destinations are visible. It’s a small touch, but it respects how some of you prefer to read and annotate.
A lot of this work has been about making the experience kinder for readers. There’s now a functioning newsletter—subscribe and unsubscribe are handled cleanly via Buttondown—so if RSS isn’t your thing, you can still get new essays in your inbox without friction. I’ve also added a dyslexia-friendly reading option using the OpenDyslexic font. It doesn’t change the voice of the writing, but it does soften the edges of the reading experience for those who need it.
Under the hood, I tightened up categories and tags. The taxonomy is more consistent, slugs are predictable, and the site organizes itself more intelligently—both for humans browsing and for machines indexing. On the authoring side, my workflow is now fully aligned with Obsidian + Git. Front-matter stays neat thanks to linting rules, templates keep new posts uniform, and version control means drafts, edits, and fixes don’t get lost to the void. In the spirit of that openness, I’ve also open-sourced the blog’s Markdown posts: you can read, diff, or learn from them here. If you’re curious how the content is shaped before it becomes a page, that repo is the living archive.
The most visible change, though, is audio. I’ve built a new pipeline that uses OpenAI TTS to automatically generate MP3 audio for every post, and I added a player that respects how different people like to engage. If you prefer to listen, press play; if you prefer to read, scroll; and if you like doing both, there’s a mini-player that docks to the bottom of the screen and politely follows as you move through the essay. Those auto-generated MP3s also feed into a proper podcast RSS, which is already being picked up by external services—YouTube, Spotify, Amazon Music, and Apple Podcasts—and of course any third-party podcast app you already use. In short: words where you want them, in the format you want them.
For the more technically curious, here’s how the build pipeline actually works end-to-end. I write the post in Obsidian, lint and format it, then commit and push. That push triggers a Vercel deploy hook via GitHub action, which pulls the frontend plus the content submodules (posts, authors, series, categories). A prebuild script kicks off: it hashes the post content and checks whether an MP3 already exists for that exact version. If not, it chunks the text and runs those chunks through OpenAI TTS, stitches the responses back into a single MP3, uploads the result to a public Cloudflare R2 bucket, and regenerates the podcast.xml feed. From there the Astro build continues and deploys. The updated podcast feed is picked up by external services (YouTube, Spotify, Amazon Music, Apple Podcasts), and Buttondown sees the updated rss.xml and sends an email letting subscribers know there’s a new post.
None of this is “the final version.” It’s a living system that should keep getting calmer, faster, and easier to use. But the direction is clear now: a site that privileges substance, trims friction, and gives you multiple ways to engage with the work. And for fellow tinkerers, I’ll keep pushing more of the scaffolding into the open as it hardens. (And if I ever overcome the commit shame I feel for my code repo, I may also open-source that too someday.)


