Frontends com Vibecoding · Capítulo 24 de 35 · 36 min
Planejar a modernização e publicar com reversão
A modernização sai em cinco ondas com portão entre elas, orçamento fixado na onda zero e caminho de volta à versão anterior pronto antes da publicação.
Este capítulo faz parte do curso gratuito Frontends com Vibecoding.
Uma reversão pode devolver o tráfego a uma publicação anterior elegível. Antes de contar com ela, confira a compatibilidade com banco de dados, arquivos, serviços externos e configurações atuais: voltar o código não desfaz automaticamente mudanças nesses sistemas.
A reversão faz parte do plano de recuperação; as verificações antes do envio reduzem a chance de precisar dela. E o comando não depende da sua memória: uma esteira automática repete a mesma checagem a cada proposta de mudança.
O agente, o assistente de inteligência artificial que escreve código a partir do seu pedido, devolve trabalho com falhas previsíveis. Quando ninguém checa antes de publicar, são sempre as mesmas: tipo frouxo, aviso ignorado, nenhum teste.
Publicar é pôr a nova versão no ar para o cliente, e o defeito que escapa até ali já custa venda. O roteiro que faz o agente testar a tela como usuário fecha o buraco que a checagem automática não vê.
Ao fim, você sabe se a publicação do site tem caminho de volta, quanto tempo ele leva e quem pode acioná-lo. Tempo de leitura: cerca de 36 minutos, e o ensaio de reversão com o time num ambiente de teste, mais 15.
Encadeie três checagens num comando só, chamado verify, e rode-o antes de todo envio. São elas: a checagem de tipos, o padrão de código (a revisão automática de estilo, como o corretor ortográfico) e os testes.
Mire dez segundos de espera. Portão lento é portão que alguém pula na sexta-feira apertada, e portão pulado não protege ninguém. Ordene os passos para que o primeiro que falhar impeça os seguintes.
Ver como texto
Duas fileiras mostram o comando verify, que encadeia três checagens antes do envio: tipos, padrão de código e testes. Na primeira fileira tudo passa e o envio segue. Na segunda, o padrão de código falha: os testes nem rodam e o envio fica barrado, porque a primeira checagem que falha impede as seguintes. O rodapé lembra que o alvo de espera é de dez segundos.
As ferramentas por trás desse comando mudaram em 2026. O Vite 8 com Rolldown 1.0 é o empacotador de motor único, estável desde março e maio de 2026. Empacotador é a ferramenta que junta os arquivos do site num pacote leve, como embalar o produto antes do envio.
O ganho é de cerca de 25 vezes num projeto de 19 mil módulos, e de duas a cinco vezes num projeto pequeno. Quem já está no Next.js 16 não escolhe: o Turbopack vem como padrão, salvo se a configuração antiga for complicada, caso em que o Rspack serve.
No padrão de código, o Biome substitui duas ferramentas antigas e lê tipos sem rodar o compilador completo. Fora do Tailwind (as classes utilitárias de estilo), o CSS passa pelo Lightning CSS.
O Storybook 10 é o catálogo onde cada componente (a peça reutilizada, como o botão) é testado sozinho, fora da tela em que ele aparece.
Os testes seguem a lógica de portão em degraus. O Vitest roda os testes de unidade em segundos. O Playwright abre o navegador de verdade para o teste de ponta a ponta e compara a foto do SVG compilado entre duas propostas. É o que pega o gráfico que sumiu sem ninguém tocar nele.
Ver como texto
Uma escada de quatro degraus, de baixo para cima, mostra o portão em degraus dos testes. No primeiro degrau, o Vitest roda os testes de unidade em segundos. No segundo, o Playwright abre o navegador de verdade e compara a foto do SVG entre propostas. No terceiro, o axe-core dentro do Playwright é o portão de acessibilidade, com 30% a 40% dos critérios. No quarto, Pa11y e Lighthouse CI fecham o degrau. Ao pé, o MSW simula o dado da rede para o teste não depender do servidor.
Dentro do Playwright, o axe-core é o portão de acessibilidade, a checagem de que a tela serve a quem usa leitor de tela ou só o teclado. Ele cobre de 30% a 40% dos critérios de sucesso, e o resto continua sendo revisão humana.
Esse mesmo motor move o relatório do Lighthouse e o painel do Chrome. Por isso ferramentas que parecem independentes devolvem o mesmo resultado. Pa11y e Lighthouse CI fecham o degrau, e o MSW simula o dado que viria da rede, para o teste não depender do servidor.
| Ferramenta | O que faz | Quando entra |
|---|---|---|
| Vite 8 + Rolldown 1.0 | Empacota o site com um motor só, em Rust; linha 8.2, na 8.2.2 de 20/08/2026 | Projeto novo ou Vite antigo; até 25 vezes mais rápido em 19 mil módulos |
| Turbopack | Empacotador padrão do Next.js 16 desde 21/10/2025; sem pacote próprio, vai junto do Next.js (16.3.4, de 31/08/2026, com cache de build desde a 16.3) | Quem está no Next.js 16, salvo configuração webpack complexa |
| Rspack 2.2 | Empacotador compatível com configuração webpack | Projeto webpack grande sem reescrever a configuração |
| Biome 2.3+ | Padrão de código e formatação, mais de 423 regras | No lugar de ESLint e Prettier |
| Lightning CSS | Compila e minifica o CSS fora do Tailwind | CSS próprio fora do utilitário |
| Storybook 10 | Catálogo de componentes e teste visual; só ESM, 29% menor | Componente que se repete em várias telas |
| Vitest | Roda os testes de unidade | Todo projeto; é o runner do `verify` |
| Playwright | Ponta a ponta e foto do SVG compilado entre propostas | Fluxo com clique, formulário ou gráfico; Chromium fixo em CI |
| axe-core + Playwright | Portão de acessibilidade na esteira; é o mesmo motor do Lighthouse e do painel do Chrome | Todo projeto; cobre de 30% a 40% dos critérios de sucesso |
| Pa11y e Lighthouse CI | Auditoria de acessibilidade e orçamento de peso e tempo | Bloqueia a publicação quando o orçamento estoura |
| MSW | Simula o dado que viria da rede | Teste de tela com dado assíncrono, sem servidor de pé |
| Sharp, Squoosh e SVGO | Imagem em AVIF ou WebP e vetor limpo, no build | Todo projeto com imagem própria |
A coluna da direita é o critério para a ferramenta entrar.
Fonte: Manual de referência Recursos de frontend moderno, edição setembro de 2026, seção 23.
Rodar a checagem só na sua máquina é frágil: você esquece, ou o que passa no seu notebook falha em outro. O GitHub Actions é a esteira que vem com o repositório e roda os mesmos comandos numa máquina limpa a cada proposta. O arquivo diz a ordem: instalar as dependências travadas, rodar o verify e o build.
Um portão só protege quando bloqueia. Sem a proteção do ramo principal ligada, a checagem só avisa, e aviso ignorado não impede nada de entrar.
Fixe a versão do Chromium que a esteira usa: atualização de motor muda paginação e fonte. Dispare o PDF ou a foto só após um marcador de estado estável, nunca no evento de carregamento: tela que ainda espera dado gera arquivo pela metade.
A chave que autoriza publicar nunca entra no repositório. Se ela já foi enviada num commit, apagar o arquivo não resolve, porque o histórico a preserva; o conserto é trocar a chave no provedor. A esteira concentra credenciais de todos os ambientes: num levantamento de 2026, 59% das máquinas comprometidas eram executores de checagem.
Na Vercel, o Instant Rollback pode apontar os domínios para uma publicação anterior elegível. A versão restaurada usa sua configuração de build; APIs, banco de dados e CMS podem ter mudado desde então. Registre a publicação escolhida, confira essas dependências e teste a página servida depois da reversão.
Ver como texto
Da abertura do PR à produção: CI roda os gates, gera um preview por PR, faz o merge, publica e observa em produção, com rollback de um clique se algo regredir
O último portão é o agente testando a tela como usuário. A skill webapp-testing (o roteiro que ensina o agente a testar a aplicação local com Playwright em Python) fixa a ordem: reconhecer antes de agir.
Use o ajudante with_server.py para subir o servidor e rodar o script; rode --help antes e trate os scripts como caixa-preta, porque a fonte deles polui a conversa. Para HTML estático, o agente lê o arquivo e acha os seletores (o endereço de cada elemento, por texto, papel, CSS ou id).
Para aplicação dinâmica, ele sobe o servidor, navega e espera a rede sossegar. Só então tira o print ou inspeciona o DOM (a árvore de elementos da página) e escolhe os seletores. Inspecionar o DOM antes de a rede sossegar é a armadilha: o seletor mira o que ainda não existe. Chromium sempre sem janela, navegador fechado no fim.
Ver como texto
Cinco passos numerados, de cima para baixo, da skill webapp-testing: 1 subir o servidor com o with_server.py, 2 navegar até a tela, 3 esperar a rede sossegar, 4 tirar o print ou inspecionar o DOM e 5 escolher os seletores e só então agir. Uma seta tracejada vermelha pula do passo 2 direto ao 4, sem esperar a rede: é a armadilha em que o seletor mira o que ainda não existe.
# testar_frete.py: o agente testa a tela como usuário, reconhecendo antes de agir.
# Rode pelo ajudante da skill (peça --help antes de usar):
# python scripts/with_server.py --server "npm run dev" --port 5173 -- python testar_frete.py
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
navegador = p.chromium.launch(headless=True) # sempre sem janela
pagina = navegador.new_page(viewport={"width": 390, "height": 844})
pagina.goto("http://localhost:5173/carrinho")
pagina.wait_for_load_state("networkidle") # a rede sossegou: só agora olhe o DOM
pagina.screenshot(path="carrinho-antes.png", full_page=True)
# seletores escolhidos no estado renderizado: por texto, papel, CSS ou id
pagina.get_by_label("CEP").fill("01310-100")
pagina.get_by_role("button", name="Calcular frete").click()
pagina.wait_for_load_state("networkidle")
valor = pagina.get_by_test_id("valor-frete").inner_text()
pagina.screenshot(path="carrinho-depois.png", full_page=True)
assert valor.strip() != "", "a caixa do frete veio vazia"
navegador.close() # feche o navegador no fimUm envio com erro de tipo que derruba o cálculo do frete não chega ao site quando o verify bloqueia a entrada na esteira. O roteiro do agente fotografa a caixa vazia no mesmo dia.
Antes de aprovar a próxima publicação, peça o verify encadeado como condição obrigatória na esteira. Trave a versão do Chromium que ela usa e confirme que a chave de publicação mora no cofre da plataforma, nunca no repositório.
Depois rode o roteiro Playwright que testa a tela como o cliente vê. Só aprove o envio quando ele passar com a rede já sossegada.
Modernizar um sistema antigo por etapas, sem parar de atender
Com os portões automatizados, a modernização de um site existente pode ser fatiada em ondas, com orçamento fixado antes da primeira e dois agentes em pastas separadas.
Cinco ondas de melhoria, com um portão de verificação entre uma e a próxima, modernizam um site antigo sem parar de atender. Onda é uma rodada de trabalho com um objetivo só, fechada por uma checagem.
A ordem protege o negócio: primeiro a medição, depois o caminho do cliente, o visual, o movimento e o desempenho. Cada onda fecha antes de a seguinte começar.
Cada agente é um assistente de inteligência artificial que escreve código a partir do seu pedido. Dê a cada um a sua própria pasta, e nenhum apaga o trabalho do outro dentro da mesma onda. A onda zero fixa a régua antes de qualquer mudança, e a matriz do manual escolhe a stack de destino pelo cenário do relatório.
Ver como texto
Seis faixas empilhadas em sequência: a onda zero, de orçamento e medição, fixa a régua; depois a onda 1 só mede, a onda 2 cuida do caminho do cliente, a onda 3 do visual, a onda 4 do movimento e a onda 5 do desempenho. Entre uma onda e a próxima há um portão, desenhado como uma barra verde sobre a seta. À direita, uma seta de retorno mostra que, se o portão reprova, a onda volta e corrige, e uma nota lembra que o programa pode parar no meio sem perder o entregue.
Uma onda cuida de uma camada só, e nada mais. Atacar as frentes juntas produz, semanas depois, a mesma lista de problemas com coisas quebradas em cima.
A primeira onda só mede: nenhum arquivo muda, e o resultado é um relatório com três números de partida. Entre uma onda e a próxima existe o portão de qualidade (a checagem automática que barra a mudança ruim antes do cliente). Se ele reprova, a onda volta e corrige, e o programa pode parar no meio sem perder o entregue.
Antes da primeira onda existe a onda zero, que fixa a régua com que as outras serão medidas. Ela tem três peças. O orçamento de desempenho é o teto de peso e de tempo de carregamento escrito antes de qualquer tela, como o orçamento da obra antes do primeiro tijolo.
O profiling mede onde o tempo é gasto; o OpenTelemetry é o padrão aberto que registra o que a tela faz em produção, como o odômetro do carro. Produto visual sem esse controle desde a primeira semana degrada em silêncio. Sem a onda zero, a onda cinco chega sem saber se o site ficou mais rápido ou apenas diferente.
Um teto numérico orienta o agente melhor do que "deixe leve". O portão de cada onda compara o número medido com o teto da onda zero.
Ver como texto
Uma única demanda se divide em cinco ondas de agentes especialistas que rodam em paralelo e de forma complementar sobre um projeto existente, e convergem num projeto melhorado. À esquerda, o bloco da demanda única representa o prompt-mãe. Dele saem cinco faixas horizontais empilhadas: Onda 1 diagnóstico, Onda 2 UX e navegação, Onda 3 sistema visual, Onda 4 movimento e 3D, Onda 5 performance, acessibilidade e deploy, cada uma com pontos que pulsam representando agentes especialistas trabalhando ao mesmo tempo. À direita, todas as faixas convergem para o bloco do projeto melhorado. A leitura é que uma só demanda orquestra cinco frentes complementares em paralelo, da auditoria ao deploy.
A stack de destino (o conjunto de ferramentas que constrói e serve a tela) depende do cenário, e a matriz do manual decide numa linha. O board mensal fechado (o relatório da reunião de conselho) pede HTML estático com D3 ou Observable Plot e CSS de impressão.
O investor update pede Astro 7 com MDX e PDF via Playwright. O marketing diário pede React ou Vue com ECharts, Plotly ou ApexCharts 7, ligados às APIs (as portas de dados). O portal recorrente para diretoria pede Next.js 16 ou Astro com camada semântica (a definição de cada métrica em código versionado) e controle de acesso por linha.
Já o relatório offline seguro cabe num HTML único com DuckDB-Wasm e dados locais; a prova de conformidade pede Typst 0.15. Site que atende dois cenários recebe duas ondas de visual, uma por stack de destino, em vez de uma stack de compromisso que serve mal aos dois.
| Cenário | Stack de destino |
|---|---|
| Board mensal fechado | HTML estático + D3 ou Observable Plot + CSS de impressão |
| Investor update | Astro 7 + MDX + D3 ou ECharts + PDF via Playwright |
| Marketing performance diária | React ou Vue + ECharts, Plotly ou ApexCharts 7 + APIs |
| Growth self-service | Looker, Power BI ou Tableau embutido com camada narrativa |
| MMM e incrementalidade | Python ou R + Meridian ou Robyn + Plotly ou Vega + export HTML |
| Geomarketing | deck.gl 9.3 + MapLibre v6 + Kepler.gl |
| SaaS B2B analytics | React ou Svelte + BI headless (Cube + dbt) + visx ou D3 |
| Relatório offline seguro | HTML único + DuckDB-Wasm ou SQLite Wasm + dados locais |
| Portal C-level recorrente | Next.js 16 ou Astro + camada semântica + autenticação e RLS |
| Relatório com prova de conformidade | Typst 0.15 (PDF/UA-1 e PDF/A-2a no mesmo arquivo) |
| Editor colaborativo de fluxograma | React ou Solid + JointJS ou GoJS + Konva ou PixiJS + Yjs + WASM cirúrgico |
| Planilha embutida no produto | Univer (ou Fortune-sheet em migração de Luckysheet) |
Escolha a linha pelo cenário do relatório; a onda do visual mira essa stack.
Fonte: Manual de referência Recursos de frontend moderno, edição setembro de 2026, seção 26.
Dentro de uma onda, dois agentes trabalham juntos desde que cada um tenha a própria pasta e a própria lista de arquivos. O git worktree (um comando do próprio git que cria uma segunda pasta de trabalho ligada ao mesmo repositório) faz a pasta. Cada uma fica no seu ramo e as duas dividem o mesmo histórico, sem duplicar código.
Pasta separada evita a sobrescrita; o escopo disjunto (a lista de arquivos que é só de um agente) evita o conflito na hora de juntar. Se dois agentes citam o mesmo arquivo, o recorte foi mal feito, mesmo com pastas diferentes. Quem precisa de algo fora do próprio escopo relata o que falta, em vez de editar por conta própria.
Escreva um pedido único com a onda zero embutida: descreva o site atual, fixe o teto de tempo e de peso e diga onde a medição entra. Peça as cinco ondas na ordem, com o seu aprovado entre uma e a próxima.
Para dividir uma onda entre dois agentes, crie uma pasta irmã por ramo com o git worktree. Dê a cada agente sua lista de arquivos e incorpore um ramo de cada vez ao final.
Guia prático: teste A/B do topo da landing page com Vercel Flags
Teste A/B mostra duas versões da mesma página a públicos sorteados e compara o resultado. Feito por script no navegador, ele troca o conteúdo depois que a página aparece, e a Vercel registra que isso piora LCP e CLS justamente na página testada. Com uma flag avaliada no servidor, cada visitante recebe a versão dele já pronta.
Flag é a chave que liga ou desliga um trecho da página sem nova publicação. A documentação do Vercel Flags, atualizada em 15 de setembro de 2026, cobre o ciclo inteiro pelo terminal: criar a flag com as variantes, definir no código com o Flags SDK, enviar o valor ao Web Analytics, dividir o tráfego no painel e arquivar ao final. A integração com o Web Analytics está em beta, em todos os planos.
O portão verify e a reversão de um clique, vistos acima, continuam sendo a rede de proteção: a variante nova só entra no ar depois de passar por eles.

