Frontends com Vibecoding · Capítulo 31 de 35 · 24 min
Construir um aplicativo instalável e resiliente
O site vira aplicativo instalável, com cache por tipo de arquivo, banco local para editar sem rede e comportamento previsível quando a conexão cai.
Este capítulo faz parte do curso gratuito Frontends com Vibecoding.
Instalar o site como aplicativo e fazer o site funcionar sem rede são duas conquistas separadas, e quase todo pedido confunde as duas. O manifesto, que é o cartão de identidade do site, diz o nome, o ícone e o modo como a tela abre. Ele coloca o atalho na tela do celular e para por aí.
Quem decide isso é quem conversa com o agente, ou seja, o assistente de código que executa o pedido escrito. A ordem em que as peças entram, o que fica guardado no aparelho e os ajustes contra o botão cortado saem todos dessa primeira escolha.
Ao terminar, você decide se o site precisa virar aplicativo instalável e confere sozinho as duas conquistas separadas: instalar e funcionar sem internet. Tempo de leitura: cerca de 24 minutos, e o teste no celular, mais dez.
PWA quer dizer aplicativo web progressivo: o mesmo site que abre no navegador, com recursos que o aproximam de um aplicativo de loja. Ele exige publicação em endereço seguro, o HTTPS. Um arquivo aberto direto do disco não conta como publicação.
O service worker, que é um porteiro instalado entre a tela e a rede, guarda cópias das páginas e decide o que entregar quando o sinal cai. Ele funciona numa aba comum, sem instalação. Teste visitando conectado e reabrindo sem rede: quem chega pela primeira vez já sem sinal não vê nada, porque nada foi guardado ainda.
Ir para a loja de aplicativos só compensa com um de dois gatilhos. Ou o site precisa de câmera, sensores e biometria, ou a sua venda depende da vitrine da loja. Fora disso, instalar pela web mantém um código só para web, Android e iPhone, e publica correção em segundos, sem esperar a aprovação de terceiro.
Ver como texto
Duas colunas lado a lado. À esquerda, instalar: o manifesto, cartão de identidade do site com nome, ícone e modo de abrir, coloca o atalho na tela do celular e para por aí. À direita, funcionar sem rede: o service worker, porteiro entre a tela e a rede, guarda cópias das páginas e abre o site sem sinal a partir da segunda visita, porque na primeira nada foi guardado. Embaixo, a base comum: o site publicado em endereço seguro, com HTTPS.
A instalação não acontece do mesmo jeito nos dois sistemas, e isso muda o texto da sua tela. No Chrome para Android o próprio navegador oferece a instalação, e o site pode montar o convite dentro da página.
No iPhone e no iPad não existe convite automático. A pessoa precisa abrir o menu de compartilhamento e tocar em Adicionar à Tela de Início, então o site precisa ensinar isso por escrito.
A notificação, que é a mensagem que aparece na tela do celular sem o site estar aberto, segue a mesma regra. No iPhone e no iPad ela só chega depois que a pessoa adicionou o aplicativo à Tela de Início. Quem conta com aviso de pedido pronto precisa pedir essa instalação primeiro.
Cache é a cópia que o aparelho guarda para evitar uma nova busca. O Workbox oferece estratégias prontas, mas a escolha deve considerar a rota e a sensibilidade do dado.
Cache First consulta primeiro a cópia: costuma servir arquivos versionados, como fontes e ícones. Network First tenta a rede e pode entregar uma resposta guardada se a rede falhar; use-o somente onde essa resposta antiga for aceitável. Stale-While-Revalidate entrega a cópia enquanto busca uma atualização, também sob uma política explícita de validade.
Autenticação, pagamento e respostas sensíveis ficam fora do cache do service worker, salvo um projeto específico com controles documentados. NetworkOnly é uma opção para essas rotas; com a rede indisponível, a interface precisa explicar a impossibilidade de concluir a ação. Um preço exibido a partir de uma cópia precisa ter validade indicada e ser confirmado no servidor antes da compra.
Ver como texto
Três cartões, um por estratégia de cache do Workbox. Cache First serve fonte, ícone e imagem, que quase nunca mudam: aparece na hora, com o risco de mostrar versão antiga. Network First pode servir conteúdo público atualizável que tolere uma cópia quando a rede falha. Login e pagamento ficam fora desse cache. Stale-While-Revalidate pode servir conteúdo público com validade definida: entrega a cópia agora e busca a versão nova para a próxima visita.
O erro mais comum do service worker escrito por agente é aplicar uma estratégia só ao site inteiro. O segundo é guardar o arquivo pelo endereço: você publica a correção, o endereço continua igual, e o cliente segue vendo a tela de ontem. A saída é identificar o arquivo pelo conteúdo, porque conteúdo novo gera identificador novo.
Ver como texto
O percurso do pedido em cada estratégia de cache: da tela ao cache, do cache à rede, e em que ordem cada estratégia percorre esse caminho
Instalado, o site abre dentro da moldura do celular, e três ajustes de CSS separam um aplicativo de um site encolhido. A altura medida em vh ignora a barra de endereço e faz o bloco de abertura estourar; a unidade dvh acompanha a barra conforme ela some.
O recorte da câmera e a barra de gestos pedem dois passos na ordem. Primeiro escreva viewport-fit=cover na linha de configuração de tela; depois some o recuo que o sistema informa a um espaçamento mínimo seu no botão fixo. Sem o primeiro passo, o segundo devolve zero.
Falta o gesto de arrastar. A regra touch-action: pan-y deixa o carrossel deslizar de lado sem brigar com a rolagem, e overscroll-behavior: contain impede que a lista puxe a tela de trás. O botão cortado aparece no celular do cliente, nunca no seu, então teste num aparelho de verdade.
/* 1. altura que acompanha a barra do navegador */
.abertura { min-height: 100dvh; }
/* 2. área segura: exige viewport-fit=cover na meta de viewport
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> */
.barra-acao {
padding-bottom: max(16px, env(safe-area-inset-bottom));
}
/* 3. gestos: o carrossel arrasta de lado e a lista não vaza para a página */
.carrossel { touch-action: pan-y; }
.janela-lista { overscroll-behavior: contain; }Cache resolve ler sem rede; gravar sem rede é outro problema, e a resposta chama-se local-first. O dado nasce e mora no aparelho, e sobe para o servidor quando o sinal volta, como um caderno que se copia sozinho ao chegar na loja.
Ver como texto
Ciclo do local-first em quatro passos, em ziguezague. Um: sem sinal, o dado é gravado no aparelho. Dois: ele espera na fila do próprio aparelho. Três: o sinal volta e o dado sobe. Quatro: o servidor recebe. Embaixo, o CRDT junta a edição A e a edição B num documento só, sem perguntar qual venceu. Por último, a regra que separa as duas ideias: cache resolve ver sem rede, local-first resolve gravar sem rede.
O motor dessa ideia é o CRDT, uma estrutura que funde a edição de duas pessoas sem perguntar qual delas venceu. O Yjs é o mais usado e move editores conhecidos, então é a escolha para quem edita texto a quatro mãos.
Já o Automerge guarda o histórico de quem mudou o quê, e vale quando a auditoria pesa mais que o tempo real.
Quando o aplicativo tem tabelas e regra de negócio, ElectricSQL, Zero e TinyBase colocam um banco de dados dentro do aparelho e cuidam da sincronização. Já o relatório que abre sem rede pede o banco dentro do próprio navegador, e o SQLite Wasm é o padrão leve.
| Ferramenta | Escolha quando | Armadilha |
|---|---|---|
| Workbox | o site precisa abrir sem rede; service worker pronto com as três estratégias, em 54% dos sites mobile | uma estratégia só para o site inteiro |
| Yjs | edição em tempo real de texto ou quadro; CRDT com o maior ecossistema, cerca de 920 mil downloads semanais, motor de Notion, TipTap e BlockNote | tratar como banco: ele funde edições e não consulta tabela |
| Automerge | a auditoria de quem editou importa mais que o tempo real; histórico estilo Git | documento grande carrega o histórico inteiro |
| ElectricSQL, Zero, TinyBase | app com tabelas e regra de conflito; SQLite no aparelho com sincronização, Zero com mutators TypeScript, TinyBase como pacote único MIT | sincronizar tudo sem filtro de permissão por usuário |
| TanStack DB 0.6 | protótipo; segue em beta, rumo à v1 com SSR | levar a versão beta para produção |
| SQLite Wasm 3.53 | relatório offline com dados locais leves; cerca de 400 KB gzip | guardar só em memória e perder tudo ao fechar a aba |
| PGlite 0.5.8 | extensões e tipos do Postgres justificam o peso; Postgres 16 real em cerca de 3,3 MB | pagar 3,3 MB por uma tabela de contatos |
| DuckDB-Wasm | somar milhões de linhas dentro do relatório offline; análise colunar | contar com paridade com o núcleo nativo (base 1.5.4, Arrow 17) |
Cache resolve leitura sem rede; edição sem rede pede local-first, e relatório offline seguro pede o banco dentro do navegador.
O critério que separa os dois é simples: cache resolve ver, local-first resolve gravar. Numa distribuidora de bebidas, o vendedor que entra em bairro sem sinal consegue mostrar o catálogo de ontem com cache, mas só registra o pedido com local-first. A última caixa vendida duas vezes continua sendo decisão de regra de negócio no servidor.
Antes de pedir o service worker ao agente, escreva qual estratégia vale para cada tipo de arquivo. Cópia primeiro para fonte e ícone, servidor primeiro para dados e pagamento, cópia com atualização por trás para o resto.
Depois publique uma correção pequena e recarregue a página no celular. Se o texto antigo continuar na tela, o cache está preso ao endereço, e não ao conteúdo, e é esse o ajuste a pedir em seguida.
Guia prático: o que uma tela de autoatendimento ensina ao app instalável
Totem de pedido em restaurante é o caso extremo de tela de toque: a pessoa está em pé, com pressa, sem teclado e sem paciência para errar. O template de totem estudado em 07/10/2026 cabe em duas telas e 205 linhas de código, e mostra os acertos e os tropeços que valem para qualquer app instalável.
Os acertos: a tela inicial inteira é o alvo de toque; a barra de ação ocupa de 140 a 160 px de altura; o botão de pagar fica fixo embaixo, perto do polegar, com cerca de 60 px de altura; o cartão encolhe a 95% no instante do toque, o que confirma o gesto sem esperar a rede; a altura usa a unidade que acompanha a barra do navegador; e o fluxo é curto: tocar, escolher categoria, escolher item, pagar.
Os tropeços: o código bloqueia o zoom, o que um totem pode fazer e um site público não deve, porque tira o recurso de quem enxerga pouco. Os rótulos das categorias têm 10 px. A tela inicial é um bloco clicável sem botão, que o teclado e o leitor de tela não alcançam. Os efeitos de passar o mouse não existem no toque. As imagens dos produtos vêm de dois serviços externos, então sem rede a vitrine some, e não há aviso de estado offline. O template ainda usa nome e logo de uma rede real de lanchonetes, o que não se publica com a marca de outro.
A WCAG 2.2 pede alvo de pelo menos 24 por 24 px; para dedo em pé, mire perto do dobro.
Levar o desenho de totem para o seu app instalável
Cinco passos para revisar uma tela de toque antes de publicar o app.
Passo 1: Conte os toques do fluxo principal
Escreva o caminho do pedido, do agendamento ou da compra, do primeiro toque à confirmação. Cada etapa que não decide nada sai ou vira padrão já marcado.
Deu certo quando: O fluxo principal cabe em até cinco toques, contados na tela real.
Erro comum: Pedir cadastro antes de mostrar o produto, como se a pessoa tivesse tempo de sobra.
Passo 2: Meça os alvos com o dedo, não com o mouse
No celular, toque cada botão com o polegar em pé. No inspetor, confira a caixa de cada alvo: nenhum abaixo de 24 px, e os principais perto de 48 px, com espaço entre vizinhos.
Deu certo quando: Nenhum toque errado no fluxo principal em três tentativas seguidas.
Erro comum: Confiar no rótulo de 10 px porque "o ícone é grande".
Passo 3: Responda ao toque antes da rede
O botão muda de estado no instante do toque: encolhe, escurece ou mostra o carregamento. Efeito de passar o mouse sai ou ganha equivalente no toque e no foco.
Deu certo quando: Todo toque tem resposta visual em menos de 100 ms, mesmo com a rede lenta.
Erro comum: Deixar o botão parado até o servidor responder e receber o segundo toque, que duplica o pedido.
Passo 4: Desenhe o estado sem rede
Imagens do catálogo ficam no próprio app, no cache. Sem conexão, a tela avisa em texto, mostra a hora da última atualização e desliga só o que depende da rede, como preço e pagamento.
Deu certo quando: Com o modo avião ligado, o catálogo aparece e o aviso diz o que está indisponível.
Erro comum: Puxar imagem de serviço externo e mostrar caixas vazias ao primeiro túnel.
Passo 5: Libere o zoom e o teclado no app público
Totem dedicado pode bloquear zoom; app que qualquer pessoa instala, não. Toda área clicável vira botão de verdade, alcançável por Tab e com nome para o leitor de tela.
Deu certo quando: O zoom de dois dedos funciona e o fluxo inteiro anda só pelo teclado.
Erro comum: Copiar a meta de viewport do template de totem para o app público.
No fim você tem: Um app instalável com fluxo curto, alvos do tamanho do dedo, resposta imediata ao toque e um estado offline que diz o que ainda funciona.
Sócio de uma rede de três açaiterias em Fortaleza que lança o pedido pelo celular para retirar no balcão
Alimentação, pedido antecipado
Dor
A primeira versão do app tinha seis etapas, botões pequenos de adicionais e fotos que sumiam quando o cliente estava no estacionamento sem sinal.
Solução
Ele pediu ao agente o fluxo de totem: tocar, escolher tamanho, adicionais em botões grandes, pagar. As fotos foram para o cache do app, e o aviso offline passou a dizer que o cardápio estava disponível e o pagamento voltaria com a conexão.
Resultado do exemplo
O pedido ficou em quatro toques, e o cardápio continuou visível sem sinal, com o pagamento claramente em espera.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Guia prático: botão de instalar nativo, rotas que dispensam o service worker e o manifesto deste portal
O convite para instalar deixou de depender de script próprio: o Chrome testa o elemento <install> e a função navigator.install(), e o Safari 27 passou a aceitar rotas estáticas no service worker. O guia mostra o que cada recurso faz, como o manifesto e o service worker deste portal resolvem atalhos, retomada e páginas sem rede, e o pedido que leva isso a um app de campanha.
Funções, casos de uso e aplicações
Funções
| Função ou recurso | O que faz | Quando usar | Desde |
|---|---|---|---|
| Elemento <install> | Botão de instalação desenhado pelo próprio navegador. O conteúdo escrito dentro dele aparece onde o elemento não existe. Exige id no manifesto | Página de campanha que quer o convite visível sem montar a lógica do beforeinstallprompt | 12/05/2026 (teste de origem, Chrome e Edge 148 a 153) |
| <install installurl> e manifestid | Instala um app de outra origem a partir da sua página; manifestid informa o id calculado quando o manifesto do outro app não declara um | Portal de um grupo que oferece os apps de cada marca numa página só | 12/05/2026 (teste de origem) |
| navigator.install() | A versão em JavaScript do convite: interface toda sua, mas exige um gesto da pessoa, como um toque | Quando o botão precisa seguir o desenho da marca | Chrome 156 beta (resumo de 02/10/2026) |
| Rotas estáticas do service worker (InstallEvent.addRoutes) | Regras declaradas na instalação mandam certos pedidos direto para a rede ou para um cache, sem acordar o service worker | Rotas que o service worker só deixaria passar, como API autenticada e envio de formulário | Chrome e Edge 123; Safari 27 em setembro de 2026 |
| sizes="auto" em imagem com carregamento adiado | O navegador calcula o tamanho da imagem pela largura do layout e escolhe o arquivo certo do srcset | Vitrine de produtos e lista de turmas dentro do app | Baseline recém-disponível com o Safari 27 (setembro de 2026) |
Teste de origem é o período em que um recurso experimental funciona em produção só para sites inscritos, com prazo de fim. Todo uso precisa de reserva para quem não tem o recurso.
Fonte: Chrome for Developers, blog do elemento install (12/05/2026); web.dev, New to the web platform in September (02/10/2026); MDN, InstallEvent.addRoutes
Casos de uso
Coordenador pedagógico de um cursinho pré-vestibular em Salvador
Educação, app de simulados
Dor
Os alunos não achavam o ícone de instalar na barra do navegador, e no iPhone ninguém sabia o caminho pelo menu de compartilhar.
Solução
A página do app ganhou o elemento <install> com o texto de reserva por dentro: no Chrome aparece o botão do navegador; nos demais, o passo a passo de Adicionar à Tela de Início. O manifesto recebeu id e atalhos para Simulado do dia e Minhas notas.
Resultado do exemplo
O que observar: em quatro semanas, quantas visitas chegam com utm_source=pwa no endereço de início e quantas pelos atalhos.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Gerente de produto digital de uma rede de academias em Goiânia
Marketing digital, app de agendamento de aula experimental
Dor
O service worker interceptava até o envio do formulário de agendamento, e no celular fraco o primeiro toque demorava a responder enquanto ele acordava.
Solução
As rotas de envio de formulário e de API de login passaram para regras estáticas com saída direta para a rede, e o service worker ficou só com páginas e imagens da vitrine.
Resultado do exemplo
O que observar: em 28 dias, o INP (tempo entre o toque e a próxima pintura da tela) dos aparelhos reais no botão de agendar, separado por navegador.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Na prática
O manifesto do portal, em public/manifest.json, já tem o que o elemento <install> exige: "id": "/". O endereço de início leva utm_source=pwa, então toda abertura pelo ícone aparece separada na medição. Três atalhos levam a Continuar de onde parei, Revisão do dia e Liga da semana, cada um com a própria campanha no endereço. O share_target faz o portal aparecer na lista de compartilhar do celular e manda o texto para a busca.
O service worker, em public/sw.js, conta a lição mais cara. Na versão 3, o HTML de /educacao vinha do cache enquanto o resto vinha da rede, e depois de cada publicação a página antiga pedia arquivos que já não existiam. A regra atual: toda página HTML é rede primeiro, /_next/static com rede fica com o navegador e as rotas sensíveis passam direto.
{
"id": "/",
"short_name": "Educação GEO",
"start_url": "/educacao?utm_source=pwa",
"scope": "/",
"display": "standalone",
"launch_handler": { "client_mode": ["navigate-existing", "auto"] },
"share_target": {
"action": "/busca",
"method": "GET",
"params": { "title": "title", "text": "q", "url": "url" }
},
"shortcuts": [
{
"name": "Continuar de onde parei",
"short_name": "Continuar",
"url": "/educacao/dashboard?retomar=1&utm_source=pwa&utm_medium=atalho&utm_campaign=continuar"
}
]
}// No sw.js, o fetch faz "return" sem responder para /api/admin e /api/auth.
// Com rotas estáticas, esses pedidos nem acordam o service worker.
self.addEventListener("install", (event) => {
if ("addRoutes" in event) {
event.addRoutes([
{ condition: { urlPattern: "/api/admin/*" }, source: "network" },
{ condition: { urlPattern: "/api/auth/*" }, source: "network" },
{ condition: { urlPattern: "/*", requestMethod: "post" }, source: "network" },
]);
}
// o restante da instalação continua igual (pré-cache e skipWaiting)
});Do manifesto ao convite que funciona em todo aparelho
Quatro passos, cada um com reserva para o navegador que ainda não tem o recurso.
Passo 1: Identidade fixa para o app
O id do manifesto diz ao navegador que é sempre o mesmo app, mesmo que o endereço de início mude. O <install> não funciona sem ele.
Deu certo quando: O painel Application do DevTools mostra o id calculado igual ao que você escreveu.
Erro comum: Trocar o start_url numa campanha e o celular tratar como um segundo app.
Passo 2: Meça a abertura pelo ícone
Parâmetro de campanha no start_url e em cada atalho separa quem abre pelo app de quem chega pelo anúncio.
Deu certo quando: O relatório mostra visitas com utm_source=pwa e o atalho de origem.
Erro comum: Medir só a instalação e não saber se a pessoa volta.
Passo 3: Botão e reserva oferecidos juntos
O texto dentro do <install> aparece onde o elemento não existe. No iPhone, ele explica o caminho pelo menu de compartilhar.
Deu certo quando: Chrome mostra o botão; Safari mostra as instruções, sem tela vazia.
Erro comum: Esconder o convite inteiro onde o recurso falta.
Passo 4: Tire do service worker o que ele só deixa passar
API autenticada e envio de formulário vão para regras estáticas onde addRoutes existe; no resto, o if do fetch continua fazendo o mesmo.
Deu certo quando: O envio do formulário funciona igual com e sem o recurso.
Erro comum: Mandar /_next/static direto para a rede e perder a cópia que serve sem sinal.
No fim você tem: Um app que se instala com um toque onde o navegador permite, ensina o caminho onde não permite e mede quem volta pelo ícone.
Armadilhas
Instalar e funcionar sem rede, sem surpresa depois da publicação
Evitar
evitar
- HTML servido do cache primeiro, que pede arquivos apagados na publicação seguinte
- Contar com o <install> em produção depois do fim do teste de origem
- Manifesto sem id e start_url trocado a cada campanha
- Regra estática que manda tudo para a rede e apaga o modo sem sinal
- Versão do cache escrita à mão em vários lugares
Recomendado
fazer
- Página HTML com rede primeiro e cópia só na falha
- Reserva escrita dentro do elemento e detecção por HTMLInstallElement
- id fixo no manifesto e campanha só nos parâmetros do endereço
- Rotas estáticas só para o que o service worker já deixava passar
- Uma constante de versão e limpeza dos caches antigos na ativação
O que mudou de agosto a outubro de 2026
Nada no trimestre muda o método. O Workbox, biblioteca do Google para guardar arquivos no aparelho, segue na versão 7.4.1, de maio de 2026, e o manifesto continua sendo um arquivo JSON simples. Use o tempo no teste prático: ele mostra em dez minutos se o aplicativo da empresa cumpre o que promete quando o sinal cai.

