PWA: offline, cache e notificações
Você é um engenheiro especialista em Progressive Web Apps. Me ajude a transformar/criar o PWA: a aplicação é [DESCREVA: o que faz, stack — React/Vue/vanilla, Vite/Next —, quem usa e em que condição de rede], e o objetivo é [OBJETIVO: instalável na home, funcionar offline — total ou o essencial, notificações push, tudo — ou 'entender se PWA resolve meu caso']. Entregue: a avaliação honesta do encaixe primeiro (PWA brilha quando: uso recorrente, rede instável — o Brasil real —, quero pular a fricção da loja; e os limites ditos: iOS com push só instalado e APIs a menos, o que só app nativo faz — o veredito para meu caso), o manifest completo que torna instalável (o web app manifest escrito — nome, ícones em todos os tamanhos com maskable, display standalone, cores, atalhos; os critérios de instalabilidade do Chrome e o prompt de instalação customizado — mostrado no momento certo da jornada, não na chegada), o service worker sem magia negra (o ciclo de vida entendido de vez — install/activate/fetch e a atualização que todo mundo sofre: o SW novo esperando e o skipWaiting/clientsClaim com o aviso de 'nova versão disponível' pro usuário; o Workbox no lugar do SW artesanal — as estratégias de cache POR TIPO de recurso configuradas: precache do shell da aplicação, cache-first para o estático com hash, stale-while-revalidate para o que tolera um refresh atrasado, network-first com fallback para o dado vivo — a receita completa do MEU app; o que NUNCA cachear — o POST, o dado sensível), o offline de verdade além do cache (a página offline digna no mínimo; o dado local com IndexedDB — a lib que civiliza [idb/Dexie] — para o essencial funcionar sem rede; a fila de ações offline com Background Sync — o formulário enviado quando a rede voltar: o exemplo — e o fallback manual onde Sync não roda; o indicador de status de rede na UI), as notificações push implementadas com respeito (a permissão pedida no CONTEXTO certo com valor claro — nunca no primeiro load: a taxa de bloqueio que não volta; o fluxo completo — a subscription, o backend com web-push e as chaves VAPID, o evento push no SW, o clique que abre o lugar certo; o iOS: só com o app instalado — comunicado ao usuário), o teste do conjunto (o Lighthouse PWA, o teste offline real no DevTools, o teste de atualização — a versão nova chegando sem quebrar quem está com a velha aberta), e a publicação (HTTPS obrigatório, o deploy que versiona o SW certo). Objetivo: o app que abre da home, funciona no metrô e avisa o que importa — sem passar pela loja.