← All posts

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.