2026-08-07 15:36:02 +02:00
|
|
|
|
# Changelog
|
|
|
|
|
|
|
2026-09-09 13:31:39 +02:00
|
|
|
|
Le modifiche rilevanti di CrAPP sono documentate qui, in ordine di rilascio. Il formato
|
|
|
|
|
|
segue [Keep a Changelog](https://keepachangelog.com/it/1.1.0/): 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](ROADMAP.md); qui si
|
|
|
|
|
|
registra solo _quando_ una voce è stata rilasciata e con quale versione.
|
2026-08-07 15:36:02 +02:00
|
|
|
|
|
2026-09-24 15:00:19 +02:00
|
|
|
|
Le versioni sono sempre a tre cifre (`x.y.z`, mai `x.y`). Dalla `1.0.0` si segue il
|
|
|
|
|
|
[versionamento semantico](https://semver.org/lang/it/): `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.
|
2026-08-07 15:36:02 +02:00
|
|
|
|
|
2026-09-09 13:31:39 +02:00
|
|
|
|
## [Non rilasciato]
|
2026-09-06 22:11:26 +02:00
|
|
|
|
|
2026-09-30 14:03:50 +02:00
|
|
|
|
Le notifiche di turno palloni e sollecito presenze partono anche da sole, e i testi sono più formali.
|
|
|
|
|
|
La migration `m26` è verificata in locale e va applicata in produzione insieme a questa versione (DD-040).
|
|
|
|
|
|
|
|
|
|
|
|
### Aggiunto
|
|
|
|
|
|
|
|
|
|
|
|
- **Turno palloni automatico** — 12, 6 e 3 ore prima di allenamenti e partite con un incaricato confermato,
|
|
|
|
|
|
all'incaricato e a chi aveva i palloni all'evento precedente. Se l'incaricato cambia, chi era stato avvisato
|
|
|
|
|
|
riceve una sola volta «Turno palloni: incarico revocato». Arriva come push e nel centro notifiche, non per
|
|
|
|
|
|
email.
|
|
|
|
|
|
- **Sollecito presenze automatico** — 24, 12 e 6 ore prima dell'evento, ai convocati che in quel momento non
|
|
|
|
|
|
hanno risposto o hanno risposto «forse»; chi risponde smette di riceverlo. Un evento creato tardi riceve solo
|
|
|
|
|
|
il sollecito della sua fascia.
|
|
|
|
|
|
- Nuovo test di integrazione `notifiche-automatiche` sui job veri del database, più test unitari dei testi e
|
|
|
|
|
|
dei destinatari.
|
|
|
|
|
|
|
|
|
|
|
|
### Modificato
|
|
|
|
|
|
|
|
|
|
|
|
- **Testi delle notifiche** — promemoria con «domani» o «oggi», data, ora e luogo; turno palloni e sollecito
|
|
|
|
|
|
con righe etichettate (Evento, Data, Ora, Luogo, Incarico, Azione). Stessi testi per i pulsanti e per i job.
|
|
|
|
|
|
- **Sollecito manuale** — il pulsante «Sollecita» ora segue i convocati dell'evento, come l'automatico, invece
|
|
|
|
|
|
di tutti i giocatori attivi; il testo dice la risposta attuale e chi lo ha chiesto.
|
|
|
|
|
|
- Le righe del corpo di una notifica vanno a capo nel centro notifiche.
|
|
|
|
|
|
|
2026-09-29 15:07:47 +02:00
|
|
|
|
## [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 (migration
|
|
|
|
|
|
`m22_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 (tabella `preferenze_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](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](WORKER_EMAIL.md) (installazione, gestione,
|
|
|
|
|
|
diagnosi, prova in locale, spostamento su un altro host); catalogo delle notifiche in
|
|
|
|
|
|
[notifiche.md](modules/notifiche.md), con cosa le fa partire, a chi arrivano e su quali canali;
|
|
|
|
|
|
tabella delle notifiche dell'allenatore in [allenatore.md](modules/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.
|
|
|
|
|
|
|
2026-09-29 14:19:54 +02:00
|
|
|
|
### Modificato
|
|
|
|
|
|
|
2026-09-29 14:48:30 +02:00
|
|
|
|
- **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`.
|
2026-09-29 15:07:47 +02:00
|
|
|
|
- **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.
|
2026-09-29 14:19:54 +02:00
|
|
|
|
|
|
|
|
|
|
### 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.
|
|
|
|
|
|
|
2026-09-28 09:19:25 +02:00
|
|
|
|
## [1.1.1] - 2026-09-28
|
|
|
|
|
|
|
|
|
|
|
|
### Aggiunto
|
|
|
|
|
|
|
|
|
|
|
|
- **Keepalive giornaliero** — un Vercel Cron Job chiama `/api/public/keepalive` una volta
|
|
|
|
|
|
al giorno con una lettura minima, per evitare che il progetto Supabase free tier vada in
|
|
|
|
|
|
pausa dopo 7 giorni senza richieste API.
|
2026-09-28 11:01:46 +02:00
|
|
|
|
- **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.
|
2026-09-28 09:19:25 +02:00
|
|
|
|
|
|
|
|
|
|
### 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.
|
2026-09-28 10:40:16 +02:00
|
|
|
|
- **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.
|
2026-09-28 09:19:25 +02:00
|
|
|
|
|
2026-09-27 14:09:02 +02:00
|
|
|
|
## [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 da `certificato_scadenza`: nessuna migration,
|
|
|
|
|
|
nessuna push (DD-035).
|
|
|
|
|
|
|
2026-09-24 15:00:19 +02:00
|
|
|
|
## [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.
|
|
|
|
|
|
|
2026-09-24 14:54:43 +02:00
|
|
|
|
### 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.
|
|
|
|
|
|
Migration `m20_ruolo_allenatore_enum` e `m21_ruolo_allenatore` (DD-034).
|
2026-09-24 15:00:19 +02:00
|
|
|
|
- **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`).
|
2026-09-24 14:54:43 +02:00
|
|
|
|
|
2026-09-24 13:53:58 +02:00
|
|
|
|
### Modificato
|
|
|
|
|
|
|
2026-09-24 15:00:19 +02:00
|
|
|
|
- **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.
|
2026-09-24 14:01:55 +02:00
|
|
|
|
- **Campionato** — l'header riporta la stagione delle gare CSI (es. «Stagione 2025/26») e lo
|
|
|
|
|
|
storico partite è diviso per stagione.
|
2026-09-24 14:10:11 +02:00
|
|
|
|
- **Gestione eventi** — tolta la lista "Eventi in calendario": resta solo il calendario
|
2026-09-24 15:00:19 +02:00
|
|
|
|
mensile, che si scorre anche con lo swipe come quello della squadra.
|
2026-09-24 14:10:11 +02:00
|
|
|
|
- **Gestione eventi** — nel form il giorno toccato sul calendario è già fissato: resta da
|
2026-09-24 15:00:19 +02:00
|
|
|
|
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_squadra` e
|
|
|
|
|
|
`m19_backfill_nascita_da_profili_esistenti` (DD-031).
|
|
|
|
|
|
- **Squadra** — la rosa non si ricalcola più a ogni render mentre i voti MVP si caricano.
|
2026-09-24 13:53:58 +02:00
|
|
|
|
|
2026-09-10 14:41:46 +02:00
|
|
|
|
## [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ù.
|
|
|
|
|
|
|
2026-09-10 07:51:03 +02:00
|
|
|
|
## [0.9.1] - 2026-09-10
|
|
|
|
|
|
|
2026-09-09 21:01:49 +02:00
|
|
|
|
### 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.
|
|
|
|
|
|
|
2026-09-09 13:31:39 +02:00
|
|
|
|
## [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.
|
2026-09-06 22:11:26 +02:00
|
|
|
|
|
2026-09-06 23:23:35 +02:00
|
|
|
|
### Aggiunto
|
2026-09-06 19:30:49 +02:00
|
|
|
|
|
2026-09-09 13:31:39 +02:00
|
|
|
|
- **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.
|
2026-09-09 10:55:06 +02:00
|
|
|
|
|
2026-09-06 23:23:35 +02:00
|
|
|
|
### Sicurezza
|
2026-09-06 19:30:49 +02:00
|
|
|
|
|
2026-09-09 13:31:39 +02:00
|
|
|
|
- Autenticazione tramite Google via Supabase Auth, unico metodo di accesso; permessi
|
|
|
|
|
|
differenziati per ruolo (giocatore/amministratore) su tabelle e route.
|