MÓDULO 3.4

🎯 Browser Embutido + Iteração Visual

O recurso exclusivo do Codex App: clicar no que está errado, descrever, e o agente aplica direto. Como cortar tempo de feedback de minutos para segundos — e quando voltar pro plan mode.

6
Tópicos
60
Minutos
Inter
Nível
Polish
Tipo
1

🖥️ O Browser Embutido do Codex App

Esse recurso não existe no Claude Code nem no Cursor. É um browser nativo dentro da janela do Codex App, lado a lado com o código. O agente vê o que você vê — clique, scroll, formulário, console.

🪟 Layout side-by-side

app/inbox/page.tsx > npm run dev ✓ Ready in 2.3s ○ Local: localhost:3000 CÓDIGO + TERMINAL localhost:3000/inbox ! BROWSER EMBUTIDO
RECURSO 1

Hot reload acoplado

Mudou código → browser recarrega instantâneo. Sem alt-tab.

RECURSO 2

Console capturado

Erros JS aparecem no chat do agente automaticamente.

RECURSO 3

DOM inspecionável

Agente vê HTML renderizado, não só o código fonte.

📌 Por que isso muda o jogo

Em Cursor/Claude Code você descreve o bug em texto e reza. No Codex App o agente vê o problema com seus olhos. A diferença em qualidade de fix é gigante — especialmente em CSS e layout, onde palavras falham.

2

👆 Anotação Visual

Descrever um bug visual em texto leva 5 frases. Apontar e dizer "esse botão tá grande demais" leva 2 segundos. É o "select to fix" do design — point-and-click pra IA.

🔄 Workflow de anotação

1
Ativa modo de anotação — atalho ⌘⇧A no browser embutido.
2
Clica no elemento problemático — overlay destaca, captura DOM path.
3
Escreve um comentário — "padding muito grande, reduzir pela metade".
4
Codex recebe screenshot + DOM + texto — navega ao componente certo automaticamente.
5
Aplica e hot-reload — você vê o ajuste em ~10s sem clicar no código.

❌ Sem anotação visual

"Tem um botão na lista de conversas, eu acho que é o de arquivar, ele tá com padding-x grande demais e o texto não cabe quando o nome é longo"

Agente: 3 perguntas de volta, 2 minutos, fix possivelmente errado.

✅ Com anotação visual

[clica no botão] "padding-x menor"

Agente: vai direto no ConversationItem.tsx:42, ajusta, pronto em 8s.

🎯 A regra do "menos palavras, mais cliques"

No fluxo visual, sua descrição tende a ficar curta — "menor", "mais espaço aqui", "alinhar à direita". Isso é certo. A imagem fornece o contexto que o texto teria que reconstruir.

3

⚡ Iteração Rápida: fix → reload → verifica

Compressão de tempo de feedback é multiplicador direto de qualidade. 12 iterações em 1 hora batem 3 iterações em 1 hora — sempre. O loop apertado é o que torna polish viável.

⏱️ Comparação de tempo de feedback

Workflow tradicional edit alt-tab reload olhar/scroll alt-tab ≈ 90s/iter Browser embutido + anotação click descrever auto-fix ver ≈ 12s/iter Em 1h: 40 iters → ~7 iters tradicionais

🔁 O loop apertado em prática

  1. 1. Comece pela tela mais visível — landing/inbox/dashboard.
  2. 2. Faça 1 anotação por vez (não acumula 5 antes do agente rodar).
  3. 3. Hot-reload aplica → você vê → próximo problema.
  4. 4. Não pare pra "também vou ajustar isso" — anota e segue.
  5. 5. Quando atingir "tá ok", commita ANTES de seguir polindo.

🎯 Polish é exponencial, não linear

O 10º ajuste é o que faz a tela parecer profissional, não o 3º. Iteração rápida torna o 10º ajuste barato — sem ela, você desiste no 4º porque dá preguiça. É literalmente o que separa "MVP de aluno" de "produto que paga R$ 25k".

4

📱 Responsivo: Toggling Viewport

Responsivo testado depois é responsivo quebrado. Testar viewport durante a construção pega 80% dos bugs antes deles existirem.

📐 Os 3 viewports que importam

Viewport Largura Tailwind Comportamento esperado
📱 Mobile375px<smLista full-width, thread em modal
📋 Tablet768pxmd2 colunas (lista + thread), painel some
🖥️ Desktop1280px+lg3 colunas completas

⚙️ Tailwind responsivo no inbox

