# Task 04 — Content collection schema

**Agent**: `content-i18n-migrator` · **Model**: MiniMax-M3
**Depends on**: 01 · **Parallel with**: 02, 03 · **Blocks**: 05, 06
**Worktree**: `.agents/scripts/worktree.sh start 04 content-schema`

## Goal

Typed collections that make a missing translation a build error.

## Scope

`src/content/config.ts` only. You own it.

## Steps

1. Define `const localized = z.object({ en: z.string(), pt: z.string() })`.
   **Both required.** A missing `pt` must fail the build — silent English
   fallback is how bilingual sites quietly become monolingual.
2. Collections:
   - `guide` — `phases`, `modelGuide`, `skillSources`, `handsOnPrompts`, `skillInstallPrompts` from `app.js`
   - `chapters` — copy for `/models/`, `/agents/`, `/skills/`, `/summary/`
   - `reviews` — the 24 entries: `id`, `author`, `title`, `status`, `focus`, `wins[]`, `improve[]`, `extras`, `improved`
3. **Make the language-switching decision** and record it here:
   - *client-side swap* — matches today, no URL change, both languages in the payload. **Recommended.**
   - *route-based `/en/` `/pt/`* — better SEO, changes every existing URL, needs redirects.

## Done when

- [ ] `astro check` passes
- [ ] A deliberately missing `pt` field fails the build (prove it, then revert)
- [ ] The language decision is written down here with its reason

## Do not

Do not move any content yet. Schema only — tasks 05 and 06 fill it, and they
run in parallel against the shape you define.
