Recibir aviso cuando algo termina

El sentido de todo el producto es el momento en que un trabajo termina mientras tú estás en otra parte. Progress Watch lo entrega mediante Web Push, directo del servidor a tu navegador: escritorio y teléfono por un mismo mecanismo, sin nada por medio que sea nuestro.

Activarlo

Push es opcional y por espacio. Abre un espacio, pulsa Avisarme, y ese navegador queda registrado para ese espacio y para ningún otro. No se guarda nada sobre ti hasta que lo pulsas, y quitar el espacio lo da de baja de nuevo.

En un teléfono, instala primero el sitio

iOS entrega Web Push solo a un sitio añadido a la pantalla de inicio, y no hay forma de evitarlo: abre el espacio en Safari, Compartir, Añadir a pantalla de inicio, y pulsa Avisarme desde ahí. Android y escritorio funcionan desde una pestaña normal.

Instalarlo tiene una segunda ventaja en iOS. Safari borra el almacenamiento local de un sitio normal a los siete días sin visitas, y una aplicación web instalada queda exenta, y en ese almacenamiento vive tu lista de espacios. No hay ninguna cuenta desde la que restaurarla.

Un árbol de pasos es una notificación

Toda tarea que termina avisa, incluido cada paso de un trabajo. No se apilan: un paso reemplaza en su sitio la notificación anterior de su trabajo en lugar de sumarse a ella, así que un despliegue de diez pasos se lee como una línea que va cambiando, y solo la finalización del trabajo en sí vuelve a vibrar.

Qué aprende cada parte

Las cargas van cifradas para el navegador que se suscribió, con claves que solo él tiene. Google, Mozilla y Apple retransmiten texto cifrado y no pueden leer los títulos de tus tareas. Lo que sí saben es que un navegador concreto recibió algo, y cuándo.

Tu propio servidor aprende una cosa que de otro modo no sabría: que un navegador se suscribió a un espacio dado. Esa es la razón de que sea un botón por espacio y no un ajuste global: la lista de espacios que tiene un navegador vive en ese navegador y en ningún otro sitio, y una suscripción es lo único que mete un espacio en los registros del servidor.

Si te lo alojas tú, PUSH_CONTENT=minimal envía «Task completed» sin título. La carga va cifrada de todos modos; esto es para la pantalla de bloqueo de un teléfono que otro puede ver.

Alojarlo tú: tiene que ser HTTPS

Un navegador solo entrega un service worker en un origen seguro, y Web Push necesita uno. En http://192.168.1.50:7979 el botón no aparece siquiera, digan lo que digan tus claves, y nada explica por qué, porque para la página la función no existe en ese navegador. localhost es la única excepción, que es justo por lo que esto funciona mientras lo pruebas y deja de hacerlo en cuanto lo pasas a una máquina de la red.

Así que notificaciones significa certificado: algo delante que termine el TLS — Caddy, Traefik, nginx, un túnel de Cloudflare — y FORCE_SSL=true puesto una vez esté.

Alojarlo tú: generar las claves

Las dos claves sin poner significa que la función no existe: ni botón, ni nada guardado sobre nadie. Genera un par una vez:

Pon las dos en el bloque environment: de los dos servicios de docker-compose.yml y haz docker compose up -d otra vez. No restart: eso reutiliza la configuración que los contenedores ya tienen. Ponerlas en la aplicación y no en el worker es el fallo que merece nombre: el botón aparece, alguien lo pulsa, y no se entrega nada nunca.

No hay nada que registrar en ninguna parte: ni proyecto de Firebase, ni cuenta de desarrollador de Apple, ni clave de API. Quien hizo el navegador opera el servicio de push; su dirección llega dentro de la suscripción que el navegador le entrega a tu servidor, y el par VAPID es la prueba autofirmada de que cada notificación vino del mismo emisor. VAPID_SUBJECT es solo una dirección de contacto y nadie la verifica.

No rotes las claves. Las suscripciones existentes están atadas a ellas, a los navegadores no se les avisa, y sencillamente dejan de recibir.

Por qué no hay aplicación móvil

Se diseñó una aplicación en React Native para esto y no se ha construido, porque Web Push cubre aquello para lo que era. Lo único que seguiría haciendo mejor es vigilar varios servidores a la vez: un navegador está atado a un origen, así que un espacio de otro servidor se abre en ese servidor en lugar de unirse a una sola lista. Si vigilas un espacio alojado y otro propio, instala el sitio desde cada uno.