Frontends com Vibecoding · Capítulo 3 de 30 · 17 min
Escolher a stack e projetar suas dependências
Você sai com uma entrega que integra tipo de página, atualização, equipe e custo da troca.
Este capítulo faz parte do curso gratuito Frontends com Vibecoding. Para marcar como concluído e salvar o progresso, abra este capítulo na página do curso.
Trocar de base depois de vinte telas prontas reescreve o site inteiro. Conteúdo que se lê pede Astro, aplicativo que se opera pede Next.js e arquivo que abre sozinho pede HTML puro.
A base é o framework, a fundação pronta do site, como a de uma casa. Ela fica decidida antes do primeiro comando, com o motivo por escrito e o custo de uma troca futura já calculado.
Cinco perguntas decidem a base em meia hora. Tela que reage o tempo todo, com filtro e clique, descarta o HTML puro; página que só se lê descarta o painel completo do Next.js.
A página precisa aparecer no Google e ser citada por assistente de IA, ou precisa abrir de um arquivo sem servidor. Quem cuida dela daqui a um ano, com qual tecnologia, e quanto JavaScript o celular do cliente aguenta sem travar completam o critério.
Astro entrega HTML pronto e só manda JavaScript ao navegador nos pedaços marcados, chamados de ilhas, como a vitrine com uma única TV ligada. Da linha 6 vieram coleções de conteúdo ao vivo, API de fontes nativa, política de segurança de conteúdo embutida e Cloudflare Workers de primeira classe.
A versão estável em 8 de setembro de 2026 é a 7.3.2, publicada naquele mesmo dia, então reconfira o número antes de fixá-lo no projeto. É a escolha para blog, documentação, site institucional, microsite e relatório estático.
O erro típico é marcar toda ilha para carregar de imediato: o site vira um site comum de React e descarta o motivo de ter escolhido o Astro. O catálogo de uma escola, que só lista curso, turma e formulário de matrícula, é o caso limpo. Sem nada que mude a cada minuto, o Next.js entregaria build, servidor e manutenção que ninguém pediu.
Next.js monta a página com login, painel e dado que muda a cada minuto. A linha 16.3 usa o Turbopack por padrão em desenvolvimento e build, gasta até 90% menos memória em sessão longa e aceita TypeScript 7 na checagem de tipos.
A referência reproduzível em setembro de 2026 é a 16.3.4, de 31 de agosto de 2026, que reativou a otimização de imagem AVIF quebrada na 16.3.3. O erro típico é escrever "use client" em todo arquivo, mandando o componente para o navegador.
Por baixo roda a linha React 19.2, estável na 19.2.8 desde 21 de julho de 2026, com o React Compiler 1.0 estável desde outubro de 2025. O compilador aplica sozinho as otimizações que antes exigiam useMemo e useCallback, hoje exceção. A falha CVE-2025-55182 atinge as versões 19.0.0 a 19.2.2 e pede correção nesta semana.
As outras bases entram por exceção. Entre os três full-stack React, a regra é a migração de origem do time. Quem vem de Remix ou de Create React App segue no React Router v7. Quem quer tipagem máxima olha o TanStack Start, com suporte beta ao Solid 2.0 desde abril de 2026. Quem começa do zero fica no Next.js.
Svelte tem a linha 3 em candidata a lançamento desde agosto de 2026; a 2.x do SvelteKit segue em produção. HTMX fica na 2.0.10, porque a 4.0 em beta quebra atributos, cabeçalhos e eventos, e Alpine.js 3.15 segue estável. Vue, SolidStart, Qwik, Preact e Lit não tiveram major no trimestre, e o Nuxt segue sem confirmação.
Tipo de página e base recomendada em setembro de 2026
| 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 puro com ES Modules | Abre de um arquivo, sem servidor |
| Time em Vue, Nuxt, SolidStart, Qwik ou Preact | A versão que o time já domina | Sem major no trimestre; Nuxt sem confirmação |
| 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 (abandonar uma tecnologia já construída) é a pergunta que ninguém faz antes de escolher. As três bases montam a página de jeitos que não se traduzem. No Astro você decide ilha por ilha o que paga JavaScript; no Next.js, qual componente roda no servidor; no Svelte, o dado é buscado ao lado da tela.
Trocar de base depois de vinte telas prontas reescreve onde o dado é buscado, onde o estado mora e qual arquivo manda em cada rota. Uma proposta de troca sem o número de telas reescritas por escrito é uma proposta incompleta.
Quando conteúdo e painel convivem no mesmo negócio, use os dois: Astro no site público e Next.js no painel atrás do login. Os dois importam o mesmo arquivo de tokens (cor e tipografia guardadas com nome), e é a divisão que a Apple faz entre marketing, produto e loja.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Crie o projeto já com TypeScript ativado e um arquivo de tokens antes da primeira tela: trocar a cor da marca inteira passa a exigir uma linha só desse arquivo. Publique a primeira página numa URL pública e confira que o React instalado está acima da versão 19.2.2 antes de aprovar qualquer tela seguinte.
A peça certa em cada camada e a árvore de dependências
Um pacote instalado sem checar pode carregar nome inventado por um modelo de IA e virar porta de ataque. Cada camada do frontend tem uma peça padrão, e o que ela arrasta junto se confere antes de instalar.
Quem aprova o que um agente sugere instalar decide a peça de cada camada e o plano B sem biblioteca. Agente é o assistente de IA que escreve código, e a árvore de dependências fica conferida antes do primeiro comando.
Seis camadas já têm dona: Next.js para aplicação e Astro para conteúdo, a única camada em que trocar é reescrever. O estilo é Tailwind v4; vanilla-extract entra quando um token (valor de estilo guardado com nome) errado precisa quebrar o build. O componente é shadcn sobre Radix, copiado para o repositório com teclado e leitor de tela resolvidos.
O ícone é Lucide, e só ele: misturar famílias faz a interface parecer montada por pessoas diferentes. O movimento começa em CSS puro e sobe para Motion só para herdar a velocidade do gesto de puxar uma gaveta. O gráfico é Recharts v3, em SVG com acessibilidade ligada por padrão; painel operacional com milhões de pontos pede ECharts 6.1.
A regra de uma peça por necessidade se vê na loja que ia instalar três pacotes só para um aviso de pedido confirmado, quando o Sonner sozinho já resolvia.
Acima delas ficam as utilidades de interface, cada uma com um degrau abaixo que resolve sem instalar nada. O nuqs guarda aba, filtro e paginação na URL, e não em useState. O teste é copiar o link e abrir em outra aba: se a tela volta diferente, o estado mora no lugar errado.
A partir de algumas centenas de itens entra o TanStack Virtual; abaixo disso, lista comum. O cmdk, o Sonner e o Vaul entregam paleta de comandos, aviso de canto e gaveta inferior, o padrão de fato em stack shadcn.
O Floating UI posiciona menu, dica e balão, e essa camada encolheu. O anchor positioning do CSS entrou em Baseline Newly Available em 13 de janeiro de 2026, com o Firefox 147 fechando o conjunto, e resolve nativamente parte da geometria de dica e menu. Enquanto o seu painel de visitas mostrar navegador anterior, mantenha a biblioteca e garanta uma posição que funcione quando as declarações forem ignoradas.
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 KPI (o indicador que a diretoria acompanha) que muda ao vivo. Existe para React, Vue, Svelte e vanilla, com porta para React Native desde abril.
Para tour de produto, o driver.js tem cerca de 5 kB em TypeScript e resolve o onboarding simples. O Shepherd.js cobre lógica condicional rica com licença dupla AGPL ou comercial, e AGPL obriga a abrir o seu código ou pagar. O auto-animate anima a mudança de uma lista com uma linha.
O dado que vem do servidor e o estado que só existe na tela moram em lugares diferentes. TanStack Query ou SWR guardam a cópia do servidor em cache (a cópia local que evita pedir o mesmo dado de novo) e cuidam de revalidar.
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 RxJS só quando existem fluxos de eventos combinados. Para histórico analítico que sobrevive ao fechar da aba, IndexedDB com stale-while-revalidate mostra o dado de ontem e atualiza por trás.
Tempo real começa em SSE (o servidor empurra e o navegador só ouve, como um rádio). WebSocket só entra em conversa intensa nos dois sentidos e com controle de fila, porque não existe backpressure nativo: sem fila, o cliente lento acumula mensagens até travar.
Para escala, três siglas: BFF (um servidor intermediário por tela), CQRS (leitura separada da escrita) e CDC (captura de cada mudança no banco). Métricas, traces e logs entram via OpenTelemetry desde o primeiro sprint. WebAssembly é acelerador cirúrgico, para layout de grafo, decimação de série e teste de acerto de clique, e nunca substituto do frontend.
Cada necessidade, a peça padrão e o plano B sem biblioteca
| 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 |
Toda biblioteca instalada traz outras dentro dela, e a árvore final fica maior que a lista que você escolheu. Rode npm ls --all e veja o tamanho real antes de confiar. Duas contas saem daí: a de licença, porque uma peça permissiva pode arrastar outra restritiva, e a de segurança, porque cada peça é uma porta.
Um modelo de IA inventa nome de pacote com total confiança, e existe uma classe de ataque que registra justamente esses nomes esperando quem instale sem checar. Antes de aceitar qualquer sugestão, abra a página do pacote no registro npm e confirme que ele existe, com data do último lançamento. Rode npm audit de tempos em tempos.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Antes de aceitar qualquer pacote sugerido, rode npm ls --all para ver a árvore inteira e npm audit para a auditoria. Abra a página de cada um no registro npm e confirme lançamento recente e licença de uso comercial.
Pergunte primeiro se o navegador já resolve. O anchor positioning e a transição de vista no mesmo documento chegaram a Baseline em 2026 e em outubro de 2025, e tiram bibliotecas da lista sem instalar nada.
Todos os capítulos de Frontends com Vibecoding
- 01Projetar o briefing, o repertório da marca e o custo de manter
- 02Dirigir o prompt e avaliar a entrega do agente
- 03Escolher a stack e projetar suas dependências
- 04Investigar uma stack e priorizar atualizações
- 05Construir a identidade com tokens, CSS moderno e DESIGN.md
- 06Construir componentes, usar o registro e publicar o catálogo
- 07Projetar uma linguagem de ícones e ilustração
- 08Projetar menus, popovers e modais acessíveis
- 09Adaptar o layout ao celular e ao contêiner
- 10Projetar movimento, assinatura e narrativas por rolagem
- 11Preparar imagens, ícones e vídeo para a web
- 12Construir profundidade e dirigir a montagem de vídeo
- 13Construir formulários e estados de interação
- 14Publicar conteúdo encontrável em vários idiomas
- 15Projetar gráficos e painéis pela decisão
- 16Dimensionar tabelas e organizar o cálculo das métricas
- 17Escolher mapas, diagramas e cenas espaciais
- 18Comparar direção visual em Stripe e Apple
- 19Avaliar busca, conversão e padrões de comércio
- 20Auditar acessibilidade e contraste nos dois temas
- 21Validar desempenho, autenticação e segurança
- 22Planejar a modernização e publicar com reversão
- 23Construir o projeto final, medir a cara de IA e revisar
- 24Comparar modelos e interpretar benchmarks
- 25Calcular custo por tarefa e definir governança
- 26Supervisionar o modelo que opera o computador
- 27Configurar ambiente, skills e o contêiner de contexto
- 28Aplicar direção de arte, UX writing e padrões de código
- 29Construir um aplicativo instalável e resiliente
- 30Produzir apresentações e PDF com critérios de entrega