Frontends com Vibecoding · Capítulo 5 de 35 · 39 min
Escolher a stack e projetar suas dependências
Você escolhe a base do projeto pelo tipo de página, escreve o motivo, confere a árvore de dependências e calcula quanto custaria trocar de stack mais tarde.
Este capítulo faz parte do curso gratuito Frontends com Vibecoding.
Escolher a base do site é decidir também o que a empresa vai manter. Antes do primeiro comando, descreva a tarefa da página, os dados de que ela depende e quem cuidará dela. Astro, Next.js e HTML puro atendem a necessidades diferentes, mas o tipo de página sozinho não determina a escolha. Num site existente, compare o custo de melhorar a base atual com o de migrar, incluindo testes e integrações.
Ao fim, você sabe perguntar ao time ou ao fornecedor por que a base escolhida serve ao tipo de página e quanto custa mantê-la em dia. Tempo de leitura: cerca de 39 minutos, e o levantamento sobre o site da empresa, mais dez.
A base é o framework, ou seja, a estrutura pronta que já resolve o trabalho repetido de todo site, como a planta e a fundação de uma casa. Você a escolhe pelo que a página faz, com o motivo por escrito.

Ver como texto
Três pessoas em volta de uma mesa comparam duas maquetes de fundação, uma leve e outra robusta, ao lado de uma planta baixa e de um notebook com blocos de cor.
Três coisas decidem a base: o que a página faz, quem vai cuidar dela e por quanto tempo. Um site escrito em HTML puro com JavaScript nativo já entrega filtro e clique. O framework compensa quando entram estado (o que a tela lembra, como o carrinho cheio), rotas (os endereços internos) e componentes (peças de tela reaproveitadas em vários lugares).
Responda então duas perguntas antes de decidir. A página precisa aparecer no Google e ser citada por assistente de IA, ou precisa abrir direto de um arquivo, sem servidor? E quanto JavaScript o celular do seu cliente aguenta sem travar? Quem mantém o site daqui a um ano fecha o critério.
Astro manda ao navegador uma página já montada em HTML e só liga JavaScript nos pedaços que você marcar, chamados de ilhas. Ligar uma ilha é hidratar, ou seja, dar movimento ao pedaço parado, como acender uma única televisão na vitrine em vez de todas.
Isso decide dinheiro porque cada trecho de JavaScript atrasa a abertura no celular, e página lenta perde a visita antes de ser lida. Por isso o Astro é a escolha para blog, documentação, site institucional, microsite e relatório estático, onde a pessoa lê e quase não opera nada.
O erro típico é marcar toda ilha para hidratar de imediato. O site volta a pesar como qualquer outro e você perde o motivo de ter escolhido o Astro. O catálogo de uma escola, que só lista curso, turma e matrícula, é o caso limpo: ali uma base de aplicativo cobraria servidor e manutenção que ninguém pediu.
Ver como texto
Astro Islands: hidratação parcial de uma única ilha interativa numa página estática
Next.js combina páginas de conteúdo com funções de aplicativo, como login, painéis e dados atualizados. Ele pode preparar partes da tela no servidor e enviar outras para o navegador. O resultado depende de como a equipe organiza os dados, o carregamento e o cache, que guarda resultados para reutilizá-los.
Os exemplos abaixo começaram na linha 16.3. O Next.js 16.4 foi anunciado em 6 de outubro de 2026; o guia mais adiante mostra o que mudou. Turbopack é o empacotador, o programa que reúne os arquivos necessários para executar a aplicação. Uma novidade de versão precisa ser avaliada no projeto antes da adoção.
O React fornece os componentes da interface. Para conferir segurança, peça o nome e a versão exatos dos pacotes instalados e compare-os com o comunicado oficial. O alerta de React Server Components atualizado em 26 de janeiro de 2026, por exemplo, corrigiu os pacotes afetados nas versões 19.0.4, 19.1.5 e 19.2.4; estar acima de 19.2.2 não bastava. O Next.js recebeu outro comunicado em 14 de outubro. Uma correção responde às falhas daquele aviso, sem garantir proteção contra problemas futuros.
As outras bases entram por um motivo prático: a equipe já as domina. Quem vem de um projeto React antigo segue no React Router. Quem já escreve em Svelte fica no SvelteKit, e quem tem time de Angular continua nele. Trocar de base para acompanhar novidade custa meses e não muda nada que o cliente veja.
Duas advertências de versão valem o espaço. Fique no HTMX 2.0.10, porque a linha 4.0 ainda em beta, ou seja, em teste aberto antes do lançamento, quebra o que já está no ar. A regra geral vem daí: versão marcada como beta ou como candidata a lançamento não entra em site de cliente, por melhor que pareça.
| Tipo de página | Base recomendada | O que decide |
|---|---|---|
| Blog, documentação, site institucional, microsite | Astro 7 (7.3.2, 8 set. 2026) | HTML pronto; JavaScript só nas ilhas; Fonts API e CSP embutida |
| Relatório estático de acabamento alto | Astro 7 com MDX | Live Content Collections e publicação em Cloudflare Workers |
| Login, painel, carrinho, dado que muda a cada minuto | Next.js 16.3.4 sobre React 19.2.8 | Turbopack padrão; até 90% menos RAM em sessão longa; TypeScript 7 |
| Aplicação React vinda de Remix ou Create React App | React Router v7 | Caminho evolutivo; escolha pela migração de origem |
| Aplicação React com tipagem máxima | TanStack Start | Suporte beta ao Solid 2.0 desde abril de 2026 |
| Time que já domina Svelte | SvelteKit 2.x | Linha 3 em RC desde agosto de 2026; RC fica fora de produção |
| Formulário pesado em time Angular | Angular 22 | Signal Forms estáveis, interoperáveis com Reactive Forms |
| Componente de design system para vários frameworks | Lit | Web Components; sem major no trimestre |
| Página servida pelo servidor com pouco JavaScript | HTMX 2.0.10 e Alpine.js 3.15 | HTMX 4.0 em beta quebra atributos, cabeçalhos e eventos |
| Relatório único, auditável e offline | HTML e CSS com script clássico incorporado | Abre por arquivo quando código, dados e mídia são locais, sem importações remotas |
| Time em Vue, Nuxt, SolidStart, Qwik ou Preact | A versão que o time já domina | Sem major no trimestre; Nuxt ainda sem anúncio |
| Site público e painel com login no mesmo negócio | Astro no público e Next.js no painel | Mesmo arquivo de tokens dos dois lados |
Custo de saída é o preço de abandonar uma tecnologia já construída, e quase ninguém calcula esse preço antes de escolher. As três bases montam a página de jeitos que não se traduzem entre si, então a conta não é trocar uma peça, e sim refazer o encaixe inteiro.
No Astro você decide ilha por ilha o que paga JavaScript. No Next.js você decide qual pedaço roda no servidor. Trocar depois de vinte telas prontas refaz onde o dado é buscado, onde o estado mora e qual arquivo manda em cada endereço. Proposta de troca sem o número de telas reescritas é proposta incompleta.
Quando site público e painel com login convivem, compare manter um projeto só com separar dois. Astro no público e Next.js no painel funciona bem, mas dobra a operação que alguém precisa cuidar. Se dividir, compartilhe o mesmo arquivo de tokens, que são cor e tipografia guardadas com nome, e escreva quem mantém cada publicação.
Crie o projeto já com TypeScript ligado e um arquivo de tokens antes da primeira tela. A partir daí, trocar a cor da marca no site inteiro passa a exigir uma linha só desse arquivo. Publique a primeira página num endereço público e confira no arquivo de dependências e no lockfile os pacotes e versões instalados. Compare-os com os avisos oficiais de React e do framework, aplique as correções indicadas e confirme a versão publicada.
Saiba o que instalar em cada parte, e o que vem junto
A base do projeto está escolhida, e cada camada acima dela ainda pede uma peça padrão, um degrau sem biblioteca e a árvore de dependências conferida.
Um pacote instalado sem conferência pode carregar nome inventado pela IA e abrir uma porta de ataque no seu site. Pacote, ou biblioteca, é um pedaço de programa pronto que alguém publicou e você passa a usar dentro do seu.
Cada camada da tela tem uma peça padrão, e o que ela arrasta junto se confere antes de instalar. Agente é o assistente de IA que escreve o código. Quem aprova o que ele sugere decide a peça de cada camada e também o plano B sem instalar nada.
Ver como texto
Cenário ilustrativo da árvore de dependências. Você escolhe um pacote; ele traz três dependências, e cada uma traz outras duas. Entram dez peças no total, e cada peça tem uma licença e é uma porta. Uma delas, destacada, tem licença restritiva ou nome inventado.
Separe as decisões por camada. A base organiza a aplicação; o estilo define sua aparência; os componentes repetem comportamentos; ícones e gráficos ajudam a comunicar. Next.js, Astro, Tailwind, shadcn/ui, Lucide, Recharts e ECharts aparecem aqui como exemplos. Instale só o que o seu projeto pedir.
Para cada camada, peça uma justificativa ligada à tarefa e ao que a equipe consegue manter. Reutilizar uma solução já dominada pode ser melhor do que trocar de ferramenta. Quando um componente for adaptado, confira novamente foco, teclado e leitura da tela: uma base acessível não dispensa testar o resultado.
Acima delas ficam as utilidades de tela, e cada uma tem um degrau abaixo que resolve sem instalar nada. O nuqs guarda aba, filtro e paginação no próprio endereço da página. O teste é copiar o link e abrir em outra aba: se a tela volta diferente, o estado mora no lugar errado.
Lista comum serve até algumas centenas de itens; acima disso entra o TanStack Virtual, que desenha só as linhas visíveis. O cmdk, o Sonner e o Vaul entregam busca por comando, aviso de canto e gaveta inferior, e são o padrão de fato nesse conjunto de peças.
O Floating UI posiciona menu, dica e balão, e essa camada encolheu porque o próprio navegador passou a fazer parte do trabalho. Mantenha a biblioteca enquanto o seu painel de visitas mostrar navegador antigo, e garanta uma posição que continue legível quando o recurso novo for ignorado.
Ver como texto
Antes de instalar uma biblioteca
Arvore de decisao com quatro saidas. Primeiro pergunta-se se o navegador ja resolve de fabrica: se sim, nao instale nada, e um fornecedor a menos. Se nao, confira se o pacote existe de verdade no registro npm: se nao existe, pare, porque modelos inventam nome de pacote e ha ataque que registra esses nomes. Se existe, confira a data do ultimo release e a licenca: sem conferir, a aposta entra no escuro. Conferido, instale e escreva o motivo num comentario ao lado do import, e rode npm audit de tempos em tempos.
Já o number-flow anima um número dígito a dígito na direção certa, como o contador da bomba de combustível. Ele serve ao indicador que a diretoria acompanha ao vivo, porque o olho percebe a mudança antes mesmo de ler o valor.
Para tour de produto, o driver.js é leve e resolve a apresentação simples da tela a quem chega. O Shepherd.js cobre caminhos com desvio, mas a licença dele obriga a abrir o seu código ou pagar, e isso se lê antes de instalar. O auto-animate anima uma lista que reordena com uma linha.
O dado que vem do servidor e o estado que só existe na tela moram em lugares diferentes. Confundir os dois origina boa parte das telas que mostram número errado. TanStack Query ou SWR guardam a cópia do servidor em cache, a cópia local que evita pedir o mesmo dado de novo.
Zustand ou Jotai cuidam do estado leve da tela com pouco código. Redux Toolkit entra quando cada mudança precisa ficar registrada para auditoria, e cobra mais escrita justamente por isso. Para histórico que precisa sobreviver ao fechar da aba, o navegador tem banco próprio: mostre o dado de ontem e atualize por trás.
Tempo real começa pelo modo mais simples, o SSE: o servidor empurra e o navegador só ouve, como um rádio ligado. Isso cobre aviso, contador e acompanhamento de pedido, que é quase tudo o que um negócio pequeno precisa mostrar ao vivo.
WebSocket é a conversa nos dois sentidos e só entra quando a tela também precisa falar o tempo todo. Ele cobra atenção porque não segura fila sozinho: sem controle, o cliente lento acumula mensagens até travar. WebAssembly é acelerador cirúrgico, usado num cálculo pesado específico e nunca como substituto do frontend inteiro.
| Necessidade | Peça padrão | Critério e plano B |
|---|---|---|
| Aba, filtro e paginação | nuqs | Estado na URL para o link compartilhado abrir igual; sem ele, o estado some ao recarregar |
| Lista longa | TanStack Virtual | A partir de algumas centenas de itens; abaixo, lista comum |
| Menu flutuante, dica e balão | Floating UI | Enquanto o público usa navegador anterior ao anchor positioning (Newly Available em 13 jan. 2026); depois, só CSS |
| Paleta de comandos, aviso e gaveta | cmdk, Sonner e Vaul | Padrão de fato em stack shadcn; um aviso só dispensa os três |
| KPI que muda ao vivo | number-flow | Dígito a dígito na direção certa; sem ele, troque o número sem animar |
| Tour de produto | driver.js (cerca de 5 kB) | Shepherd.js só com lógica condicional, atento à licença AGPL ou comercial |
| Lista que reordena | auto-animate | Uma linha; o degrau abaixo é a transição de vista do navegador |
| Dado do servidor em cache | TanStack Query ou SWR | Revalidação automática; sem eles, cada tela pede o mesmo dado de novo |
| Estado leve da tela | Zustand ou Jotai | Pouco código; Redux Toolkit quando cada mudança precisa de auditoria |
| Fluxos de eventos combinados | RxJS | Só com streams sofisticados; fora disso pesa sem retorno |
| Histórico que sobrevive à aba fechada | IndexedDB com stale-while-revalidate | Mostra o de ontem e atualiza por trás |
| Aviso do servidor em tempo real | SSE | WebSocket só em conversa intensa nos dois sentidos, com fila controlada |
| Cálculo pesado na tela | WebAssembly cirúrgico | Layout de grafo, decimação de série e hit testing; o frontend inteiro fica fora |
12 de 13 linhas
Toda biblioteca instalada traz outras dentro dela. A árvore final, que é a lista completa do que entrou junto, fica sempre maior que a lista que você escolheu. Rode npm ls --all e veja o tamanho real antes de confiar no que foi prometido.
Duas contas saem daí. A de licença: uma peça liberada pode arrastar outra restritiva e prender o seu código a condições que ninguém leu. A de segurança: cada peça é uma porta. Um modelo de IA inventa nome de pacote com confiança total, e existe ataque que registra esses nomes esperando quem instale sem olhar.
Antes de aceitar qualquer pacote sugerido, rode npm ls --all para ver a árvore inteira e npm audit para a lista de falhas conhecidas. Abra a página de cada um no registro npm e confirme duas coisas: lançamento recente e licença que permita uso comercial.
Pergunte antes de tudo isso, porém, se o navegador já resolve sozinho. Recursos que chegaram ao navegador nos últimos meses tiram bibliotecas inteiras da sua lista sem instalar nada, e essa é a economia mais barata que existe.
Guia prático: o que 51 sites profissionais usam de stack, e o que isso ensina
A pergunta "qual stack usar" tem resposta medida quando você olha o que gente que vende template escolheu. Nos 51 templates estudados em 07/10/2026, contando o package.json de cada um:
| Item | Templates | Leitura |
|---|---|---|
| Vite | 51 | Nenhum Next.js, nenhum Astro |
| React | 48 | 36 na versão 18 e 12 na 19; 3 sem React |
| TypeScript | 12 | Os outros 39 são JavaScript |
| Tailwind v4 | 12 | Pelo plugin do Vite |
| Tailwind v3 | 33 | Pelo PostCSS; 5 sem Tailwind no pacote |
| GSAP / Lenis | 11 / 9 | Movimento ligado à rolagem |
| iconify-icon / lucide-react | 34 / 18 | Ícone buscado na rede contra pacote local |
| ESLint | 20 | Nenhum template com teste |
Para página de marketing que é uma tela só, Vite com React resolve, e ninguém ali precisou de servidor. A conta muda quando a página tem várias rotas. Dos 51, 30 usam BrowserRouter, que cria endereços como /cardapio. Num host estático, quem abre esse endereço direto ou recarrega a página recebe erro 404, porque o servidor procura um arquivo que não existe. Nenhum dos 51 usa HashRouter, e o CLAUDE.md de todos promete subir em qualquer host sem configuração extra.
A segunda lição está no que vem junto. Os templates em TypeScript carregam um pacote de componentes pronto, e a página usa 12 dos 53. Escolha a stack pelo que a página faz e conte o que você vai manter, não só o que vai usar hoje.
Antes de publicar este projeto Vite, confira as rotas.
1. Liste as rotas do app e diga se ele usa BrowserRouter ou HashRouter.
2. Se for BrowserRouter, crie a regra de fallback para o host [Netlify | Vercel | Cloudflare Pages],
mandando todo endereço desconhecido para index.html com status 200.
No Netlify, a regra no arquivo public/_redirects é: /* /index.html 200
3. Rode o build e abra direto, numa aba nova, a rota [/rota-interna] na pré-visualização.
4. Liste dependências que nenhum arquivo importa e remova só depois do meu ok.
5. Diga o tamanho do JavaScript comprimido antes e depois.Escolher e limpar a stack de uma página de marketing
Cinco passos. Valem para template baixado e para projeto que o agente criou do zero.
Passo 1: Descreva o que a página faz antes de escolher
Uma tela só, várias páginas de conteúdo, área logada ou loja. Página única de campanha cabe em Vite; conteúdo que precisa aparecer na busca e várias rotas pedem renderização no servidor ou geração estática.
Deu certo quando: A escolha de stack vem acompanhada de uma frase sobre o que a página faz.
Erro comum: Escolher pela stack que o template trouxe e não pelo que o negócio precisa.
Passo 2: Confira o roteador e o host
Se o projeto tem rotas com BrowserRouter, crie a regra de fallback do host antes do primeiro deploy, com o pedido do bloco acima.
Deu certo quando: Abrir direto e recarregar qualquer rota mostra a página, não um 404.
Erro comum: Testar só navegando pelo menu, que funciona, e descobrir o erro quando o link chega pelo WhatsApp.
Passo 3: Corte o que vem junto e não é usado
Peça a lista de dependências sem importação e de componentes de exemplo. Um driver de banco num site sem servidor, uma biblioteca de gráficos numa página sem gráfico: tudo isso sai.
Deu certo quando: Cada pacote do package.json tem um arquivo que o importa.
Erro comum: Apagar componente que é importado de forma indireta; rode o build depois de cada remoção.
Passo 4: Prefira o pacote local ao que busca na rede
Ícone que vem de uma API externa em tempo de execução depende de outro servidor a cada visita. Pacote local, importado só no ícone que você usa, entra no build e não falha.
Deu certo quando: A página carrega ícones e fontes sem chamada a servidor de terceiros.
Erro comum: Trocar a biblioteca de ícones no meio do projeto e misturar duas famílias de traço.
Passo 5: Acrescente o teste que nenhum template trouxe
Um teste do Playwright que abre a página, confere o título principal e abre uma rota interna direto já pega os dois erros mais comuns desta lista.
Deu certo quando: O teste roda antes de cada publicação e passa.
Erro comum: Confiar no lint como se fosse teste; ele não abre a página.
No fim você tem: Uma stack escolhida pelo que a página faz, sem dependência morta e com as rotas funcionando no host estático.
Guia prático: o que a stack de agosto a outubro de 2026 mudou para quem constrói com agente
A aula escolhe entre Astro e Next.js pelo que a página faz. De agosto a outubro, as duas bases ganharam funções que mudam o custo de manter: o Next.js passou a escrever no AGENTS.md (o arquivo de regras que o agente lê) o caminho da documentação da versão instalada, recomendou Cache Components para todo app e passou a reprovar o build quando um conteúdo dinâmico entra por acidente numa rota estática; o Astro agora reconstrói só as páginas que mudaram. Você sai daqui sabendo qual chave ligar em cada base e como provar que ela funcionou.
Funções, casos de uso e aplicações
Funções
| Função ou recurso | O que faz | Quando usar | Desde |
|---|---|---|---|
| AGENTS.md versionado (Next.js 16.3) | O next dev escreve e mantém um bloco no AGENTS.md que manda o agente ler a documentação da versão instalada, dentro de node_modules | Todo projeto Next com agente; o bloco volta sozinho se for apagado | 03/08/2026 |
| Ajudante instant() do @next/playwright | Teste que afirma o que aparece na hora depois do clique, antes da rede responder; reprova se uma mudança deixar a navegação lenta | Catálogo, área logada e painel com navegação frequente | 03/08/2026 |
| Cache Components recomendado para todo app (Next.js 16.4) | Liga cacheComponents e partialPrefetching: o app marca com 'use cache' o que pode ser guardado; vem ligado em projeto novo do create-next-app | Projeto novo; projeto existente migra com as skills de adoção | 06/10/2026 |
| ensureStatic (Next.js 16.4) | Derruba o build se um componente dinâmico entrar numa rota que deveria ser estática ('navigation', 'prefetch' ou 'shell') | Landing, blog e loja, onde renderizar por visita custa servidor | 06/10/2026 |
| next upgrade --agent e experimental.agentUpgrade | Prepara guia de migração, codemods e verificação para o agente aplicar; avisa no dev e no build quando há atualização de segurança | Manter o projeto em dia sem lembrar de conferir; a política padrão é 'security' | 06/10/2026 |
| Build estático incremental (Astro 7.2, experimental) | Pula páginas pré-renderizadas cujo código e conteúdo não mudaram, pela cacheKey devolvida em getStaticPaths() | Blog e documentação com centenas de páginas | 06/08/2026 |
| astro preview --background e --ignore-lock | A prévia roda em segundo plano, com status, logs e stop; a 7.3 permite várias prévias ao mesmo tempo | Agente que sobe a prévia, testa e derruba sem prender o terminal | 06/08/2026 e 03/09/2026 |
Funções marcadas como experimentais mudam de nome ou de comportamento entre versões: registre a versão no README do projeto.
Casos de uso
Coordenador de conteúdo de uma faculdade particular em Salvador, com 400 páginas de curso em Astro
Educação
Dor
Cada correção de vírgula numa página de curso disparava o build das 400 páginas, e a publicação do vestibular demorava a sair.
Solução
Ligou o build incremental do Astro 7.2 numa cópia do projeto, devolvendo entry.digest como cacheKey nas páginas da coleção de cursos, e comparou o tempo do build com e sem a chave.
Resultado do exemplo
O que observar: o tempo do segundo build depois de editar uma página só, e se a página editada sai atualizada. Como a função é experimental, mantenha a cópia por duas semanas antes de levar ao projeto principal.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Desenvolvedora de uma loja de cosméticos de São Paulo em Next.js
Marketing digital e comércio
Dor
Um selo de "olá, cliente" entrou no cabeçalho compartilhado e transformou as páginas de produto, antes estáticas, em páginas renderizadas a cada visita, com a conta do servidor subindo.
Solução
Pôs export const ensureStatic = 'navigation' no layout das páginas de produto e moveu o selo para uma ilha do cliente. O build passou a reprovar qualquer componente dinâmico naquela parte.
Resultado do exemplo
O que observar: no painel do host, as invocações de função das páginas de produto na semana seguinte; e se o build reprova quando alguém tenta repetir o erro.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Na prática
Este portal roda Next.js 16.3 e o AGENTS.md da raiz já traz o bloco que o next dev escreve, entre <!-- BEGIN:nextjs-agent-rules --> e <!-- END:nextjs-agent-rules -->, mandando ler node_modules/next/dist/docs/ antes de escrever código. A segunda decisão de stack está em next.config.ts: o cache de disco do build, que o Next.js 16.3 liga por padrão, foi desligado só na Vercel depois de uma medição. Em 120 builds, o cache passou de 1,5 GB, acima do limite do host, e um build sim, outro não, começava do zero.
/** Cache persistente do Turbopack no `next build` (ver experimental abaixo). */
function turbopackCacheDeBuild(): boolean {
const forcado = process.env.NEXT_TURBOPACK_BUILD_CACHE;
if (forcado === "1") return true;
if (forcado === "0") return false;
return !process.env.VERCEL;
}
const nextConfig: NextConfig = {
experimental: {
// Cache persistente do Turbopack no build: DESLIGADO na Vercel.
// Diagnóstico de 27/09/2026 (120 builds de 25 a 27/09): o cache passou de
// 1,5 GB, acima do teto de cache de build da Vercel.
turbopackFileSystemCacheForBuild: turbopackCacheDeBuild(),
},
};Adotar uma função nova da stack sem surpresa no host
Passo 1: Leia a nota de versão na fonte e anote a data
Separe o que é estável do que é experimental. No Next.js 16.4, Cache Components é recomendado; lazy dynamic imports seguem experimentais.
Deu certo quando: Cada chave tem versão, data e estado anotados no README.
Erro comum: Ligar a chave vista num vídeo sem saber de que versão ela é.
Passo 2: Ligue numa branch e meça antes e depois
Tempo de build, tamanho do cache, peso do JavaScript por rota e invocações de função no host.
Deu certo quando: Você tem dois números para comparar.
Erro comum: Medir só na sua máquina e descobrir o limite do host no deploy.
Passo 3: Prenda o comportamento num teste ou numa regra de build
ensureStatic para a rota que deve ser estática, instant() para a navegação que deve ser imediata.
Deu certo quando: Uma mudança futura que quebre a decisão reprova sozinha.
Erro comum: Confiar que ninguém vai pôr um componente dinâmico no cabeçalho.
Passo 4: Escreva o motivo ao lado da configuração
Como no next.config.ts do portal: o que mediu, quando e o que fazer para testar o outro lado.
Deu certo quando: Quem chega depois entende por que o padrão foi desligado.
Erro comum: Um false solto que o próximo agente troca por true.
No fim você tem: Funções novas adotadas com número medido, regra automática e o motivo escrito no próprio arquivo.
Armadilhas
Padrão do framework não é padrão do seu host
Toda chave que muda build ou cache se mede no host de produção antes de virar regra do projeto.
- Cache de build ligado por padrão pode passar do limite do host
- Não apague o bloco do AGENTS.md: o next dev recria e o agente perde a referência
- Função experimental entra com data de revisão anotada
- ensureStatic reprova o build: avise a equipe antes de ligar
- Astro incremental só pula páginas que devolvem cacheKey
O teste: Dois builds seguidos no host: o segundo reaproveitou o cache?
alexandrecaramaschi.com/educacao/frontends-com-vibecoding
O que mudou no Next.js e no React, agosto a outubro de 2026
O Next.js 16.4, anunciado em 6 de outubro, passou a recomendar Cache Components e a habilitá-lo nas opções padrão de novos projetos. Esse modelo permite definir quais resultados serão guardados para reutilização. O anúncio também prevê que ele será o padrão no Next.js 17; isso é uma mudança anunciada, não uma versão já lançada. Num projeto existente, peça à equipe um teste de compatibilidade e um plano de migração antes de alterar a configuração.

