Building this blog with Astro
Published: · 1 min read
For years this domain was a single page: a name, a photo, three links. It loaded in under a second and said almost nothing. That is a reasonable trade for a business card, and a terrible one for someone who wants to think out loud.
Boring on purpose
The whole site is static. There is no database, no CMS, no API to keep alive. Posts are Markdown files that live in the repository next to the code:
src/content/posts/
├── en/building-this-blog.md
└── es/construyendo-este-blog.md
Publishing is a commit. That’s the entire workflow, and it has a property no hosted editor can match: the content outlives the tool. If Astro disappears tomorrow, the posts are still plain text in git.
What static costs you
Being honest about the trade-offs matters more than the pitch:
- No drafts preview for other people. A
draft: truepost is excluded from the build entirely, so there is no shareable link until it ships. - No comments without pulling in a third party.
- Search has to be built ahead of time, not queried on demand.
That last one turned out to be the interesting problem, and the reason this site indexes itself at deploy time instead of shipping a search endpoint.
The part that actually matters
The best thing about a personal site is that nobody can take it away from you.
Everything else — the framework, the palette, the clever build step — is replaceable. Write things down somewhere you control.