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

  1. 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

RecursoEstraté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, imagensStale-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.

Prompts relacionados