diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 9767e12..d278178 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,11 @@ qui: sta in [ROADMAP.md](ROADMAP.md). ## Versione attuale — agosto 2026 +### Profilo: etichetta notifiche allineata al comportamento + +- L’interruttore in Impostazioni non è più «Notifiche turno palloni»: iscrive il dispositivo + a tutte le push (palloni, solleciti) e alle smart in app. Testo e docs aggiornati. + ### Revisione dell'interfaccia: accessibilità, movimento, peso - **Contrasto**: `--success`, `--info` e `--training` erano tra 3.3:1 e 3.5:1 con il testo diff --git a/docs/modules/notifiche.md b/docs/modules/notifiche.md index 5f1f936..5f7e822 100644 --- a/docs/modules/notifiche.md +++ b/docs/modules/notifiche.md @@ -1,7 +1,6 @@ # Modulo — Notifiche -**Stato:** implementato parzialmente — solo il canale "turno palloni" è realmente collegato -(vedi Limiti noti) +**Stato:** implementato — un unico opt-in dispositivo abilita tutto il canale push **File principali:** `src/lib/notifiche-smart.ts`, `src/lib/push-client.ts`, `src/lib/webpush.server.ts`, `src/routes/api/public/push-config.ts`, `src/routes/api/public/push-messaggio.ts`, `src/routes/api/public/push-subscribe.ts`, @@ -30,7 +29,12 @@ persistente: la riga viene eliminata non appena letta dal service worker). ## Iscrizione alle notifiche push -1. Il giocatore attiva "Notifiche turno palloni" in `/profilo` → richiesta permesso browser. +In Profilo → Impostazioni c’è **un solo interruttore** («Notifiche»). Non esistono preferenze +separate per tipo di messaggio: l’iscrizione registra il dispositivo e lo rende destinatario +di **tutte** le push (promemoria palloni, solleciti presenze) e abilita anche le notifiche +smart in app, che usano lo stesso service worker. + +1. Il giocatore attiva «Notifiche» in `/profilo` → richiesta permesso browser. 2. `GET /api/public/push-config` restituisce solo la chiave pubblica VAPID. 3. Registrazione del service worker `public/push-sw.js` e `pushManager.subscribe()`. 4. `POST /api/public/push-subscribe` registra endpoint e chiavi in `push_subscriptions` @@ -66,11 +70,8 @@ ripetersi — deduplica puramente locale al dispositivo, non sincronizzata. ## Limiti noti -- **Le 4 voci "Notifiche convocazioni", "Promemoria allenamenti", "Cambi orario", "Bacheca - squadra" in `/profilo` sono placeholder statici**: checkbox non controllati - (`defaultChecked`, nessun `onChange`), non collegati a nessuno stato, nessuna colonna DB - per queste preferenze. L'unica preferenza realmente funzionante è "Notifiche turno - palloni". +- Non ci sono preferenze granulari (solo palloni / solo presenze / solo smart): un dispositivo + è iscritto o no. Separare i canali richiederebbe schema e UI dedicati. - `promemoria_push` è descritta altrove come "storico" ma nel codice è una coda che si autocancella alla lettura: non conserva nulla. - Nessuna verifica di autenticazione su `push-messaggio` (chiunque conosca un endpoint push @@ -88,6 +89,6 @@ ripetersi — deduplica puramente locale al dispositivo, non sincronizzata. ## Evoluzioni possibili -- Collegare (o rimuovere) le 4 preferenze placeholder in `/profilo`. +- Preferenze per canale (palloni, solleciti, smart), se servono davvero alla squadra. - Aggiungere autenticazione alle route pubbliche coinvolte. - Gestire esplicitamente il caso iOS (messaggio se l'app non è installata da Home). diff --git a/docs/modules/profilo-giocatore.md b/docs/modules/profilo-giocatore.md index 7f6893b..aa8f38e 100644 --- a/docs/modules/profilo-giocatore.md +++ b/docs/modules/profilo-giocatore.md @@ -144,7 +144,9 @@ Contiene tutti i badge ottenuti e quelli ancora da sbloccare. Contiene. - Logout -- Preferenze notifiche +- Preferenze notifiche: un solo interruttore che iscrive il dispositivo a **tutte** le push + (turno palloni, solleciti presenze) e abilita le notifiche smart in app — non è limitato + ai soli palloni (vedi [Notifiche](notifiche.md)) - Impostazioni applicazione - Segnala un bug e Suggerisci una nuova funzionalità: due link che aprono una issue GitHub già impostata sul template giusto (`.github/ISSUE_TEMPLATE/bug_report.yml` e diff --git a/src/routes/profilo.tsx b/src/routes/profilo.tsx index 40cedb2..b0a1e88 100644 --- a/src/routes/profilo.tsx +++ b/src/routes/profilo.tsx @@ -80,7 +80,7 @@ function Profilo() { } else { await attivaNotifiche(g.id); setNotifiche(true); - toast.success("Notifiche palloni attive"); + toast.success("Notifiche attive"); } } catch (error) { toast.error(error instanceof Error ? error.message : "Notifiche non disponibili"); @@ -227,68 +227,70 @@ function Profilo() { id: "impostazioni", label: "Impostazioni", contenuto: ( -