Être notifié quand quelque chose se termine

Tout l'intérêt du produit tient au moment où un travail se termine pendant que vous êtes ailleurs. Progress Watch le délivre par Web Push, directement du serveur à votre navigateur — bureau et téléphone par un seul mécanisme, sans rien entre les deux qui nous appartienne.

L'activer

Le push se choisit espace par espace. Ouvrez un espace, appuyez sur Me notifier, et ce navigateur est enregistré pour cet espace et pour aucun autre. Rien vous concernant n'est stocké tant que vous n'appuyez pas, et retirer l'espace le désinscrit.

Sur un téléphone, installez d'abord le site

iOS ne délivre le Web Push qu'à un site ajouté à l'écran d'accueil, et il n'y a pas moyen de contourner cela : ouvrez l'espace dans Safari, Partager, Sur l'écran d'accueil, et appuyez sur Me notifier depuis là. Android et le bureau fonctionnent depuis un onglet ordinaire.

L'installation a un second avantage sur iOS. Safari efface le stockage local d'un site ordinaire après sept jours sans visite, et une application web installée en est exemptée — et c'est dans ce stockage que vit votre liste d'espaces. Il n'y a aucun compte depuis lequel la restaurer.

Un arbre d'étapes fait une notification

Chaque tâche qui se termine notifie, y compris chaque étape d'un travail. Elles ne s'empilent pas : une étape remplace sur place la notification précédente de son travail au lieu de s'y ajouter, un déploiement en dix étapes se lit donc comme une ligne qui change, et seule la fin du travail lui-même vibre à nouveau.

Ce que chaque partie apprend

Les charges utiles sont chiffrées pour le navigateur qui s'est abonné, avec des clés que lui seul détient. Google, Mozilla et Apple relaient du texte chiffré et ne peuvent pas lire les titres de vos tâches. Ce qu'ils apprennent, c'est qu'un navigateur donné a reçu quelque chose, et quand.

Votre propre serveur apprend une chose qu'il ignorerait autrement : qu'un navigateur s'est abonné sur un espace donné. C'est la raison pour laquelle c'est un bouton par espace et non un réglage global — la liste des espaces d'un navigateur vit dans ce navigateur et nulle part ailleurs, et un abonnement est la seule chose qui fasse entrer un espace dans les registres du serveur.

Si vous auto-hébergez, PUSH_CONTENT=minimal envoie « Task completed » sans titre. La charge est chiffrée dans les deux cas ; ceci concerne l'écran verrouillé d'un téléphone que quelqu'un d'autre peut voir.

Auto-hébergement : il faut du HTTPS

Un navigateur ne délivre un service worker que sur une origine sécurisée, et le Web Push en exige une. Sur http://192.168.1.50:7979 le bouton n'apparaît pas du tout, quoi que disent vos clés — et rien n'explique pourquoi, car du point de vue de la page la fonctionnalité n'existe pas sur ce navigateur. localhost est la seule exception, ce qui est précisément pourquoi cela marche pendant que vous l'essayez et s'arrête dès que vous le déplacez sur une machine du réseau.

Notifications signifie donc certificat : quelque chose devant qui termine le TLS — Caddy, Traefik, nginx, un tunnel Cloudflare — et FORCE_SSL=true posé une fois que c'est en place.

Auto-hébergement : générer les clés

Les deux clés vides signifient que la fonctionnalité n'existe pas — pas de bouton, et rien de stocké sur qui que ce soit. Générez une paire une fois :

Mettez les deux dans le bloc environment: des deux services de docker-compose.yml et relancez docker compose up -d. Pas restart — cela réutilise la configuration que les conteneurs ont déjà. Les poser sur l'application et pas sur le worker est l'échec qui mérite d'être nommé : le bouton apparaît, quelqu'un appuie, et rien n'est jamais délivré.

Il n'y a rien à enregistrer nulle part — pas de projet Firebase, pas de compte développeur Apple, pas de clé d'API. Celui qui a fait le navigateur exploite le service de push ; son adresse arrive dans l'abonnement que le navigateur remet à votre serveur, et la paire VAPID est la preuve auto-signée que chaque notification vient du même expéditeur. VAPID_SUBJECT n'est qu'une adresse de contact et personne ne la vérifie.

Ne faites pas tourner les clés. Les abonnements existants y sont liés, les navigateurs n'en sont pas informés, et ils cessent simplement de recevoir.

Pourquoi il n'y a pas d'application mobile

Une application React Native avait été conçue pour cela et n'a pas été construite, parce que le Web Push couvre ce à quoi elle servait. La seule chose qu'elle ferait encore mieux, c'est surveiller plusieurs serveurs à la fois : un navigateur est lié à une origine, donc un espace sur un autre serveur s'ouvre sur ce serveur au lieu de rejoindre une liste unique. Si vous surveillez un espace hébergé et un espace auto-hébergé, installez le site depuis chacun.