Ver como texto
Página Progressive Web Apps do web.dev, com o subtítulo Capabilities that enable app experiences, built and deployed on the web, e a lista de conteúdos dividida em introdução, como tornar o aplicativo instalável, como criar uma experiência de aplicativo e tópicos avançados, como diretrizes de experiência sem conexão e página de reserva para quando não há rede.

Ver como texto
Página Caching do curso de PWA do web.dev. O texto diz que o armazenamento em cache deixa o aplicativo menos dependente da rede e permite funcionar sem conexão, e mostra o suporte à Cache Storage API: Chrome 43, Edge 16, Firefox 41 e Safari 11.1. Uma nota explica que, num aplicativo de loja, ícone e arquivos são instalados em um passo, e num PWA o aparelho pode guardar arquivos já na primeira visita, antes de qualquer instalação.

Ver como texto
Página Web application manifest do MDN. O texto define o manifesto como um arquivo de texto JSON com informações sobre a aplicação web, usado principalmente para o navegador instalar um PWA no aparelho com nome e ícone. A seção Members lista os campos documentados, como background_color, categories e description, e avisa que alguns são exigidos para a instalação.
Duas conquistas que costumam ser confundidas
Instalável
Atalho
- Depende do manifesto com nome, ícone e endereço de início
- Põe o atalho na tela inicial do celular
- Abre sem a barra do navegador
- Sem rede, mostra erro como qualquer site
Funciona sem rede
Resiliência
- Depende do service worker e da estratégia de cache
- Guarda arquivos desde a primeira visita
- Mostra conteúdo salvo ou uma página de reserva útil
- Exige decidir o que fazer com o que a pessoa editar sem sinal
Faça agora: teste o site da empresa no celular
Passo 1: Abra o site no Chrome do celular e procure no menu a opção Instalar app ou Adicionar à tela inicial.
Deu certo quando: A opção aparece e o ícone da marca vai para a tela inicial.
Erro comum: Só aparece "criar atalho": o manifesto está incompleto.
Passo 2: Navegue por três páginas com internet e depois ligue o modo avião.
Deu certo quando: As páginas visitadas abrem de novo sem rede.
Passo 3: Ainda em modo avião, abra uma página que você não visitou.
Deu certo quando: Aparece uma página de reserva com a marca e uma explicação, não o dinossauro do Chrome.
No fim você tem: Um diagnóstico em duas linhas: o site é instalável? funciona sem rede? Com o que falta em cada uma.
Aplicar os recursos ao projeto
Ver como texto
Armazenamento e rede são caminhos distintos
A aplicação consulta uma cópia local ou um serviço remoto. A cópia precisa de política de atualização. Um HTML por file não instala automaticamente o mecanismo de cache de uma aplicação publicada.
Ver como texto
Uma pergunta decide onde guardar: perder o valor estraga alguma coisa? Se não, o localStorage basta: é o bilhete na porta, com o tema escolhido ou o último capítulo lido, e o navegador pode apagá-lo sem aviso, além de travar a tela se o volume crescer. Se sim, ou se há volume, o IndexedDB com Dexie guarda registros com índice para consulta e pede versão nova quando a estrutura muda.
Ver como texto
Uma resposta local depende de preparação
Uma aplicação publicada já instalada pode consultar uma resposta guardada ou buscar o serviço. A política precisa definir atualização e ausência, enquanto sincronização de dados é uma responsabilidade distinta.
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
- 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.
- CursoNode.js: JavaScript no Servidorsugerido pelo grafo9 capítulos de “Frontends com Vibecoding” usam conceitos apresentados em “Node.js: JavaScript no Servidor”.
- CursoSkills e delegação com IAsugerido pelo grafo9 capítulos de “Frontends com Vibecoding” usam conceitos apresentados em “Skills e delegação com IA”.
Conceitos deste capítulo
O mesmo assunto em outros cursos
- Engenharia de Software para ExecutivosMedir uma tela lenta e conferir o efeito da mudançaExaminar conexões de Medir uma tela lenta e conferir o efeito da mudança
- Software e IA para executivosManter os sistemas de acordo quando um deles caiExaminar conexões de Manter os sistemas de acordo quando um deles cai
- Node.js: JavaScript no ServidorNavegador e servidor: quem faz cada parteExaminar conexões de Navegador e servidor: quem faz cada parte
- MCP e Chrome: agentes de IA no navegadorComo repetir uma automação sem duplicar efeitosExaminar conexões de Como repetir uma automação sem duplicar efeitos
Terminou a leitura?
Você está aqui: capítulo 31 de 35
0 de 35 concluídos
- Próximo · Capítulo 32 de 35 · 28 minProduzir apresentações e PDF com critérios de entregaLer o capítulo 32 sem concluir
Marque como concluído para o capítulo contar no seu painel e no certificado.
- Anterior · Capítulo 30 de 35 · 45 minAplicar direção de arte, UX writing e padrões de códigoVoltar para o capítulo 30
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
- 29Configurar ambiente, skills e o contêiner de contexto
- 30Aplicar direção de arte, UX writing e padrões de código
- 31Construir um aplicativo instalável e resiliente
- 32Produzir apresentações e PDF com critérios de entrega
- 33Construir as cenas do orquestrador, do paralelismo e do robô