Ver como texto
Painel de demonstração do Vercel Flags. À esquerda, o menu com Overview, Flags, Drafts, Segments, Entities, SDK Keys e Archive, e os provedores do marketplace. No centro, a busca, as abas Production, Preview e Development e a lista de flags de exemplo, cada uma com o nome e o valor atual, como summer-sale em true.
Responsável por aquisição de uma plataforma de cursos online, com tráfego pago para a página de matrícula
Educação online, matrícula por formulário
Dor
O time discutia há um mês se o topo devia abrir com o preço ou com o depoimento de um aluno. Cada troca era feita na página inteira, e ninguém sabia separar o efeito do topo do efeito da semana.
Solução
Ela escreveu a hipótese e a métrica antes de começar, criou uma flag com duas variantes e pediu ao agente as duas versões do topo no mesmo componente. Conferiu as duas na prévia e dividiu o tráfego de produção ao meio.
Resultado do exemplo
As duas versões rodaram no mesmo período, com o evento de matrícula iniciada separado por variante. A decisão ficou marcada para a data combinada, e a flag foi arquivada em seguida.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Teste A/B no servidor, da hipótese ao arquivamento da flag
Oito passos, com os comandos da documentação. Um teste, uma variável, uma métrica e uma data de decisão escritas antes.
Passo 1: Escreva hipótese, métrica e data antes do código
Uma frase: trocar o topo de preço para depoimento aumenta os envios do formulário. Defina o evento que decide, o tamanho mínimo de amostra e o dia de ler.
Deu certo quando: O documento do teste existe antes da flag e diz o que acontece com cada resultado.
Erro comum: Testar título, imagem e botão juntos e não saber qual deles mudou o número.
Passo 2: Crie a flag com as duas variantes
vercel flags create hero-campanha --kind string --variant control="Topo atual" --variant treatment="Topo com depoimento". Antes, rode vercel link e vercel env pull para a credencial local.
Deu certo quando: A flag aparece na seção Flags do projeto, com as duas variantes.
Erro comum: Criar uma flag por variação e acabar com combinações que ninguém planejou.
Passo 3: Defina a flag no código com o Flags SDK
npm i flags @flags-sdk/vercel. No arquivo flags.ts, a função flag recebe a chave e o vercelAdapter. No componente de servidor da página, o valor escolhe qual topo renderizar.
Deu certo quando: A página devolve o topo certo já no HTML, sem troca visível depois do carregamento.
Erro comum: Decidir a variante num efeito do navegador e criar o salto de layout que o teste deveria evitar.
Passo 4: Envie o valor da flag ao Web Analytics
Coloque o componente FlagValues, de flags/react, no layout raiz. No envio aceito do formulário, registre o evento com track, do pacote @vercel/analytics, e a opção flags com a chave do teste.
Deu certo quando: No Web Analytics, visitas e eventos aparecem separados por variante.
Erro comum: Medir só visualização de página e decidir sem o evento que representa a conversão.
Passo 5: Confira as duas variantes na prévia
vercel deploy e, em seguida, vercel flags set hero-campanha --environment preview --variant treatment. Repita com control. Peça os prints de celular e computador de cada uma.
Deu certo quando: As duas versões passam no verify, abrem na URL de prévia e enviam o formulário.
Erro comum: Publicar a variante nova sem nunca tê-la visto no celular.
Passo 6: Divida o tráfego de produção no painel
vercel flags open hero-campanha abre a flag. Configure a regra que divide o tráfego entre control e treatment e publique com vercel deploy --prod.
Deu certo quando: A mesma pessoa vê sempre a mesma versão, e as duas recebem tráfego no mesmo período.
Erro comum: Rodar uma versão numa semana e outra na seguinte, comparando campanhas e feriados diferentes.
Passo 7: Leia só na data combinada
Compare o evento de conversão por variante no Web Analytics, com a amostra mínima atingida. Diferença pequena com pouca visita é ruído.
Deu certo quando: A decisão sai do documento do teste: manter, trocar ou repetir com mais tráfego.
Erro comum: Espiar todo dia e encerrar no primeiro dia em que a variante preferida aparece na frente.
Passo 8: Remova a flag do código e arquive
Deixe só o topo vencedor no componente e rode vercel flags archive hero-campanha --yes. Se a versão vencedora der problema, a reversão de um clique continua disponível.
Deu certo quando: O código volta a ter um caminho só e a lista de flags não guarda teste encerrado.
Erro comum: Deixar a flag viva por meses e carregar duas versões do topo que ninguém mais mantém.
No fim você tem: Um teste A/B decidido no servidor, com conversão medida por variante, uma decisão datada e a flag arquivada ao final.
Guia prático: piloto pequeno, refazer só o que mudou e checklist antes de publicar
O curso de edição de vídeo estudado em 07/10/2026 trabalha com três hábitos que servem igual a uma página. O primeiro é o piloto: vídeo acima de 5 minutos começa pelos 3 primeiros, e o longo, por 60 a 90 segundos em resolução menor. No caso real, os 3 minutos viraram 48 segundos editados e, só depois de aprovados, o método foi aplicado ao resto. A regra do material: erro no piloto custa minutos; no final, horas.
O segundo é refazer só o que mudou. O vídeo longo é montado por capítulos, e a revisão manda renderizar só os capítulos alterados. Na página, o equivalente é corrigir uma seção sem mexer nas outras e conferir só o que a mudança tocou.
O terceiro é o checklist antes de publicar. A skill do curso tem 10 itens antes de declarar pronto, e o roteiro de publicação no YouTube tem 9, abrindo com uma frase que vale para qualquer entrega: o agente edita, mas quem assina é você. O arquivo final tem nome que o identifica, e não há dúvida sobre qual versão sobe.
Checklist antes de publicar a página [NOME DA PÁGINA]
[ ] Abri a página inteira no celular (390 px) e no computador, do topo ao rodapé.
[ ] Todo número, nome, logo e depoimento na tela foi dito ou aprovado por mim.
[ ] Telefone, WhatsApp e e-mail levam ao contato certo; testei um de cada.
[ ] Nenhum link vazio, nenhum texto de exemplo, nenhum registro profissional fictício.
[ ] O formulário ou o botão de contato funciona no endereço de produção.
[ ] Título e descrição da página estão em português e falam do que ela oferece.
[ ] Com movimento reduzido ligado, tudo aparece parado e legível.
[ ] O comando de verificação passou e a pré-visualização é a mesma versão que vai ao ar.
[ ] Existe a página, o material ou o cupom que a página promete.
[ ] Sei qual versão anterior volta se algo der errado.Do piloto à publicação sem retrabalho
Cinco passos para a próxima página que você publicar.
Passo 1: Faça o piloto de uma seção
Peça só o topo com o design system completo: cores, fontes, botão e movimento. Abra no celular e no computador e aprove antes de pedir o resto.
Deu certo quando: O topo aprovado vira o padrão que as outras seções copiam.
Erro comum: Pedir a página inteira de uma vez e corrigir o mesmo erro em oito seções.
Passo 2: Junte as correções numa lista só
Revise a seção inteira antes de pedir mudanças e mande todas juntas, uma por linha, com o lugar e o que quer ver. O agente refaz uma vez em vez de cinco.
Deu certo quando: Cada rodada de ajuste sai de uma única mensagem.
Erro comum: Mandar uma correção por mensagem e ver a terceira desfazer a primeira.
Passo 3: Peça para refazer só o que mudou
Ao corrigir, diga quais seções podem ser tocadas e quais ficam como estão. Peça a lista de arquivos alterados para conferir que nada fora do pedido mudou.
Deu certo quando: A lista de arquivos alterados bate com as seções do pedido.
Erro comum: Aceitar uma correção de texto que também mudou o espaçamento de outra seção.
Passo 4: Passe o checklist do bloco acima
Ajuste os dez itens ao seu negócio e guarde o arquivo no projeto. Marque cada item olhando a página, não a conversa.
Deu certo quando: Os dez itens estão marcados, com a data, antes de publicar.
Erro comum: Marcar o checklist de memória, sem abrir a página no celular.
Passo 5: Identifique a versão que sobe
Anote o endereço da pré-visualização aprovada e o código da versão. A versão publicada é essa, e não uma refeita depois da aprovação.
Deu certo quando: Você sabe dizer qual versão está no ar e qual volta se for preciso.
Erro comum: Aprovar uma pré-visualização e publicar outra que o agente gerou depois.
No fim você tem: Uma página aprovada em piloto, corrigida em rodadas únicas e publicada com checklist marcado e versão identificada.
Guia prático: portões que seguram a publicação, da proposta ao tráfego real
A aula montou o comando verify e a esteira do GitHub Actions. Depois do merge ainda há três momentos em que a versão nova pode parar: antes de o build começar, antes de ir para o domínio e enquanto recebe só uma fração das visitas. Você sai com asserções do Lighthouse CI que reprovam, uma linha de base que só desce e a liberação gradual da Vercel para a campanha grande.
Funções, casos de uso e aplicações
Funções
| Função ou recurso | O que faz | Quando usar | Referência |
|---|---|---|---|
| Asserções do Lighthouse CI (error e warn) | error reprova a esteira; warn só avisa. minScore vale para nota, maxNumericValue para tempo | Nota de acessibilidade, CLS e LCP que não podem piorar | Lighthouse CI, documentação de configuração |
| aggregationMethod | Junta várias rodadas pela mediana, pela mais otimista, pela mais pessimista ou pela rodada mais típica | Sempre que rodar mais de uma vez, para a variação do laboratório não decidir sozinha | Lighthouse CI |
| assertMatrix | Aplica regras diferentes por padrão de endereço | Home leve com teto estrito e página de curso pesada com teto próprio | Lighthouse CI |
| Ignored Build Step | Comando que sai com 0 para cancelar o build e 1 para seguir; o build cancelado conta na cota da Vercel | Commit que só muda documentação | Vercel, página atualizada em 21/09/2026 |
| Deployment Checks | Segura o deploy de produção fora do domínio até as checagens do GitHub Actions passarem | Quando o merge vai direto ao ar e o teste de ponta a ponta roda depois | Vercel, página atualizada em 11/08/2026 |
| Rolling Releases | Manda uma fração das visitas (por exemplo, 5%) para a versão nova e compara métricas com a anterior | Lançamento de campanha grande; o plano Pro inclui o recurso em um só projeto | Vercel, página atualizada em 15/09/2026 |
| Linha de base que só desce | Aceita a dívida antiga registrada e reprova só quando piora | Projeto com acervo antigo que não passa no limite novo | Portal, scripts/gate-peso-visual.mjs |
Casos de uso
Head de growth de uma edtech de cursos preparatórios em São Paulo
Educação
Dor
Na Black Friday, uma versão nova da página de matrícula subiu com o botão de pagamento fora da tela no celular e ficou no ar até alguém reclamar.
Solução
Ligou Deployment Checks com o teste de ponta a ponta do GitHub Actions e Rolling Releases em duas etapas, 10% e depois 100%, com Skew Protection para o navegador e o servidor da mesma versão conversarem.
Resultado do exemplo
O que observar: na aba de Observability, Speed Insights e taxa de erro da versão nova contra a anterior durante a etapa de 10%, antes de avançar.
Custo estimado no exemplo: Rolling Releases exige plano Pro ou Enterprise da Vercel.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Desenvolvedora de uma agência de marketing em Belém que mantém 40 landing pages de clientes
Marketing digital
Dor
Um teto único de desempenho reprovava metade das páginas antigas no primeiro dia, e o time desligou o portão.
Solução
Gravou a nota atual de cada página num arquivo de linha de base, com o portão reprovando só queda abaixo dela, e regras por endereço com assertMatrix.
Resultado do exemplo
O que observar: o portão fica ligado, e a linha de base de cada página só desce de mês a mês.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Na prática
Este portal usa os três momentos. Antes do build, vercel.json aponta o ignoreCommand para scripts/should-build.sh, que analisa primeiro os arquivos alterados e só depois o prefixo do commit, e cancela build de produção já superado por um commit mais novo. Na esteira, .github/workflows/ci-and-deploy.yml roda node scripts/gate-peso-visual.mjs --verificar-baseline, que lê scripts/peso-visual-baseline.json: curso novo cumpre o limite inteiro, e o acervo publicado só pode melhorar. O lighthouserc.json reprova acessibilidade, SEO e boas práticas abaixo de 90 e só avisa em desempenho.
"assert": {
"assertions": {
"categories:accessibility": ["error", { "minScore": 0.9 }],
"categories:performance": ["warn", { "minScore": 0.6 }],
"categories:best-practices": ["error", { "minScore": 0.9 }],
"categories:seo": ["error", { "minScore": 0.9 }],
"largest-contentful-paint": ["error", { "maxNumericValue": 4000 }],
"cumulative-layout-shift": ["error", { "maxNumericValue": 0.1 }],
"total-blocking-time": ["warn", { "maxNumericValue": 600 }]
}
}{
"ci": {
"collect": { "url": ["http://localhost:3000/", "http://localhost:3000/inscricao"], "numberOfRuns": 3 },
"assert": {
"assertMatrix": [
{
"matchingUrlPattern": ".*/$",
"assertions": {
"categories:accessibility": ["error", { "minScore": 0.95, "aggregationMethod": "median-run" }],
"largest-contentful-paint": ["error", { "maxNumericValue": 2500, "aggregationMethod": "median" }],
"cumulative-layout-shift": ["error", { "maxNumericValue": 0.1, "aggregationMethod": "median" }]
}
},
{
"matchingUrlPattern": ".*/inscricao$",
"assertions": {
"categories:accessibility": ["error", { "minScore": 0.95, "aggregationMethod": "median-run" }],
"largest-contentful-paint": ["warn", { "maxNumericValue": 3500, "aggregationMethod": "median" }]
}
}
]
}
}
}Do merge ao tráfego real, com três paradas
Passo 1: Corte o build que não precisa existir
Um Ignored Build Step que olha os arquivos alterados antes do prefixo do commit. Lembre que o build cancelado ainda conta na cota da Vercel.
Erro comum: Cancelar pelo prefixo chore: e deixar de publicar um arquivo de dados que o site serve.
Passo 2: Reprove o que não pode piorar
Acessibilidade, CLS e LCP como error no Lighthouse CI, com três rodadas e mediana. Desempenho geral pode começar como warn.
Deu certo quando: Uma proposta que empurra o botão para baixo reprova antes do merge.
Passo 3: Dívida antiga congelada numa linha de base
Grave a nota atual de cada página e deixe o portão reprovar só a queda. A linha desce quando alguém melhora.
Passo 4: Segure o deploy até o teste passar
Marque o job de ponta a ponta como Deployment Check. O deploy de produção fica pronto, mas fora do domínio até o check passar.
Passo 5: Na campanha grande, libere aos poucos
Rolling Releases com Skew Protection, compare as métricas da fração nova e avance ou volte com Instant Rollback.
Deu certo quando: A decisão de avançar sai de números das duas versões lado a lado.
No fim você tem: O defeito para no portão certo, e a versão nova enfrenta poucas visitas antes de enfrentar todas.
Armadilhas
Portões de publicação: o que evitar e o que pedir
Evitar
Coluna a evitar
- Teto absoluto que o site nunca atingiu e vira alarme diário
- Uma rodada só do Lighthouse decidindo a aprovação
- Cancelar build só pelo prefixo do commit
- vercel promote para iniciar a liberação gradual na esteira
- Liberação gradual sem Skew Protection
Recomendado
Coluna recomendada
- Linha de base por página que só desce
- Três rodadas com mediana
- Arquivos alterados decidem primeiro; prefixo por último
- vercel rolling-release start e complete
- Skew Protection ligada junto com Rolling Releases
O que mudou de agosto a outubro de 2026
O Playwright, ferramenta de teste de ponta a ponta citada no capítulo, lançou a versão 1.64 em 07/10/2026. Ela passou a testar as ferramentas que uma página oferece a agentes de IA pelo WebMCP, ainda experimental, e a gravar vídeo do teste com taxa de quadros escolhida. Para quem aprova, o vídeo do teste vira prova anexada à entrega, que qualquer pessoa assiste.

