Convertir tu web en una PWA instalable y con modo sin conexión

Convierte una web existente en una Progressive Web App: manifest con iconos, service worker con estrategias de caché por tipo de recurso, página sin conexión, actualizaciones seguras y pruebas. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 4 variables personalizables y se copia gratis en un clic.

Intermedio · Código · Pendiente de revisión editorial

Prompt

Actúa como desarrollador web especializado en Progressive Web Apps, service workers y estrategias de caché.

Contexto:
- Web o aplicación: {{web}}
- Stack y alojamiento: {{stack}}
- Nivel de funcionamiento sin conexión: {{nivel_offline}}
- Prioridades: {{prioridades}}

Si la web tiene zonas privadas, datos personales o contenido que cambia con frecuencia, pregúntame cómo se gestionan antes de definir qué se guarda en caché.

Entregables:
1. El archivo de manifest de la aplicación web: nombre, nombre corto, colores, display, start_url, scope e iconos (192 y 512 px, y versión maskable), con las etiquetas que hay que añadir al HTML.
2. El service worker con una estrategia por tipo de recurso explicada en una tabla: precaché del esqueleto de la aplicación, stale-while-revalidate para CSS, JS e imágenes, network-first con tiempo límite para el HTML, y solo red para la API autenticada.
3. La página sin conexión y cómo se sirve cuando falla la red.
4. Versionado de cachés, limpieza de las antiguas en el evento activate y un flujo de actualización que avise al usuario de que hay una versión nueva en lugar de recargar por sorpresa.
5. El código de registro del service worker y la alternativa con Workbox si encaja mejor con {{stack}}.
6. Limitaciones conocidas en iOS y Safari que debo comprobar, indicando que conviene verificarlas en la documentación actual.
7. Cómo probarlo: panel Application de las DevTools, simulación sin conexión, auditoría de instalabilidad y casos de prueba concretos.

Restricciones:
- La web debe servirse por HTTPS; recuérdalo si el alojamiento no lo garantiza.
- No guardes en caché respuestas con datos personales ni de sesión.
- No añadas notificaciones push ni sincronización en segundo plano salvo que lo pida en las prioridades.
- Marca con [COMPLETAR] colores, nombres e iconos que no te haya dado.

Formato: tabla de estrategias, un bloque de código por archivo con su ruta y una lista de pruebas.

Cómo usarlo

  1. Describe la web, qué partes deben funcionar sin conexión y dónde está alojada. 2. Añade los archivos, publica en un entorno de pruebas con HTTPS y revisa el panel Application de las DevTools. 3. Prueba en un móvil real la instalación, el modo avión y la llegada de una versión nueva.

Ejemplo de uso

Web: recetario de cocina con buscador y fichas de recetas · Stack: sitio estático generado con Astro en Netlify · Sin conexión: leer las recetas ya visitadas · Prioridades: instalable en Android y carga rápida.

Resultado de ejemplo

Estrategias de caché

RecursoEstrategia
Shell (inicio, página offline, manifest)Precaché en install
Páginas de recetas (HTML)Red primero; si falla, caché y luego /offline/
CSS, JS, imágenesStale-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']; // [COMPLETAR: CSS/JS con hash de Astro]

self.addEventListener('install', (event) => {
  event.waitUntil(caches.open(SHELL).then((cache) => cache.addAll(PRECACHE)));
});

self.addEventListener('activate', (event) => {
  const actuales = [SHELL, PAGINAS, RECURSOS];
  event.waitUntil(caches.keys().then((claves) =>
    Promise.all(claves.filter((c) => !actuales.includes(c)).map((c) => caches.delete(c)))));
});

const guardar = (nombre, request, res) => {
  if (res.ok) { const copia = res.clone(); caches.open(nombre).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((enCache) => {
    const red = fetch(request).then((res) => guardar(RECURSOS, request, res)).catch(() => enCache);
    return enCache ?? red;
  }));
});

Al cambiar VERSION, activate borra las cachés antiguas. Netlify sirve siempre por HTTPS, requisito para el service worker…

Datos clave

Categoría
Programación y desarrollo · Crear páginas web
Tipo de resultado
Código
Nivel
Intermedio
Pensado para
ChatGPT, Claude, Gemini y Microsoft Copilot
Verificado en
Pendiente de verificación editorial
Variables
Web o aplicación, Stack y alojamiento, Funcionamiento sin conexión y Prioridades
Idioma
Español
Precio
Gratis, sin registro
Actualizado
07/11/2026

Preguntas frecuentes

¿Qué necesita una web para ser instalable como PWA?

Como mínimo, servirse por HTTPS y tener un manifest con nombre, iconos y start_url. Cada navegador tiene sus propios criterios; un service worker con respuesta sin conexión mejora la experiencia y algunos navegadores lo tienen en cuenta.

¿Por qué no recargar la página automáticamente al actualizar el service worker?

Porque el usuario puede perder lo que estaba haciendo, como un formulario a medias. Es mejor avisarle de que hay una versión nueva y dejar que decida cuándo recargar.

¿Qué es stale-while-revalidate?

Una estrategia que sirve al instante la copia en caché y, a la vez, pide la versión nueva a la red para la siguiente visita. Es rápida y mantiene el contenido razonablemente actualizado.

¿Para qué sirve este prompt?

Convierte una web existente en una Progressive Web App: manifest con iconos, service worker con estrategias de caché por tipo de recurso, página sin conexión, actualizaciones seguras y pruebas.

¿Con qué herramientas de IA funciona?

Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.

¿Cómo personalizo el prompt?

Pulsa «Personalizar» y rellena las variables (Web o aplicación, Stack y alojamiento, Funcionamiento sin conexión y Prioridades). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.

¿Necesito experiencia para usarlo?

Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.

¿Este prompt es gratis?

Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.

¿Puedo fiarme del resultado de la IA?

Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.

Prompts relacionados