<div className="grid grid-cols-1 md:grid-cols-[280px_1fr] lg:grid-cols-[280px_1fr_280px] h-screen">
  <ConversationList className="border-r border-neutral-800" />
  <MessageThread className="hidden md:flex" />
  <ContactPanel  className="hidden lg:block border-l border-neutral-800" />
</div>

📌 Touch targets: 44px é mínimo

Apple HIG e Material Design concordam: botões em mobile precisam de pelo menos 44×44 pixels. Botão lindo de 24px no desktop vira frustração no celular. Teste no viewport mobile e clique em tudo com o dedo (sim, com o dedo, não com o mouse).

5

📸 Capturando Bug com Screenshot Anotado

Bug descrito em texto vira ping-pong de 6 mensagens. Bug descrito em screenshot anotado é fechado na primeira resposta. Vale ouro com cliente, com colega, e com o você do dia seguinte.

🎯 Anatomia de um screenshot que resolve

Seta vermelha apontando o problema exato
Círculo em torno da área afetada
Texto curto: "deveria ser X, está Y"
URL/rota na barra do browser visível
Viewport size visível (375px / 1280px)
Console aberto se for bug de JS
Versão/branch no canto se relevante
Repro steps em 3 linhas embaixo

📋 Template de bug report

## Bug: [resumo de 1 linha]

**Onde:** /inbox (conversation thread)
**Viewport:** 768px (tablet)
**Branch:** feat/multi-channel

### Repro
1. Abrir uma conversa com 50+ mensagens
2. Scroll até o topo
3. Receber nova mensagem (mock)

### Esperado
Manter scroll position se usuário não estiver no fim.

### Atual
Scrolla pro fim mesmo se eu estiver lendo histórico.

[screenshot-anotado-aqui.png]

💼 Pro cliente: vale a vida útil do contrato

Cliente que recebe bug report bem feito confia mais e cancela menos. É um dos rituais que aparenta "só boa educação" mas é estratégia comercial direta. O Codex App captura screenshot + anotação direto no chat — use ABUNDANTEMENTE.

6

🛑 Quando Voltar pro Plan Mode

Iteração visual é poderosa pra polir; péssima pra arquitetar. Saber a hora de parar e replanejar evita acumular 15 fixes em código que precisava de reescrita.

🚨 Sinais de alerta — pare e plan mode

⚠️
3 fixes seguidos no mesmo arquivo— provavelmente o componente está mal estruturado, não com bug pequeno.
⚠️
Escopo do problema mudando— começou "padding errado" e virou "preciso refazer o layout inteiro".
⚠️
Mesmo bug volta após "fix"— sintoma de causa raiz não atacada; aplicar band-aid 4x é pior que parar.
⚠️
Você não consegue mais explicar o que mudou— commit acumulando, mente perdida; pause e mapeie.
⚠️
Refatoração emergindo— "ah, e já que tô aqui..." — não, volta pro plan mode.

✅ Iteração visual é boa pra:

  • • Polish de espaçamento, cor, tipografia
  • • Microcopy e labels
  • • Estados visuais (hover, focus, active)
  • • Responsividade incremental
  • • Animações sutis

❌ Iteração visual é ruim pra:

  • • Mudança de arquitetura de componentes
  • • Refatoração de estado global
  • • Adição de feature nova grande
  • • Performance / re-renders
  • • Migração de biblioteca

🎯 A regra dos 3 fixes

Se você precisou pedir 3 fixes no mesmo componente nas últimas 10 minutos, pare. Abra o plan mode, descreva o que está acontecendo no nível arquitetural ("o componente X está fazendo demais; quero quebrar em Y e Z"), e deixe o agente propor um refactor antes de mais um band-aid. Custa 5 minutos pensar e economiza 2 horas refazendo.

O que Aprendemos

Browser embutido é exclusivo do Codex App — agente vê o que você vê, side-by-side com código.
Anotação visual: clique + 3 palavras = fix — bate descrever em 5 frases sempre.
Loop fix→reload→ver em ~12s — habilita 40 iterações/h vs 7 no fluxo tradicional.
Toggling viewport mobile/tablet/desktop pega 80% dos bugs cedo — touch target mínimo de 44px.
Screenshot anotado é estratégia comercial — fecha bug na 1ª mensagem, cliente confia mais.
3 fixes no mesmo arquivo = volta pro plan mode — pensar 5 min economiza refazer 2h.

Próxima Trilha:

Trilha 4 — Backend e Integrações: Convex no InboxAI real, integrações WhatsApp/Instagram/email/web chat, agentes IA qualificadores, autenticação e deploy.