Ver como texto
Página Performing an Instant Rollback on a Deployment da documentação da Vercel. O texto diz que a reversão instantânea volta rapidamente a uma publicação anterior em produção e lista cuidados: a configuração da versão restaurada pode estar desatualizada, mudanças em variáveis de ambiente não entram na versão revertida e tarefas agendadas voltam às definições daquela publicação. No fim, informa que planos Pro e Enterprise revertem para qualquer publicação anterior em produção e o plano Hobby só para a imediatamente anterior.

Ver como texto
Página Rollbacks da documentação do Cloudflare Workers, atualizada em 15 de julho de 2026. O texto diz que é possível voltar a uma versão anterior pelo Wrangler ou pelo painel, que a reversão cria uma nova publicação ativa em todas as rotas e domínios, e que vale tanto para publicação de versão única quanto para publicação dividida entre duas versões, que volta com 100% do tráfego na versão escolhida.

Ver como texto
Página Installation da documentação do Playwright. O texto apresenta o Playwright Test como ferramenta de teste de ponta a ponta para aplicações web, com execução de testes, verificações, isolamento e paralelismo, compatível com Chromium, WebKit e Firefox em Windows, Linux e macOS, e com emulação de celular para Chrome no Android e Safari no iPhone.
Reversão nas duas plataformas citadas no curso
Vercel, reversão instantânea
Coluna a evitar
- Volta pelo painel ou pela linha de comando
- Plano Hobby: só a publicação imediatamente anterior
- Pro e Enterprise: qualquer publicação anterior em produção
- Variável de ambiente alterada depois não volta junto
Cloudflare Workers, rollback
Coluna recomendada
- Volta pelo painel ou pelo comando wrangler rollback
- Cria uma publicação nova com a versão escolhida
- Funciona também em publicação dividida entre duas versões
- Fica no histórico como qualquer outra publicação
Faça agora: ensaie a volta antes de precisar dela
Faça com o time técnico, num ambiente de teste ou de prévia, nunca direto em produção.
Passo 1: Pergunte onde o site é publicado e em qual plano.
Deu certo quando: Uma resposta como "Vercel, plano Pro" ou "Cloudflare Workers".
Passo 2: Peça para ver a lista das últimas publicações no painel.
Deu certo quando: Uma lista com data, autor e descrição de cada versão.
Passo 3: No ambiente de teste, cronometre uma reversão para a versão anterior.
Deu certo quando: Você tem um tempo medido em minutos, do pedido ao site de volta.
Erro comum: Descobrir na hora da crise que só uma pessoa tem permissão para reverter.
Passo 4: Registre quem pode acionar a reversão e o que não volta junto, como variáveis alteradas.
Deu certo quando: Uma ficha de uma página no manual de incidentes.
No fim você tem: Um procedimento de reversão testado, com tempo medido e dois responsáveis nomeados.
Antes de aprovar uma publicação
Caminho de volta
0/3Prova
0/2Aplicar os recursos ao projeto
| Fronteira | Exemplo | Ferramenta possível |
|---|---|---|
| Função | Cálculo com entrada conhecida | Vitest |
| Componente | Ação pelo nome acessível | Testing Library |
| Navegador | Fluxo inteiro | Playwright |
| Pessoa | Entender e concluir tarefa | Revisão manual |
Escolher o teste pela falha que ele encontra evita repetir verificações sem aumentar a confiança no comportamento entregue.

