Ser avisado quando algo termina

O sentido de todo o produto é o momento em que um trabalho termina enquanto está noutro sítio. O Progress Watch entrega isso por Web Push, direto do servidor para o seu navegador — computador e telemóvel pelo mesmo mecanismo, sem nada pelo meio que seja nosso.

Ligar

O push é opcional e por espaço. Abra um espaço, carregue em Avisar-me, e esse navegador fica registado para esse espaço e para mais nenhum. Nada sobre si é guardado até carregar, e remover o espaço volta a cancelar o registo.

Num telemóvel, instale primeiro o site

O iOS entrega Web Push apenas a um site adicionado ao ecrã principal, e não há forma de contornar: abra o espaço no Safari, Partilhar, Adicionar ao ecrã principal, e carregue em Avisar-me a partir daí. O Android e o computador funcionam a partir de um separador normal.

Instalar tem uma segunda vantagem no iOS. O Safari limpa o armazenamento local de um site normal ao fim de sete dias sem visitas, e uma aplicação web instalada está isenta — e é nesse armazenamento que vive a sua lista de espaços. Não há conta nenhuma a partir da qual a repor.

Uma árvore de passos é uma notificação

Todas as tarefas que terminam avisam, incluindo cada passo de um trabalho. Não se acumulam: um passo substitui no lugar a notificação anterior do seu trabalho em vez de se somar a ela, por isso um deploy de dez passos lê-se como uma linha que vai mudando, e só a conclusão do próprio trabalho volta a vibrar.

O que cada parte fica a saber

As cargas vão cifradas para o navegador que subscreveu, com chaves que só ele tem. A Google, a Mozilla e a Apple encaminham texto cifrado e não conseguem ler os títulos das suas tarefas. O que ficam a saber é que um determinado navegador recebeu alguma coisa, e quando.

O seu próprio servidor fica a saber uma coisa que de outro modo não saberia: que um navegador subscreveu num dado espaço. É essa a razão de ser um botão por espaço e não uma definição global — a lista de espaços que um navegador guarda vive nesse navegador e em mais lado nenhum, e uma subscrição é a única coisa que põe um espaço nos registos do servidor.

Se aloja por conta própria, PUSH_CONTENT=minimal envia «Task completed» sem título. A carga vai cifrada de qualquer forma; isto é para o ecrã bloqueado de um telemóvel que outra pessoa pode ver.

Alojamento próprio: tem de ser HTTPS

Um navegador só entrega um service worker numa origem segura, e o Web Push precisa de uma. Em http://192.168.1.50:7979 o botão nem sequer aparece, digam o que disserem as suas chaves — e nada explica porquê, porque no que toca à página a funcionalidade não existe nesse navegador. localhost é a única exceção, e é exatamente por isso que isto funciona enquanto o experimenta e deixa de funcionar assim que o passa para uma máquina na rede.

Notificações significam portanto um certificado: algo à frente que termine o TLS — Caddy, Traefik, nginx, um túnel da Cloudflare — e FORCE_SSL=true posto assim que estiver lá.

Alojamento próprio: gerar as chaves

As duas chaves por definir significam que a funcionalidade não existe — sem botão, e nada guardado sobre ninguém. Gere um par uma vez:

Ponha ambas no bloco environment: dos dois serviços em docker-compose.yml e volte a fazer docker compose up -d. Não restart — isso reutiliza a configuração que os contentores já têm. Pô-las na aplicação e não no worker é a falha que vale a pena nomear: o botão aparece, alguém carrega, e nunca é entregue nada.

Não há nada para registar em lado nenhum — sem projeto Firebase, sem conta de programador da Apple, sem chave de API. Quem fez o navegador é quem opera o serviço de push; o endereço dele chega dentro da subscrição que o navegador entrega ao seu servidor, e o par VAPID é a prova auto-assinada de que todas as notificações vieram do mesmo remetente. VAPID_SUBJECT é apenas um endereço de contacto e ninguém o verifica.

Não rode as chaves. As subscrições existentes estão presas a elas, os navegadores não são avisados, e simplesmente deixam de receber.

Porque não há aplicação móvel

Foi desenhada uma aplicação em React Native para isto e não foi construída, porque o Web Push cobre aquilo para que servia. A única coisa que continuaria a fazer melhor é vigiar vários servidores ao mesmo tempo: um navegador está preso a uma origem, por isso um espaço noutro servidor abre-se nesse servidor em vez de se juntar a uma lista única. Se vigia um espaço alojado e outro próprio, instale o site a partir de cada um.