Recently I concluded two things I thoroughly enjoy, among other things, is learning new things and conveying what I have learnt. So what better outlet for that urge than to write about it I thought. Many great blogs exist in the wild and have inspired me considerably to try it myself.
In building this blog, I wanted to explore a fundamental question: how simple can a static blog be while still providing a pleasant development experience? I initially considered building a custom static site generator with Vite and Handlebars, but ultimately chose Astro instead. Here’s why.
The temptation to build
As developers, we often feel the urge to build our own tools. A static site generator seems straightforward: read markdown files, apply templates, write HTML. How hard could it be?
And it’s not hard. But “not hard” isn’t the same as “simple.” A custom generator means:
- Maintaining your own build pipeline
- Implementing hot reloading yourself
- Handling edge cases in markdown processing
- Building your own content organization system
- Writing documentation for future you
For a personal blog, this complexity doesn’t serve the goal: writing and sharing content.
Why I chose Astro
Astro provides an excellent balance between simplicity and functionality:
- Content collections organize markdown files with type-safe schemas
- Zero JavaScript shipped by default (pure static HTML)
- File-based routing that’s intuitive and requires no configuration
- Built-in markdown processing with syntax highlighting
- Development server with hot reload out of the box
- Fast builds and excellent performance
Most importantly, Astro handles all the complexity I would have built myself, letting me focus on writing content instead of maintaining build tools.
Radical simplicity through abstraction
By choosing Astro, I gained modern development practices without custom code:
Live reloading works perfectly. Edit markdown or components and see changes instantly.
Content organization with typed content collections keeps articles and projects structured.
Markdown linting runs before every build to enforce consistent formatting.
Static output deploys anywhere without server-side rendering or databases.
The development workflow
Writing a new post is straightforward:
- Create a markdown file in
src/content/blog/ - Add frontmatter with title, date, and description
- Write the content
- Run
npm run devto preview with live reloading - Run
npm run buildto generate static files
No custom build scripts. No template debugging. Just writing.
Deployment
The entire site is static files in dist/. No server-side rendering, no serverless functions,
no database. Just HTML, CSS, and assets that can be deployed anywhere.
The simplicity of the output matches the simplicity of the input. Markdown goes in, static HTML comes out. Astro handles everything in between.
The right kind of simplicity
Sometimes simplicity means building less and choosing well. Astro lets me maintain a blog that’s easy to understand, easy to modify, and easy to deploy without maintaining custom tooling.
I can always build a custom generator as a learning exercise. But for actually publishing writing? Astro is the simple choice.