Transformar o seu site numa PWA instalável e com modo offline
Converta um site existente numa Progressive Web App: manifest com ícones, service worker com estratégias de cache por tipo de recurso, página offline, atualizações seguras e testes. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Intermédio · Código · Pendente de revisão editorial
Prompt
Atua como programador web especializado em Progressive Web Apps, service workers e estratégias de cache.
Contexto:
- Site ou aplicação: {{site}}
- Stack e alojamento: {{stack}}
- Nível de funcionamento offline: {{nivel_offline}}
- Prioridades: {{prioridades}}
Se o site tiver áreas privadas, dados pessoais ou conteúdo que muda com frequência, pergunta-me como são geridos antes de definires o que fica em cache.
Entregáveis:
1. O manifest da aplicação web: nome, nome curto, cores, display, start_url, scope e ícones (192 e 512 px, e uma versão maskable), com as etiquetas a acrescentar ao HTML.
2. O service worker com uma estratégia por tipo de recurso, explicada numa tabela: precache do esqueleto da aplicação, stale-while-revalidate para CSS, JS e imagens, network-first com tempo limite para o HTML e só rede para a API autenticada.
3. A página offline e como é servida quando a rede falha.
4. Versionamento das caches, limpeza das antigas no evento activate e um fluxo de atualização que avise o utilizador de que há uma versão nova em vez de recarregar de surpresa.
5. O código de registo do service worker e a alternativa com Workbox se encaixar melhor em {{stack}}.
6. As limitações conhecidas em iOS e Safari que devo verificar, indicando que convém confirmá-las na documentação atual.
7. Como testar: painel Application das DevTools, simulação offline, auditoria de instalabilidade e casos de teste concretos.
Restrições:
- O site tem de ser servido por HTTPS; lembra-mo se o alojamento não o garantir.
- Não guardes em cache respostas com dados pessoais ou de sessão.
- Não acrescentes notificações push nem sincronização em segundo plano, salvo se o pedir nas prioridades.
- Marca com [PREENCHER] as cores, nomes e ícones que não te tenha indicado.
Formato: tabela de estratégias, um bloco de código por ficheiro com o caminho e uma lista de testes.Como utilizar
- Descreve o site, que partes devem funcionar offline e onde está alojado. 2. Adiciona os ficheiros, publica num ambiente de testes com HTTPS e revê o painel Application das DevTools. 3. Num telemóvel real, testa a instalação, o modo de avião e a chegada de uma versão nova.
Exemplo de utilização
Site: site de receitas com pesquisa e páginas de receitas · Stack: site estático gerado com Astro na Netlify · Offline: ler as receitas já visitadas · Prioridades: instalável em Android e carregamento rápido.
Exemplo de resultado
Estratégias de cache
| Recurso | Estratégia |
|---|---|
| Shell (início, página offline, manifest) | Precache no install |
| Páginas de receitas (HTML) | Rede primeiro; se falhar, cache e depois /offline/ |
| CSS, JS, imagens | Stale-while-revalidate |
public/sw.js
const VERSION = 'v1';
const SHELL = `shell-${VERSION}`;
const PAGINAS = `paginas-${VERSION}`;
const RECURSOS = `recursos-${VERSION}`;
const PRECACHE = ['/', '/offline/', '/manifest.webmanifest']; // [PREENCHER: CSS/JS com hash do Astro]
self.addEventListener('install', (event) => {
event.waitUntil(caches.open(SHELL).then((cache) => cache.addAll(PRECACHE)));
});
self.addEventListener('activate', (event) => {
const atuais = [SHELL, PAGINAS, RECURSOS];
event.waitUntil(caches.keys().then((chaves) =>
Promise.all(chaves.filter((c) => !atuais.includes(c)).map((c) => caches.delete(c)))));
});
const guardar = (nome, request, res) => {
if (res.ok) { const copia = res.clone(); caches.open(nome).then((c) => c.put(request, copia)); }
return res;
};
self.addEventListener('fetch', (event) => {
const { request } = event;
if (request.method !== 'GET' || new URL(request.url).origin !== location.origin) return;
if (request.mode === 'navigate') {
event.respondWith(fetch(request).then((res) => guardar(PAGINAS, request, res))
.catch(async () => (await caches.match(request)) ?? caches.match('/offline/')));
return;
}
event.respondWith(caches.match(request).then((emCache) => {
const rede = fetch(request).then((res) => guardar(RECURSOS, request, res)).catch(() => emCache);
return emCache ?? rede;
}));
});
Ao mudar a VERSION, o evento activate apaga as caches antigas. A Netlify serve sempre por HTTPS, requisito para o service worker…
Dados-chave
- Categoria
- Programação e desenvolvimento · Criar páginas web
- Tipo de resultado
- Código
- Nível
- Intermédio
- Pensado para
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Site ou aplicação, Stack e alojamento, Funcionamento offline e Prioridades
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
O que precisa um site para ser instalável como PWA?
No mínimo, ser servido por HTTPS e ter um manifest com nome, ícones e start_url. Cada navegador tem os seus critérios; um service worker com resposta offline melhora a experiência e alguns navegadores têm-no em conta.
Porque não recarregar a página automaticamente quando o service worker é atualizado?
Porque o utilizador pode perder o que estava a fazer, como um formulário a meio. É melhor avisá-lo de que há uma versão nova e deixá-lo escolher quando recarregar.
O que é stale-while-revalidate?
Uma estratégia que serve de imediato a cópia em cache e, ao mesmo tempo, pede a versão nova à rede para a visita seguinte. É rápida e mantém o conteúdo razoavelmente atualizado.
Para que serve este prompt?
Converta um site existente numa Progressive Web App: manifest com ícones, service worker com estratégias de cache por tipo de recurso, página offline, atualizações seguras e testes.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Site ou aplicação, Stack e alojamento, Funcionamento offline e Prioridades). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível intermédio: convém conhecer o tema para fornecer bom contexto e rever o resultado com sentido crítico.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.