The implementation notes behind this static-first writing system.

This blog starts with a deliberately small surface area: posts are local MDX files, routes are statically generated, and metadata is derived from typed frontmatter. The goal is to keep publishing boring in the best possible way.

Why static-first

A personal blog does not need a database by default. Local content keeps the editing flow close to the code, gives every article a reviewable history, and makes builds predictable.

The content pipeline validates each post before it reaches the page layer:

TypeScript
type PostFrontmatter = {
  title: string;
  description?: string;
  date: string;
  category: string;
  tags: string[];
};

That means archive pages, tag pages, RSS, and Open Graph metadata all share the same source of truth.

What can grow later

The current version intentionally avoids accounts, comments, and a database. Those can be added when there is a real workflow that needs them. Until then, the site stays portable and cheap to operate.