← All writing
Building AVOID SYSTEM

Why this blog is a folder of Markdown files

How a one-person studio keeps three websites running for the price of the domains — and why the posts live in Git, not a database.

By ·· 1 min readĐọc bằng tiếng Việt →

AVOID SYSTEM is built a few hours a week. Anything that needs babysitting — a server to patch, a database to back up, a SaaS plan that grows with every seat — eventually wins against the work that matters. So the websites follow one rule: static first, dynamic only when there is a reason.

The setup

  • Three sites — avoid-system.com, nhathuynh.com, nhathuynh77.com — live in one Astro monorepo and share one set of brand tokens.
  • Every page is built to plain HTML and served from Cloudflare. Requests for static files are free and unlimited, so traffic never shows up on a bill.
  • The few things that are truly dynamic — the email list, the tester list — go into a small SQLite database (D1).

Why posts are files, not rows

Posts change rarely and are read often. That is exactly what a build step is for.

  • Versioned. Every edit is a commit. Nothing is lost when a CMS changes its plans.
  • Portable. Markdown renders anywhere. If the host ever changes its pricing, the repo moves in an afternoon.
  • Free to scale. A thousand posts cost the same as ten: nothing.

Search is built at the same time as the site, so even finding a post doesn’t need a server.

What it costs

Today: the three domains, about thirty dollars a year. The first real line item appears only if the dynamic parts outgrow the free tier — and that is a good problem to have.

Good architecture is knowing what not to build. That applies to the website too.