본문으로 이동

사이트

This is a colophon — a case study of how this site is built and the decisions behind it.

Stack

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

Last updated: 2026-04-16