사이트
This is a colophon — a case study of how this site is built and the decisions behind it.
Stack
- Astro v6 — static site generator with content collections, i18n routing, and view transitions.
- Tailwind CSS v4 — utility-first CSS with CSS-variable-based theming.
- pagefind — static search index built at deploy time, zero JavaScript dependency at runtime.
- sharp — WebP image conversion via pre-commit hook; raw JPEGs never enter git history.
- simple-git-hooks — zero-config hook management; the
hook is committed and auto-installs on
pnpm install.
Decisions
1. Korean as the default locale
Chosen: Korean (ko) is the default locale.
The [...locale] catch-all routes render Korean at / and English at /en/.
Rejected: English-first with Korean as secondary. Most content is fitness posts in Korean; making Korean secondary would mean the default URL serves the minority use case.
Tradeoff: English SEO is weaker (English content lives
at /en/ rather than /). Accepted — the primary
audience for Korean content is Korean readers.
2. Pre-commit WebP pipeline
Chosen: A pre-commit hook converts staged
JPEGs to WebP via sharp before they enter git history.
Originals are never committed.
Rejected: Manual Squoosh processing before each commit. Friction compounds — three gym posts per week means three manual optimization runs.
Tradeoff: Hook adds ~1–2 seconds per commit containing images. Acceptable; workout posts with 6 images still commit in under 3 seconds.
3. Content collections over MDX-only
Chosen: Astro content collections with type-safe schemas. Blog posts, about pages, and projects are all modeled as collections.
Rejected: File-system routing with bare MDX files.
Lacks schema enforcement — a missing pubDatetime field
would cause a silent runtime error rather than a build-time type error.
Tradeoff: Schema changes require updating existing frontmatter. Worth it — type errors at build time are better than surprises in production.
What I'd do differently
- Set up pagefind's i18n support from the start rather than discovering mid-project that the Korean search index needed separate configuration.
-
Add a
DESIGN.mdfrom day one. Design decisions made verbally erode over time. This colophon exists because I didn't.
Last updated: 2026-04-16