Skip to content
← archives

Why I switched this site to Astro

#Astro#web#frontend

This site has been a Next.js app, a plain HTML file, a Gatsby site, and briefly a Notion page with a custom domain. Each rebuild taught me something, but none of them felt right until Astro.

The problem with over-engineering a personal site

A Next.js app for a portfolio is like renting a warehouse to store a bicycle. You get server components, incremental static regeneration, edge middleware, and a deployment pipeline — for a site that updates twice a month and has no users who are logged in.

The complexity isn’t free. Every dependency is something that can break. Every abstraction is something you have to re-learn when you come back after three months away. For a site I want to maintain with zero friction, that matters.

What Astro gets right

Astro’s core bet is that most websites don’t need JavaScript on the client. Your blog post doesn’t need React. Your about page doesn’t need a hydration boundary. Ship HTML. Ship CSS. Add JavaScript exactly where it’s needed and nowhere else.

For this site, that means the entire thing is static HTML generated at build time. The canvas plexus animation is a single vanilla JS script. The content is MDX files that Astro knows how to render. There’s no client-side routing state to manage, no hydration mismatch to debug.

Content Collections are the feature I didn’t know I needed

Astro’s Content Collections let you define a schema for your Markdown/MDX files and get TypeScript-validated frontmatter at build time. Add a book to src/content/bookshelf/ with a rating field and the type system will tell you if you put a string where a number should go.

This sounds small. It’s actually the thing that makes a content-heavy personal site maintainable over years. No more “which frontmatter fields does this page use again?”

The one caveat

Astro’s ecosystem is smaller than Next.js’s. If you need a specific component library or a specific integration, you might find that it exists for Next but not for Astro yet. For a personal site, this hasn’t mattered once. For a production app with specific requirements, it might.


I’m not anti-Next.js. It’s the right tool for a lot of projects. It’s just not the right tool for a personal site where the primary requirement is “stays up and is easy to edit.” Astro is.