Why I Chose Astro for My Personal Site
When I rebuilt my personal site, I had a few requirements: fast, simple, and able to handle both static content and the occasional interactive component. Astro checked every box.
The case for Astro
Most personal sites are 95% static content. Astro’s “zero JS by default” philosophy means my pages ship as pure HTML and CSS unless I explicitly opt into client-side JavaScript. The result is a site that loads almost instantly.
But I still want interactive elements occasionally: a live code demo, an embedded form, a dynamic component. Astro’s island architecture lets me sprinkle in React or vanilla JS exactly where I need it, without shipping a framework bundle on every page.
MDX for content
This post is written in MDX, which means I can mix Markdown with JSX components. For a developer blog, that’s perfect. I can write prose naturally and drop in interactive elements when they add value.
The content collection system gives me type-safe frontmatter validation, so I catch missing fields at build time rather than in production. Combined with the glob loader pattern, adding a new post is as simple as creating a new .md or .mdx file.
The stack
- Astro 5 with static generation
- MDX for interactive content
- Tailwind CSS for utility styles
- Custom CSS variables for the design system
- Auto-generated RSS feed and sitemap
It took about a day to set up, and now I spend my time writing content instead of fighting tooling. That’s exactly what a personal site should be.