Ver como texto
Dona de padaria, tranquila no fim do expediente, olha um notebook com uma esteira de quatro etapas conferidas e um botão de voltar à versão anterior.
Seu caderno neste capítulo
Abrir o caderno completoSelecione um trecho do capítulo para destacar ou anotar. Nos vídeos e áudios, use Anotar este momento. No teclado, selecione com Shift e as setas e use Alt+Shift+D para destacar ou Alt+Shift+N para anotar.
Salvo neste navegador. Entre na sua conta para levar o caderno a outros aparelhos.
Entre na sua conta para compartilhar o que aprendeu e convidar alguém para estudar com você.
Conexões deste capítulo
Veja o que estudar antes e para onde seguir depois, explore os conceitos e compare abordagens em outros cursos. Sugestões marcadas como “sugerido pelo grafo” vêm dos assuntos em comum, não do índice do curso.
Estude antes
- CursoClaude Code: do zero à prática
- Como uma mudança chega ao clientesugerido pelo grafoApresenta o conceito “Vercel”, usado em “Planejar a modernização e publicar com reversão”.
- Agent Skills e SKILL.md: instruções reutilizáveissugerido pelo grafoApresenta o conceito “Skill (Agent Skill)”, usado em “Planejar a modernização e publicar com reversão”.
- Sete termos para entender uma mudança no GitHubsugerido pelo grafoApresenta o conceito “Merge”, usado em “Planejar a modernização e publicar com reversão”.
Conceitos deste capítulo
O mesmo assunto em outros cursos
- SEO programáticoApêndice: medir velocidade e capacidade da plataformaExaminar conexões de Apêndice: medir velocidade e capacidade da plataforma
- Node.js: JavaScript no ServidorNext.js: organizar as páginas de um siteExaminar conexões de Next.js: organizar as páginas de um site
- Software e IA para executivosOnde a tela é montada: no servidor ou no celularExaminar conexões de Onde a tela é montada: no servidor ou no celular
- MCP e Chrome: agentes de IA no navegadorComo entregar uma operação que outra pessoa consegue manterExaminar conexões de Como entregar uma operação que outra pessoa consegue manter
Terminou a leitura?
Você está aqui: capítulo 24 de 35
0 de 35 concluídos
- Próximo · Capítulo 25 de 35 · 38 minConstruir o projeto final, medir a cara de IA e revisarLer o capítulo 25 sem concluir
Marque como concluído para o capítulo contar no seu painel e no certificado.
- Anterior · Capítulo 23 de 35 · 34 minValidar desempenho, autenticação e segurançaVoltar para o capítulo 23
Leve uma ideia para a prática
Escolha uma atividade no painel e volte a este curso quando quiser.
Atividades e evolução ficam reunidas no painel da sua conta.
Laboratórios ao vivo deste curso
Cada laboratório monta a biblioteca real dentro da aula, com controles para você mexer e o código do exemplo para copiar. O texto de reserva descreve a demonstração para quem lê sem JavaScript. O link abre o capítulo já no ponto do laboratório.
Base UI
Prenda o foco num diálogo sem escrever o comportamento
Abra a janela Agendar visita, percorra os campos com Tab, feche com Esc e acompanhe no painel onde o foco está e para onde ele volta.
Pacote
Abrir no capítuloConstruir componentes, usar o registro e publicar o catálogo@base-ui/reactLucide e Iconify
Mantenha uma família de ícones coerente e nomeie cada botão
Mude tamanho, traço e cor da barra, veja o símbolo do Iconify acompanhar o Lucide e rode a auditoria de nomes acessíveis.
Pacote
Abrir no capítuloProjetar uma linguagem de ícones e ilustraçãolucide-react, @iconify/reactMotion
Testar os três sinais que autorizam o terceiro degrau
Reproduza a entrada em sequência, aperte o botão com mola e arraste o cartão; ajuste rigidez e amortecimento e veja o que muda.
Pacote
Abrir no capítuloProjetar movimento, assinatura e narrativas por rolagemmotionVidstack
Ver o que separa um player de um vídeo cru
Dê o play, troque a velocidade e ligue a legenda; o painel ao lado mostra o estado que o player publica e que a etiqueta crua esconde.
Pacote
Abrir no capítuloProjetar movimento, assinatura e narrativas por rolagem@vidstack/reactcmdk
Achar um destino entre quarenta digitando três letras
Abra a paleta, digite fat e escolha um item só pelo teclado; o painel embaixo conta o que o filtro deixou passar e quanto tempo levou.
Pacote
Abrir no capítuloConstruir formulários e estados de interaçãocmdknumber-flow
Animar indicadores que mudam ao vivo com formato pt-BR
Veja três indicadores fictícios rolarem a cada troca e compare com o número em texto puro. Pause, reinicie e observe o separador de milhar.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisão@number-flow/reactApache ECharts
Medir o custo de desenhar 200 mil pontos com o ECharts
Troque o tipo de gráfico e o volume de pontos, leia o tempo de desenho e alterne o eixo em zero. Mude o tema do site e veja as cores refazerem.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisãoechartsApache ECharts
Painel grande com visões coordenadas
Clique num canal para filtrar todas as visões, troque a densidade entre 6, 9 e 12 visões, alterne tema e movimento e abra a tela cheia.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisãoechartssharp e svgo
Escolher a variante certa da imagem e conferir o teto de 150 KB
Arraste a largura da tela simulada, troque a densidade entre 1x e 2x e veja qual arquivo o navegador escolhe, quanto ele pesa e se cabe no orçamento.
Pacote
Abrir no capítuloValidar desempenho, autenticação e segurançasharp, svgoReact Flow (xyflow)
Disparar um pedido e ver o orquestrador distribuir, conferir e responder
Alterne paralelo e sequencial, ligue e desligue a verificação e use a medição real; observe o tempo de parede em cada combinação.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robô@xyflow/reactGSAP, Web Workers e number-flow
Dividir mil tarefas entre trabalhadores reais e correr três ritmos de geração
Execute com um trabalhador, depois com quatro e oito, e compare o tempo; em seguida percorra a corrida e separe a espera inicial do ritmo.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robôgsap, @number-flow/reactThree.js com React Three Fiber, drei, Rapier e XR
Carregar o braço robótico, ver a física trabalhar e entrar na cena com o visor
Carregue a cena pelo botão, inicie o ciclo, mostre os ângulos das juntas, troque a câmera e a velocidade; com visor, entre em realidade virtual.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robôthree, @react-three/fiber, @react-three/drei, @react-three/rapier, @react-three/xrMotion
Ver quatro agentes em raias trocando mensagens e a revisão devolvendo um trecho
Reproduza os 60 s de modelo, percorra o tempo pelo controle e esconda as mensagens para comparar a leitura; repare no tempo de parede contra a soma.
Pacote
Abrir no capítuloEspecificar, medir e produzir as cenas da máquinamotionMediaRecorder, Canvas 2D e Long Animation Frames (plataforma)
Medir o quadro da cena e gravar seis segundos dela em vídeo
Suba as partículas, force um bloqueio de 300 ms e leia o medidor; depois grave seis segundos, veja o codec escolhido e baixe o arquivo.
Pacote
Abrir no capítuloEspecificar, medir e produzir as cenas da máquinasem pacotesigma.js, graphology com ForceAtlas2 e cosmos.gl
Ver o grafo real do curso e um grafo de milhares de nós se organizarem em aglomerados
Rode o layout no grafo real, passe o mouse pelos nós e busque uma entidade; troque para 20 mil nós e leia o medidor; depois carregue o modo massivo na placa de vídeo.
Pacote
Abrir no capítuloAnimar um grafo de conhecimento amplo em movimentosigma, graphology, graphology-layout-forceatlas2, graphology-generators, @cosmos.gl/graph
Capítulos vizinhos em Frontends com Vibecoding
- 22Auditar acessibilidade e contraste nos dois temas
- 23Validar desempenho, autenticação e segurança
- 24Planejar a modernização e publicar com reversão
- 25Construir o projeto final, medir a cara de IA e revisar
- 26Comparar modelos e interpretar benchmarks