Changelog dalla 1.1.1: notifiche email con worker Docker e interruttore Email, push dei promemoria, sondaggio in-app ed email, l'allenatore senza promemoria degli eventi e la correzione dei promemoria che ricomparivano. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
12 KiB
Changelog
Le modifiche rilevanti di CrAPP sono documentate qui, in ordine di rilascio. Il formato segue Keep a Changelog: ogni versione ha una data e le voci sono divise per categoria (Aggiunto, Modificato, Sicurezza...). L'elenco completo delle funzionalità, fatte e previste, sta in ROADMAP.md; qui si registra solo quando una voce è stata rilasciata e con quale versione.
Le versioni sono sempre a tre cifre (x.y.z, mai x.y). Dalla 1.0.0 si segue il
versionamento semantico: x cresce con i cambi non
compatibili all'indietro, y con le funzionalità nuove, z con le sole correzioni. Le
versioni 0.y.z erano pre-release.
[Non rilasciato]
[1.2.0] - 2026-09-29
Le notifiche arrivano su tre canali (push, centro notifiche in-app ed email) e non si ripetono più.
Le migration m22–m25 sono già in produzione dal 29/09/2026 e il worker delle email è in funzione;
questa versione porta il codice dell'app che le usa.
Aggiunto
- Notifiche email — ogni notifica del centro notifiche in-app (messaggi dello staff, promemoria
a 24 e 3 ore, turno palloni, sollecito presenze, sondaggio pre-partita) arriva anche per email
all'indirizzo Gmail con cui il giocatore si è registrato, gratis e senza aprire porte sul
router: un worker Docker (
mailer/) sull'host di casa legge una coda su Supabase (migrationm22_notifiche_email) e invia tramite un account Gmail dedicato, con nuovi tentativi in caso di errore e un tetto giornaliero sotto il limite di Gmail. In Profilo → Opzioni c'è l'interruttore «Email», acceso di default, per account (tabellapreferenze_utente; DD-036). - Push dei promemoria — i promemoria a 24 e 3 ore, che arrivavano solo in-app e per email,
partono ora anche come push a tutti i dispositivi iscritti del giocatore. Nascono nel database,
che non può firmare una push, quindi la manda lo stesso worker con lo stesso modulo dell'app
(migration
m24_push_promemoria_e_sondaggio, DD-038). Le iscrizioni scadute vengono eliminate e una push rimasta in coda oltre 3 ore si scarta. Il worker va ricostruito e configurato con le chiavi VAPID dell'app (vedi WORKER_EMAIL.md); senza, manda solo le email. - Sondaggio pre-partita nel centro notifiche e per email — prima era solo una push. Ora compare anche tra le notifiche in-app e arriva per email ai giocatori attivi, allenatori esclusi (DD-038).
- Documentazione e test — nuovo WORKER_EMAIL.md (installazione, gestione, diagnosi, prova in locale, spostamento su un altro host); catalogo delle notifiche in notifiche.md, con cosa le fa partire, a chi arrivano e su quali canali; tabella delle notifiche dell'allenatore in allenatore.md; decisioni DD-036, DD-037, DD-038 e DD-039. Nuovi test di integrazione per la coda delle email, il registro dei promemoria, la coda push, il sondaggio e i destinatari per ruolo (promemoria, messaggio dello staff, sondaggio, sollecito e turno palloni con allenatore e giocatore), più i test unitari del worker.
Modificato
- L'allenatore non riceve più i promemoria degli eventi (24 e 3 ore prima, DD-039): per lui non
c'è nulla da confermare, dato che non risponde alle presenze e non è convocabile, e per una cena di
squadra il promemoria non aveva senso. Riceve ancora i messaggi dello staff. Migration
m25_promemoria_solo_giocatori. - Messaggio del pulsante «Sondaggio» — se nessun dispositivo ha le notifiche attive dice che l'avviso è stato inviato in app e per email, invece di «Nessun dispositivo con le notifiche attive».
ops/fuori da git — il playbook Ansible locale per il backup cifrato non è più tracciato.
Corretto
- I promemoria dell'evento non ricompaiono più se li elimini — il promemoria a 24 e a 3 ore
eliminato dal centro notifiche veniva rigenerato dal job automatico al giro successivo, come non
letto e, con le email, con una nuova mail a ogni giro fino all'inizio dell'evento. Ora il job
ricorda ciò che ha già generato (migration
m23_promemoria_gia_generati, DD-037). Il difetto esisteva dal centro notifiche (m17) e si è notato con l'arrivo delle email.
[1.1.1] - 2026-09-28
Aggiunto
- Keepalive giornaliero — un Vercel Cron Job chiama
/api/public/keepaliveuna volta al giorno con una lettura minima, per evitare che il progetto Supabase free tier vada in pausa dopo 7 giorni senza richieste API. - Scheda evento — gli eventi extra-campo (es. cena di squadra) hanno ora una pagina di dettaglio propria, come allenamenti e partite, con l'elenco nominativo di chi ha risposto presente/assente/forse invece del solo conteggio in card. "Infortunato" non compare più tra le opzioni né nei badge/riepiloghi per questi eventi, dato che non è una risposta pertinente.
Modificato
- Backup completo — la cifratura (gpg,
tar.gz.gpg) è ora il comportamento di default invece che opt-in con--encrypt, dato che i dump contengono dati sensibili (hash password, documenti d'identità); si disattiva con--no-encrypt. Aggiunte le istruzioni di decompressione nel README.
Corretto
- Squadra — la card dell'allenatore nella Rosa è collassata come quella dei giocatori (nome e ruolo in riga chiusa, data di nascita solo aprendo il dettaglio) invece di mostrare subito tutto.
- Squadra — uno scroll verticale veloce nella tab Stats non fa più scattare per errore il cambio tab verso Obiettivi.
- Turno palloni — gli eventi generici (es. cena di squadra) non entrano più nel turno palloni: niente più proposta automatica, promemoria push o conteggio per eventi che non sono allenamenti o partite.
[1.1.0] - 2026-09-27
Aggiunto
- Avviso certificati in scadenza — in Home, giallo nei 7 giorni prima e nero dopo la
scadenza del certificato medico. Gli admin vedono i nomi di tutta la rosa (non
cliccabile); il giocatore interessato vede solo il proprio e il tap apre
/profilo?tab=documenti. Calcolato al volo dacertificato_scadenza: nessuna migration, nessuna push (DD-035).
[1.0.0] - 2026-09-24
Prima versione stabile. Oltre al ruolo allenatore riunisce il lavoro fatto dalla 0.9.2: centro notifiche in-app, messaggi dell'admin e la nuova Gestione eventi a calendario.
Aggiunto
- Ruolo allenatore — l'admin registra un allenatore da
/admin(tipo «Allenatore», con l'email Gmail) e lui si collega al primo accesso come i giocatori. Gestisce gli eventi e sollecita le presenze; ha un profilo ridotto (dati personali e foto, senza stagione e badge), compare in Squadra con la dicitura «Allenatore» e non vede badge né cacche. Migrationm20_ruolo_allenatore_enumem21_ruolo_allenatore(DD-034). - Centro notifiche in-app — lo storico delle notifiche dentro l'app, indipendente dalla
push: messaggi dell'admin, promemoria automatici 24 ore e 3 ore prima di un evento, turno
palloni e sollecito presenze. Ogni notifica si toglie con uno swipe o con la ×. Migration
m17_notifiche_utente(DD-030). - Messaggi dell'admin — dalla tab Notifiche della dashboard l'admin manda un messaggio libero a tutta la squadra o a un solo giocatore; la tab elenca anche chi non ha le notifiche attive.
- Gestione eventi a calendario —
/eventiè una griglia mensile: si tocca un giorno per vederne gli eventi e crearne, modificarne o eliminarne uno. Prima di salvare la modifica di un evento esistente compare una conferma, come per l'eliminazione. - Backup completo — uno script scarica schema e dati del database e i file dello
storage, per poter ripartire se si perde Supabase o Vercel (vedi
PORTABILITA.md).
Modificato
- Notifiche in-app — il numero delle non lette è un pallino rosso sull'avatar del profilo, al posto della campanella in alto a destra. Toccando il pallino si apre l'elenco (leggi ed elimina), toccando l'avatar si va al profilo come prima.
- Campionato — l'header riporta la stagione delle gare CSI (es. «Stagione 2025/26») e lo storico partite è diviso per stagione.
- Gestione eventi — tolta la lista "Eventi in calendario": resta solo il calendario mensile, che si scorre anche con lo swipe come quello della squadra.
- Gestione eventi — nel form il giorno toccato sul calendario è già fissato: resta da scegliere solo l'ora («Cambia» per spostare l'evento in un altro giorno). Il campo «Luogo» di un nuovo evento parte vuoto invece che con «Palestra Comunale».
Corretto
- Squadra — la data di nascita inserita dal proprio Profilo compare a tutta la squadra
(e nei compleanni del Calendario) invece di «Invalid Date»; allineati anche i profili
compilati prima della correzione. Migration
m18_nascita_pubblica_giocatori_squadraem19_backfill_nascita_da_profili_esistenti(DD-031). - Squadra — la rosa non si ricalcola più a ogni render mentre i voti MVP si caricano.
[0.9.2] - 2026-09-10
Aggiunto
- Dashboard amministratore — nuova tab "Notifiche" che mostra quanti giocatori hanno le notifiche push attive e chi sono.
Modificato
- Dashboard amministratore — le sezioni impilate diventano un menu di tab scorrevole a pillole (come Squadra e Campionato); nell'elenco Profili resta aperta una sola scheda alla volta.
- Profilo — testi dei campi amministrativi semplificati (label email, rimossa la nota su chi vede quei dati).
Rimosso
- Le dipendenze e il codice legati all'editor Lovable (login social e reporting errori verso l'editor): l'app non ci gira più.
[0.9.1] - 2026-09-10
Modificato
- Storico partite — ogni scheda mostra il logo accanto al nome di entrambe le squadre (CRAP e avversario), risultato e parziali in ordine casa–ospite (verde/rosso restano vittoria/sconfitta CRAP) e un chevron a destra per chiarire che la riga apre il dettaglio.
[0.9.0] - 2026-09-09
Prima versione pre-release: lo sviluppo precedente non era versionato a parte, quindi questa release riunisce tutto ciò che l'app fa oggi in produzione.
Aggiunto
- Gestione squadra — rosa dei giocatori con ruoli e dati anagrafici di base.
- Profilo Giocatore — dati personali e amministrativi, documento d'identità, certificato medico (caricamento, scadenza, stato, download) e foto tessera in un'unica schermata, sia lato giocatore sia lato amministratore; lo storico dei certificati resta un'estensione futura.
- Gestione tesseramenti CSI — raccolta dei dati richiesti dal CSI, tracciamento di chi è già tesserato (numero e data tessera) ed export CSV per il tesseramento.
- Calendario — eventi di allenamento e partita, con schermata di dettaglio dedicata.
- Presenze — conferma o rifiuto della partecipazione a un evento, visibile a tutta la squadra al posto di chat e fogli condivisi.
- Serie di presenze — tre serie (presenze, conferme, allenamenti) calcolate sui dati reali della rosa.
- Scout Live — un solo referente alla volta registra in tempo reale le azioni di gioco durante la partita.
- Badge — gamification con gradi bronzo/argento/oro, badge segreti e badge social votati tra compagni.
- Pagelle — voto tra compagni (1-10) a fine partita, con media personale e di squadra.
- Votazione MVP — elezione del migliore in campo della partita tramite voto tra compagni, un voto a testa.
- Obiettivi di squadra — traguardi collettivi che avanzano con presenze, risposte alle convocazioni, pagelle e risultati di campionato.
- Turno palloni — rotazione condivisa e promemoria di chi porta e riporta i palloni ad allenamenti e partite.
- Notifiche push — promemoria intelligenti su un unico opt-in per dispositivo.
- Dashboard amministratore — vista aggregata su tesseramenti, certificati, presenze e dati della rosa, con download CSV.
- Collegamento CSI — classifica di campionato e Coppa, storico partite e dettaglio di ogni gara (formazioni, storico scontri diretti, probabilità di vittoria calcolata dal CSI) letti in tempo reale dal portale ufficiale Livescore CSI Bologna, senza inserimento manuale da parte degli amministratori.
- Infortuni — conteggio degli eventi saltati per infortunio, riusando lo stato di presenza già registrato per le convocazioni.
Sicurezza
- Autenticazione tramite Google via Supabase Auth, unico metodo di accesso; permessi differenziati per ruolo (giocatore/amministratore) su tabelle e route.