This Blog Now Runs on Astro, 12 Years after Jekyll · Jannik Weyrich<br>← All writing<br>In January 2014 I wrote the compulsory switch blog post: this blog now runs on Jekyll. Tradition demands a round two, so here it is. The blog now runs on Astro.
Jekyll served me well for 12 years. The pain was the Ruby toolchain around it. Every time I came back after a few months to write a post, I first spent an evening untangling Ruby versions and bundler errors. My projects live in the JavaScript ecosystem these days, so Astro removes that context switch. The redesign was overdue anyway.
One workflow I did not want to lose: posts are markdown files in a GitHub repo, so for a quick fix or even a whole post I can edit right in the GitHub web UI, commit, and the site deploys itself. No local checkout, no build tools, works from any machine. That is a big part of why I moved to Astro instead of a hosted platform and stayed on GitHub Pages.
The migration itself took one afternoon with Claude Code: new layout, all posts moved over, deploy pipeline swapped. Three things I learned that most migration guides skip:
Keep your URLs instead of setting up redirects. Jekyll URLs end in .html, Astro defaults to directory URLs like /blog/post/. Almost every guide tells you to build a redirect layer. You can skip it entirely:
// astro.config.mjs<br>export default defineConfig({<br>build: { format: 'file' },<br>trailingSlash: 'never',<br>});<br>With format: 'file', Astro emits /blog/2014/01/28/title.html exactly like Jekyll did. Twelve years of inbound links keep working and there is no redirect config to maintain forever.
Diff the sitemaps before you deploy. Pull the live sitemap.xml, extract the URLs, and compare them against your new build:
curl -s https://yoursite.com/sitemap.xml | grep -o '[^ | sort > old.txt<br>grep -rho '[^ dist/sitemap*.xml | sort > new.txt<br>diff old.txt new.txt<br>Every line that only exists in old.txt is a page that will silently 404 after the switch. Slugs are the usual suspect: umlauts, ampersands, and dots get normalized differently by every generator.
GitHub Pages stops building for you. Pages compiles Jekyll sites automatically on push. For Astro you need a GitHub Actions workflow (withastro/action plus actions/deploy-pages) and, easy to miss, you have to flip the Pages source in the repo settings from “Deploy from a branch” to “GitHub Actions”. Until you do, Pages keeps serving the old Jekyll build and your pushes appear to do nothing.
See you around 2038 for the next compulsory switch blog post.
Written by<br>Jannik Weyrich<br>Entrepreneur in Koblenz building calm B2B software. Occasionally available for advisory work. Say hello.
← All writing