It has been a while since the last site overhaul and there was enough accumulated debt to make a full update worthwhile. The site is still on Netlify and the overall look is mostly the same, but pretty much everything under the hood has changed.
Astro
The biggest change is replacing Gatsby (RIP) with Astro. Gatsby served the site well for a few years but it was increasingly heavyweight for what is essentially a static blog, carrying a large dependency tree, GraphQL for data fetching, and React as a required runtime even for pages with no interactivity. Astro strips all of that out. Pages render to pure static HTML by default, content is managed through the built-in Content Collections API, and there is no client-side JavaScript unless you explicitly add it. The contact form is the only page with any script, and that is a small vanilla JS block. Build times are noticeably faster.
Biome
Biome has replaced Prettier for formatting. It handles TypeScript, JavaScript, JSON, and CSS in a single tool with no plugins required. The configuration is minimal and it runs significantly faster than Prettier did.
TypeScript
Updated to TypeScript 6. The codebase is small enough that there were only a handful of minor type fixes needed, mainly around the stricter handling of potentially undefined values in the content layer.
Styling
The CSS has been cleaned up considerably. All of the vendor prefixes left over from the old Gatsby typography plugin have been removed, hardcoded color values have been consolidated into CSS custom properties, and the font stack has been updated to use system-ui rather than a long fallback list.
Other Improvements
A few things that were missing have been added: a sitemap, an RSS feed at /rss.xml, a robots.txt, and security headers on the Netlify deployment. Nothing groundbreaking but good housekeeping.
Conclusion
Overall a clean update. The site is simpler, faster, and easier to maintain going forward. Let me know if you run into anything broken!