P2.8 — Recordatorio diario: Web Push y prompt de instalación PWA #8

Closed
opened 2026-08-26 12:23:44 +00:00 by alexandrev · 1 comment
Owner

El usuario pide: "Implementa los 10 puntos" (punto 8 de la revisión).

La PWA ya es instalable pero no hay recordatorio diario ni prompt de instalación tras completar el día.

Por qué: la retención D1 de un juego diario sin recordatorio se hunde.

El usuario pide: "Implementa los 10 puntos" (punto 8 de la revisión). La PWA ya es instalable pero no hay recordatorio diario ni prompt de instalación tras completar el día. Por qué: la retención D1 de un juego diario sin recordatorio se hunde.
Author
Owner

Implementado en 0de85cb y desplegado.

  • Service worker en public/sw.js, alta opcional desde la pantalla de resultado y prompt de instalación PWA (con instrucciones para iOS, que no soporta beforeinstallprompt).
  • El push va sin payload: solo cabecera VAPID, lo que evita el cifrado de contenido aes128gcm. El texto de la notificación se guarda en Cache Storage al suscribirse, que es el único almacenamiento que ve un service worker.
  • Claves VAPID generadas y guardadas en pass (hidden11/vapid-public-key, hidden11/vapid-private-key). La privada solo vive en n8n, nunca en el repo.
  • Workflows hidden11 — push subscriptions y hidden11 — daily push reminder (cron 09:00) importados y activos.

Verificado:

GET https://hidden11.app/api/push -> {"publicKey":"BJttMsfk..."}
webhook de alta -> fila en hidden11_push_subscriptions
firma VAPID -> punto de 65 bytes, firma ES256 de 64 bytes, verifica contra la clave pública

Sin comprobar: la entrega real de una notificación, que necesita una suscripción de navegador de verdad. Todo lo automatizable pasa.

Implementado en `0de85cb` y desplegado. - Service worker en `public/sw.js`, alta opcional desde la pantalla de resultado y prompt de instalación PWA (con instrucciones para iOS, que no soporta `beforeinstallprompt`). - El push va **sin payload**: solo cabecera VAPID, lo que evita el cifrado de contenido aes128gcm. El texto de la notificación se guarda en Cache Storage al suscribirse, que es el único almacenamiento que ve un service worker. - Claves VAPID generadas y guardadas en `pass` (`hidden11/vapid-public-key`, `hidden11/vapid-private-key`). La privada solo vive en n8n, nunca en el repo. - Workflows `hidden11 — push subscriptions` y `hidden11 — daily push reminder` (cron 09:00) importados y activos. Verificado: ``` GET https://hidden11.app/api/push -> {"publicKey":"BJttMsfk..."} webhook de alta -> fila en hidden11_push_subscriptions firma VAPID -> punto de 65 bytes, firma ES256 de 64 bytes, verifica contra la clave pública ``` **Sin comprobar**: la entrega real de una notificación, que necesita una suscripción de navegador de verdad. Todo lo automatizable pasa.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alexandrev/hidden11#8