diff --git a/app.js b/app.js
index a18e6c1..ef8e2fc 100644
--- a/app.js
+++ b/app.js
@@ -1,9 +1,55 @@
const phases = {
- plan: { model: 'OPUS / REASONING', title: 'Turn ambiguity into work', copy: 'Inspect the repository, choose the architecture, split the request, and write acceptance criteria.', code: 'plan → decompose → define acceptance' },
- build: { model: 'SONNET, HAIKU, OR EQUIVALENT', title: 'Execute one bounded slice', copy: 'Give each worker enough context, one responsibility, and its own worktree. Less context; less collision.', code: 'brief + worktree → implement → test' },
- review: { model: 'STRONG MODEL OR HUMAN', title: 'Reconnect result to intent', copy: 'Check the diff against the original brief, run the checks, then merge, request changes, or discard.', code: 'diff + checks → review → merge / iterate' }
+ plan: { model: { en: 'OPUS / REASONING', pt: 'OPUS / RACIOCÍNIO' }, title: { en: 'Turn ambiguity into work', pt: 'Transforme ambiguidade em trabalho' }, copy: { en: 'Inspect the repository, choose the architecture, split the request, and write acceptance criteria.', pt: 'Inspecione o repositório, escolha a arquitetura, divida o pedido e escreva critérios de aceitação.' }, code: { en: 'plan → decompose → define acceptance', pt: 'planejar → decompor → definir aceitação' } },
+ build: { model: { en: 'SONNET, HAIKU, OR EQUIVALENT', pt: 'SONNET, HAIKU OU EQUIVALENTE' }, title: { en: 'Execute one bounded slice', pt: 'Execute uma fatia delimitada' }, copy: { en: 'Give each worker enough context, one responsibility, and its own worktree. Less context; less collision.', pt: 'Dê a cada worker contexto suficiente, uma responsabilidade e seu próprio worktree. Menos contexto; menos colisões.' }, code: { en: 'brief + worktree → implement → test', pt: 'brief + worktree → implementar → testar' } },
+ review: { model: { en: 'STRONG MODEL OR HUMAN', pt: 'MODELO FORTE OU HUMANO' }, title: { en: 'Reconnect result to intent', pt: 'Reconecte o resultado à intenção' }, copy: { en: 'Check the diff against the original brief, run the checks, then merge, request changes, or discard.', pt: 'Compare o diff com o brief original, execute as verificações e então faça merge, peça mudanças ou descarte.' }, code: { en: 'diff + checks → review → merge / iterate', pt: 'diff + verificações → revisar → merge / iterar' } }
};
+
+const translations = {
+ pt: {
+ '.chapter-links a:nth-child(1)': '01 frota', '.chapter-links a:nth-child(2)': '02 worktrees', '.chapter-links a:nth-child(3)': '03 skills', '.edition': 'ENGENHARIA DE IA 01 / 2026',
+ '.hero .eyebrow': 'Uma apresentação para quem entrega software', '.lede': 'Você não precisa de um exército de modelos. Precisa de um sistema: uma mente para enquadrar o trabalho, várias mãos para executá-lo e uma fronteira clara entre cada tarefa.', '.hero-index span': 'NOTA DE CAMPO / 001', '.hero-index strong': 'Entregue o sistema.', '.hero-index small': 'Skills · agentes · worktrees · evidências',
+ '.hero-stats div:nth-child(1) span': 'modelo forte para ambiguidade', '.hero-stats div:nth-child(2) span': 'workers delimitados em paralelo', '.hero-stats div:nth-child(3) span': 'iterações com evidências', '.hero-stats p': 'Leia isto como um mapa de rota, não como uma receita de prompt.',
+ '.thesis span': 'REGRA ZERO', '.thesis strong': 'Modelo forte para ambiguidade. Modelo leve para trabalho delimitado.', '.fleet .section-label span:nth-child(1)': 'Uma pequena frota', '.fleet .section-label span:nth-child(2)': 'coordenação antes do paralelismo', '.captain span': 'ORQUESTRADOR', '.captain h2': 'Decide o que precisa acontecer.', '.caption': 'O orquestrador preserva a intenção, escreve pequenos contratos e reúne resultados verificáveis. Ele não precisa digitar cada linha.',
+ '.failure-map .section-label span:nth-child(1)': 'Por que a fronteira importa', '.failure-map .section-label span:nth-child(2)': 'uma tarefa vaga / três falhas previsíveis', '.failure-grid article:nth-child(1) strong': 'Sopa de contexto', '.failure-grid article:nth-child(1) p': 'Cada worker lê tudo. Ninguém sabe quais fatos são essenciais.', '.failure-grid article:nth-child(2) strong': 'Colisão de branches', '.failure-grid article:nth-child(2) p': 'Dois agentes usam o mesmo checkout. O caminho mais rápido vira resolução de conflitos.', '.failure-grid article:nth-child(3) strong': 'Desvio confiante', '.failure-grid article:nth-child(3) p': 'O diff parece ótimo, mas ninguém verifica se resolveu o problema original.',
+ '.workflow .eyebrow': 'O ciclo de subagentes', '#workflow-title': 'Clique em uma fase. Veja a passagem.', '.workflow .copy > p:last-child': 'Delegar é mover uma tarefa delimitada para um contexto menor — não abrir mão da responsabilidade.', '.handoff .section-label span:nth-child(1)': 'O que atravessa contextos', '.handoff .section-label span:nth-child(2)': 'brief → diff → evidência', '.handoff thead th:nth-child(1)': 'Pacote', '.handoff thead th:nth-child(2)': 'Contém', '.handoff thead th:nth-child(3)': 'Por que importa',
+ '.worktrees .eyebrow': 'Git worktrees', '.worktrees h2': 'Uma branch por mão.', '.worktrees > div:first-child > p': 'Um worktree é outro diretório ligado ao mesmo repositório. Cada agente recebe seu próprio checkout e índice; o histórico continua compartilhado.', '.routing .eyebrow': 'Roteamento de modelos', '.routing h2': 'Não pague por raciocínio onde precisa de ritmo.', '.skills .eyebrow': 'Skills', '.skills h2': 'Escreva do jeito certo uma vez.', '.skills > div:first-child > p': 'Uma skill é um procedimento reutilizável. Ela pode carregar instruções, referências, scripts e assets. Não é memória mágica e não substitui critérios de aceitação.',
+ '.skill-principles span:nth-child(1)': '01 / defina o gatilho', '.skill-principles span:nth-child(2)': '02 / carregue detalhes sob demanda', '.skill-principles span:nth-child(3)': '03 / devolva evidências', '.skill-package > span': 'PACOTE DE SKILL', '.rule span': 'O PAPEL HUMANO', '.rule strong': 'O agente pode ser autônomo na execução. Intenção, limites e evidências continuam sendo seus.', '.callout span': 'COMECE AQUI', '.callout strong': 'Comece com um agente e uma skill. Adicione paralelismo apenas quando as tarefas forem realmente independentes.', '.sources .section-label span:nth-child(1)': 'Continue aprendendo', '.sources .section-label span:nth-child(2)': 'fontes reunidas localmente', '.sources p': 'Baseado em pesquisas sobre Claude Code, Codex, Git e fluxos de agentes. Abrir o pacote de referências →'
+ }
+};
+
const panel = document.querySelector('#phase-panel');
-const render = (id) => { const phase = phases[id]; panel.innerHTML = `
You do not need an army of models. You need a system: one mind to frame the work, several hands to execute it, and a clean boundary between every task.
You do not need an army of models. You need a system: one mind to frame the work, several hands to execute it, and a clean boundary between every task.
+
01strong model for ambiguity
03bounded workers in parallel
∞iterations with evidence
Read this as a route map, not a prompt recipe.
RULE ZEROStrong model for ambiguity. Light model for bounded work.
THINKMAKE
-
A small fleetcoordination before parallelism
ORCHESTRATOR
Decides what needs to happen.
Opus / reasoning
→
UIComponent and visual statesagent/uiTESTAcceptance casesagent/testsDOCSGuide and examplesagent/docs
The orchestrator preserves intent, writes small contracts, and gathers results that can be verified. It does not need to type every line.
+
A small fleetcoordination before parallelism
ORCHESTRATOR
Decides what needs to happen.
Opus / reasoning
→
UIComponent and visual statesagent/uiTESTAcceptance casesagent/testsDOCSGuide and examplesagent/docs
The orchestrator preserves intent, writes small contracts, and gathers results that can be verified. It does not need to type every line.
+
Why the boundary mattersone vague task / three predictable failures
01Context soup
Every worker reads everything. Nobody knows which facts are load-bearing.
02Branch collision
Two agents touch the same checkout. The fastest path becomes conflict resolution.
03Confident drift
The diff is polished, but no one checks whether it solved the original problem.
The subagent loop
Click a phase. See the handoff.
Delegation means moving one bounded task into a smaller context—not giving away responsibility.
What crosses contextsbrief → diff → evidence
Package
Contains
Why it matters
Brief
goal, files, boundaries
stops the worker inventing the problem
Worktree
branch and isolated checkout
parallel edits do not collide
Checks
tests, build, criteria
turns “looks good” into evidence
Diff
small, reviewable change
integration and discard stay cheap
-
Git worktrees
One branch per hand.
A worktree is another directory linked to the same repository. Each agent gets its own checkout and index; history remains shared.
Buildfast / focusedImplement this slice. Run these checks.
Exploreread-only / lightFind where this contract is used.
ReviewindependentDoes the diff satisfy the brief?
-
Skills
Write the right way once.
A skill is a reusable procedure. It can carry instructions, references, scripts, and assets. It is not magical memory, and it does not replace acceptance criteria.
A skill is a reusable procedure. It can carry instructions, references, scripts, and assets. It is not magical memory, and it does not replace acceptance criteria.