TensorFlake

TensorFlake

Thoughts on AI, code, and building things that matter


Why I Chose Astro for My Personal Site

By TensorFlake April 10, 2025 Posted in Web Development
Why I Chose Astro for My Personal Site

Personal sites are deceptively hard to get right. They are small enough that any framework feels like overkill, but public enough that you actually care about performance and design.

I have tried most of the major options. Here is my honest take.

What I Tried First

Next.js is a great framework for apps, but for a blog it ships far more JavaScript than you need. The hydration story is improving with Server Components, but it still felt heavy for static content.

Gatsby had its moment, but the build times and plugin ecosystem complexity made it frustrating to maintain.

Hugo is blazing fast but the templating syntax never clicked for me. It felt like writing Go templates where I wanted to write components.

Why Astro Won

Zero JS by default. Astro ships no JavaScript unless you explicitly opt in with client:load or similar directives. For a blog, this is ideal — your readers just get fast HTML and CSS.

Component islands. When you do need interactivity (a theme toggle, a search box), you can hydrate just that component without paying the cost for the whole page.

Content Collections. Astro’s content layer gives you type-safe Markdown with schema validation. Adding a required field to your frontmatter schema immediately catches any posts missing it at build time.

File-based routing. src/pages/about.astro becomes /about. That’s it.

The Tradeoffs

Astro is deliberately not a full application framework. If you need authentication, real-time data, or complex client state, you will want to reach for something else (or add an island that uses React/Vue for that specific part).

For a blog, a portfolio, or documentation — Astro is hard to beat.

Deployment

Because Astro outputs static HTML by default, you can host it anywhere that serves files. I use Cloudflare Pages: it is free, globally distributed, and a git push is all it takes to deploy.