# 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.