Why I Switched to Astro
My journey from React SPAs to Astro's island architecture
After years of building everything with React, I finally made the switch to Astro for my personal site. Here’s why.
The Problem with SPAs for Content Sites
Don’t get me wrong - React is fantastic for complex, interactive applications. But for a portfolio site that’s mostly static content with a few interactive bits? It’s overkill.
My old React portfolio was:
- Shipping 300KB+ of JavaScript to show some text and images
- Slow to load on mobile networks
- A pain to maintain as dependencies aged
What Drew Me to Astro
1. Zero JavaScript by Default
Astro ships zero client-side JavaScript by default. Need some interactivity? Add it only where needed with “islands”. This is exactly what I wanted - a mostly static site with sprinkles of interactivity.
2. Component Agnostic
I can use .astro components for most things, but drop in React, Svelte, or Vue when I need them. The flexibility is refreshing.
3. Content Collections
Writing blog posts in Markdown with proper TypeScript schema validation? Yes please. No more fighting with CMS integrations.
4. Fast Build Times
My old React portfolio took 30+ seconds to build. Astro builds in under 5 seconds. The DX improvement is real.
The Tradeoffs
Nothing is perfect. A few things I miss:
- Less mature ecosystem compared to Next.js
- Fewer hosting optimizations (though Vercel support is solid)
- Some learning curve with the island architecture
The Result
This site you’re reading right now is built with Astro. It scores 100 on Lighthouse performance, loads instantly, and is a joy to maintain.
For content-heavy sites, Astro just makes sense. I’m not going back.