Ver como texto
Post do blog do Next.js de 06/10/2026 chamado Next.js 16.4. O texto diz que as versões 16.x trouxeram um modelo novo de programação, que dá carregamento inicial rápido mesmo em página personalizada, navegação instantânea e cache opcional e declarativo, e que esse modelo, chamado Cache Components, será o padrão no Next.js 17.

Ver como texto
Post do blog do React de 09/09/2026 chamado React 19.3, da equipe do React. O texto diz que View Transitions e Fragment Refs, anunciados como experimentais no ano anterior, ficaram estáveis, e lista as novidades: View Transitions, Fragment Refs, browser, suporte a Trusted Types e Context em Server Components.

Ver como texto
Página inicial da documentação do Next.js com o seletor Using App Router, a indicação Latest v16.4.3, o menu Getting Started com Installation, Project Structure, Layouts and Pages, Caching e Image Optimization, e o texto What is Next.js?, que o define como um framework React para aplicações web completas.
Faça agora: descubra a base e a versão do site da empresa
Passo 1: Pergunte ao responsável técnico qual base o site usa e em que versão.
Deu certo quando: Uma resposta com nome e número, como "Next.js 16.4.1".
Passo 2: Compare o número com a versão mais recente na documentação oficial.
Deu certo quando: Você sabe quantas versões o site está atrás.
Erro comum: Aceitar "está atualizado" sem número.
Passo 3: Pergunte se a versão está em suporte ativo ou em manutenção, e até quando.
Deu certo quando: Uma data ou um prazo anotado.
Passo 4: Registre a próxima janela de atualização no calendário da equipe.
Deu certo quando: Um compromisso com dono e data.
No fim você tem: Uma linha no seu painel de gestão: base, versão, distância da mais recente e data da próxima atualização.
Aplicar os recursos ao projeto
Ver como texto
Quando o HTML fica pronto
Na geração estática, a preparação produz HTML antes do acesso. Na renderização por requisição, o servidor produz a resposta depois do pedido. Os dois caminhos chegam ao navegador.
Ver como texto
Composição e entrega são decisões distintas
Uma interface contém topo, lista e detalhe. A seleção na lista alimenta a região de detalhe. Organizar componentes não define sozinho onde ou quando o HTML será produzido.
Ver como texto
O mesmo contador que começa em 1, escrito em seis frameworks: useState no React, ref no Vue, $state no Svelte, signal no Angular, createSignal no Solid e useSignal no Qwik. Muda a escrita; a ideia de um valor que avisa a tela quando muda é a mesma.
| Base | Estrutura relacionada | Decisão adicional |
|---|---|---|
| React | Next.js | Rotas e modo de entrega |
| Vue | Nuxt | Rotas e modo de entrega |
| Svelte | SvelteKit | Rotas e modo de entrega |
| Angular | Convenções integradas | Adoção pela equipe |
Os pares mostram relações de ecossistema, sem afirmar que uma aplicação precisa obrigatoriamente usar o framework relacionado.
Ver como texto
Framework de aplicação sobre framework de interface: Next.js sobre React, Nuxt sobre Vue e SvelteKit sobre Svelte acrescentam rotas, carga de dados e publicação. Cada rota escolhe como publicar: gerar antes, numa pasta de arquivos para conteúdo conhecido, ou calcular no servidor a cada visita, para login e dado particular.
Ver como texto
Onde a página precisa responder
Uma página contém título, texto, imagem e um filtro. A região do filtro e seus resultados é destacada como área de interação, sem atribuir uma técnica exclusiva a qualquer framework.
Ver como texto
Dois jeitos de interatividade leve. No Alpine.js, o clique muda o estado declarado em x-data e a área abre no próprio navegador, sem rede. No htmx, o clique pede ao servidor, que devolve só um pedaço de HTML, e a página troca só aquele trecho; sem servidor vivo, nada acontece.
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
- Next.js: organizar as páginas de um sitesugerido pelo grafoApresenta o conceito “Next.js”, usado em “Escolher a stack e projetar suas dependências”.
- JavaScript: o que muda na página quando você clicasugerido pelo grafoApresenta o conceito “JavaScript”, usado em “Escolher a stack e projetar suas dependências”.
- CursoSíntese e didática com IAsugerido pelo grafoDepois de escolher a informação essencial e desenhar hierarquia, gráficos e fluxos compreensíveis, o aluno pode aplicar esses critérios às interfaces do curso de frontend. A ponte conecta clareza da mensagem, acessibilidade e decisões de apresentação.
Conceitos deste capítulo
O mesmo assunto em outros cursos
- 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
- 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
- SEO programáticoApêndice: decidir quando as páginas são geradasExaminar conexões de Apêndice: decidir quando as páginas são geradas
- API Design: REST, GraphQL e o contrato com o fornecedorQuando vale escolher GraphQL em vez de RESTExaminar conexões de Quando vale escolher GraphQL em vez de REST
Terminou a leitura?
Você está aqui: capítulo 5 de 35
0 de 35 concluídos
- Próximo · Capítulo 6 de 35 · 28 minInvestigar uma stack e priorizar atualizaçõesLer o capítulo 6 sem concluir
Marque como concluído para o capítulo contar no seu painel e no certificado.
- Anterior · Capítulo 4 de 35 · 27 minDirigir o prompt e avaliar a entrega do agenteVoltar para o capítulo 4
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
- 03Levar o repertório da marca para o briefing antes do prompt
- 04Dirigir o prompt e avaliar a entrega do agente
- 05Escolher a stack e projetar suas dependências
- 06Investigar uma stack e priorizar atualizações
- 07Construir a identidade com tokens, CSS moderno e DESIGN.md