Essere avvisati quando qualcosa finisce
Il senso dell'intero prodotto è il momento in cui un lavoro finisce mentre tu sei altrove. Progress Watch lo consegna via Web Push, direttamente dal server al tuo browser: desktop e telefono attraverso un unico meccanismo, senza nulla in mezzo che appartenga a noi.
Attivarlo
Il push si sceglie spazio per spazio. Apri uno spazio, premi Avvisami, e quel browser è registrato per quello spazio e per nessun altro. Finché non premi non viene memorizzato nulla su di te, e rimuovere lo spazio lo disiscrive di nuovo.
Su un telefono, installa prima il sito
iOS consegna il Web Push solo a un sito aggiunto alla schermata Home, e non c'è modo di aggirarlo: apri lo spazio in Safari, Condividi, Aggiungi a Home, e premi Avvisami da lì. Android e desktop funzionano da una scheda normale.
Installarlo ha un secondo vantaggio su iOS. Safari cancella la memoria locale di un sito normale dopo sette giorni senza visite, e una web app installata ne è esente — ed è in quella memoria che vive il tuo elenco di spazi. Non esiste nessun account da cui ripristinarlo.
Un albero di passaggi è una sola notifica
Ogni attività che finisce avvisa, compreso ogni passaggio di un lavoro. Non si impilano: un passaggio sostituisce sul posto la notifica precedente del suo lavoro invece di aggiungersi, quindi un deploy da dieci passaggi si legge come una riga che continua a cambiare, e solo la conclusione del lavoro stesso vibra di nuovo.
Cosa impara ciascuna parte
I payload sono cifrati per il browser che si è iscritto, con chiavi che ha solo lui. Google, Mozilla e Apple inoltrano testo cifrato e non possono leggere i titoli delle tue attività. Quello che imparano è che un certo browser ha ricevuto qualcosa, e quando.
Il tuo server impara una cosa che altrimenti non saprebbe: che un browser si è iscritto a un dato spazio. È questa la ragione per cui è un pulsante per spazio e non un'impostazione globale: l'elenco degli spazi che un browser tiene vive in quel browser e da nessun'altra parte, e un'iscrizione è l'unica cosa che porta uno spazio nei registri del server.
Se ti ospiti da solo, PUSH_CONTENT=minimal invia «Task completed» senza titolo. Il payload è cifrato in entrambi i casi; questo riguarda la schermata di blocco di un telefono che qualcun altro può vedere.
Autogestito: deve essere HTTPS
Un browser consegna un service worker solo su un'origine sicura, e il Web Push ne richiede una. Su http://192.168.1.50:7979 il pulsante non compare affatto, qualunque cosa dicano le tue chiavi — e nulla spiega il perché, perché per quanto riguarda la pagina la funzione su quel browser non esiste. localhost è l'unica eccezione, ed è esattamente per questo che funziona mentre lo provi e smette nel momento in cui lo sposti su una macchina in rete.
Quindi notifiche vuol dire certificato: qualcosa davanti che termini il TLS — Caddy, Traefik, nginx, un tunnel Cloudflare — e FORCE_SSL=true impostato una volta che c'è.
Autogestito: generare le chiavi
Entrambe le chiavi vuote significano che la funzione non esiste: nessun pulsante e niente memorizzato su nessuno. Genera una coppia una volta sola:
Metti entrambe nel blocco environment: di entrambi i servizi in docker-compose.yml e rilancia docker compose up -d. Non restart: quello riusa la configurazione che i container hanno già. Impostarle sull'app e non sul worker è il guasto che vale la pena nominare: il pulsante compare, qualcuno lo preme, e non viene mai consegnato nulla.
Non c'è niente da registrare da nessuna parte: nessun progetto Firebase, nessun account sviluppatore Apple, nessuna chiave API. Chi ha fatto il browser gestisce il servizio di push; il suo indirizzo arriva dentro l'iscrizione che il browser consegna al tuo server, e la coppia VAPID è la prova autofirmata che ogni notifica è arrivata dallo stesso mittente. VAPID_SUBJECT è solo un indirizzo di contatto e nessuno lo verifica.
Non ruotare le chiavi. Le iscrizioni esistenti sono legate a esse, i browser non vengono informati, e semplicemente smettono di ricevere.
Perché non c'è un'app mobile
Un'app React Native era stata progettata per questo e non è stata costruita, perché il Web Push copre ciò per cui serviva. L'unica cosa che farebbe ancora meglio è guardare più server insieme: un browser è legato a un'origine, quindi uno spazio su un altro server si apre su quel server invece di unirsi a un unico elenco. Se guardi uno spazio ospitato e uno autogestito, installa il sito da ciascuno.