Een melding krijgen als iets klaar is

Het hele punt van dit product is het moment waarop een klus klaar is terwijl jij ergens anders bent. Progress Watch levert dat via Web Push, rechtstreeks van de server naar je browser — desktop en telefoon via één mechanisme, met niets ertussen dat van ons is.

Aanzetten

Push kies je per ruimte. Open een ruimte, druk op Waarschuw mij, en die browser is geregistreerd voor die ruimte en voor geen enkele andere. Er wordt niets over je opgeslagen tot je drukt, en de ruimte verwijderen schrijft hem weer uit.

Op een telefoon: installeer eerst de site

iOS levert Web Push alleen aan een site die aan het beginscherm is toegevoegd, en daar is niet omheen te komen: open de ruimte in Safari, Deel, Zet op beginscherm, en druk daarvandaan op Waarschuw mij. Android en desktop werken vanuit een gewoon tabblad.

Installeren heeft op iOS een tweede voordeel. Safari wist de lokale opslag van een gewone site na zeven dagen zonder bezoek, en een geïnstalleerde web-app is daarvan uitgezonderd — en in die opslag staat je lijst met ruimtes. Er is geen account om hem uit terug te halen.

Een boom van stappen is één melding

Elke taak die klaar is stuurt een melding, ook elke stap van een klus. Ze stapelen niet: een stap vervangt de vorige melding van zijn klus ter plekke in plaats van er een bij te zetten, dus een deploy van tien stappen leest als één regel die blijft veranderen, en alleen het afronden van de klus zelf trilt opnieuw.

Wat elke partij te weten komt

Payloads zijn versleuteld voor de browser die zich abonneerde, met sleutels die alleen hij heeft. Google, Mozilla en Apple geven versleutelde tekst door en kunnen je taaktitels niet lezen. Wat ze wel te weten komen is dat een bepaalde browser iets ontving, en wanneer.

Je eigen server komt één ding te weten dat hij anders niet zou weten: dat een browser zich op een bepaalde ruimte heeft geabonneerd. Dat is de reden dat het een knop per ruimte is en geen globale instelling — de lijst met ruimtes die een browser bijhoudt leeft in die browser en nergens anders, en een abonnement is het enige dat een ruimte in de administratie van de server zet.

Als je zelf host stuurt PUSH_CONTENT=minimal «Task completed» zonder titel. De payload is hoe dan ook versleuteld; dit gaat over het vergrendelscherm van een telefoon die iemand anders kan zien.

Zelf hosten: het moet HTTPS zijn

Een browser geeft een service worker alleen af op een beveiligde oorsprong, en Web Push heeft er een nodig. Op http://192.168.1.50:7979 verschijnt de knop helemaal niet, wat je sleutels ook zeggen — en niets legt uit waarom, want wat de pagina betreft bestaat de functie op die browser niet. localhost is de ene uitzondering, en dat is precies waarom dit werkt terwijl je het uitprobeert en stopt zodra je het naar een machine in het netwerk verplaatst.

Meldingen betekent dus een certificaat: iets ervoor dat de TLS afhandelt — Caddy, Traefik, nginx, een Cloudflare-tunnel — en FORCE_SSL=true zodra dat er staat.

Zelf hosten: de sleutels genereren

Beide sleutels leeg betekent dat de functie niet bestaat — geen knop, en niets opgeslagen over wie dan ook. Genereer één keer een paar:

Zet ze allebei in het environment:-blok van beide diensten in docker-compose.yml en doe opnieuw docker compose up -d. Niet restart — dat hergebruikt de configuratie die de containers al hebben. Ze op de app zetten en niet op de worker is de fout die het benoemen waard is: de knop verschijnt, iemand drukt erop, en er wordt nooit iets bezorgd.

Er valt nergens iets te registreren — geen Firebase-project, geen Apple-ontwikkelaarsaccount, geen API-sleutel. Wie de browser maakte, draait de pushdienst; het adres ervan komt mee in het abonnement dat de browser aan je server geeft, en het VAPID-paar is het zelfondertekende bewijs dat elke melding van dezelfde afzender kwam. VAPID_SUBJECT is alleen een contactadres en niemand controleert het.

Roteer de sleutels niet. Bestaande abonnementen zijn eraan gebonden, browsers worden niet ingelicht, en ze ontvangen simpelweg niets meer.

Waarom er geen mobiele app is

Er is een React Native-app voor ontworpen en niet gebouwd, omdat Web Push dekt waar hij voor was. Het enige dat hij nog steeds beter zou doen is meerdere servers tegelijk in de gaten houden: een browser is aan één oorsprong gebonden, dus een ruimte op een andere server opent op die server in plaats van zich bij één lijst te voegen. Kijk je naar een gehoste ruimte en een zelf gehoste, installeer de site dan vanaf beide.