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.

Een server thuis

Meldingen vertrekken vanaf je server, dus hij kan thuis achter een router staan en ze toch versturen. Wat hem moet bereiken zijn je telefoon en je browser, om de bel aan te zetten en te openen waar een melding naar wijst, en daarvoor heeft hij een HTTPS-adres met een echt certificaat nodig. Een browser biedt geen meldingen aan op http://192.168.1.50:7979, en de iOS-app maakt alleen verbinding met HTTPS-servers. localhost is de enige uitzondering, en daarom werkt alles zolang je het op de machine zelf probeert.

Zonder eigen domein geeft Tailscale de server met één commando een openbaar HTTPS-adres. Installeer het op de machine waarop Progress Watch draait, log in en voer uit:

De eerste keer vraagt het of Funnel voor je netwerk mag. Daarna toont het het adres, https://your-machine.your-tailnet.ts.net, en dat is vanaf nu je server: in de app, in progresswatch configure --server en in de browser. Het adres is openbaar, net als progress.watch, en een ruimte leest nog steeds alleen wie de link heeft.

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 in docker-compose.yml en doe opnieuw docker compose up -d. Niet restart, dat hergebruikt de configuratie die de container al heeft.

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.

De iOS-app

Er is een iOS-app onderweg naar de App Store. Het is deze zelfde site in een native schil, en hij krijgt zijn meldingen via de pushdienst van Apple in plaats van Web Push, dus er hoeft niets aan het beginscherm te worden toegevoegd. Vanaf een zelf gehoste server gaan die meldingen via progress.watch, omdat alleen de uitgever van de app de sleutel heeft waar Apple om vraagt: wat er langskomt is het apparaat en de tekst van de melding, nooit een ruimte-UUID. PUSH_CONTENT=minimal houdt taaktitels erbuiten, en PUSH_RELAY=false zet het helemaal uit. Wat hij nog niet doet is meerdere servers tegelijk volgen: hij wijst naar één server tegelijk.