Skip to content
Pedro Villa
← Back to posts

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: true post 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.