Docs: file di supporto in ARCHITECTURE e riga Codice nelle decisioni

Cita con percorso completo i 28 file di src/ che nessun documento nominava e
aggiunge la riga Codice a 21 decisioni, ricavata dai file che le citano.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5.5 committed 2026-11-15 18:55:46 +01:00
1 parent f9c6263662
commit 4c8791fa2c
22 files changed
+68 -21

No files matched your search

+26
View File
@@ -30,6 +30,32 @@ test/ suite di test (unit, integration, end-to-end)
docs/ documentazione ufficiale docs/ documentazione ufficiale
``` ```
### File di supporto
I file che i documenti dei moduli non citano, con il loro scopo:
| File | Cosa fa |
| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `src/routes/__root.tsx` | Radice delle route: meta, viewport (`viewport-fit=cover` per le safe area su iOS) e layout comune |
| `src/routes/benvenuto.tsx` | Ingresso dopo il login: si arriva solo da loggati e con uno slot collegato (DD-011) |
| `src/routes/api/public/keepalive.ts` | Lettura minima chiamata dal Cron di Vercel per evitare la pausa del progetto Supabase free tier |
| `src/routes/api/public/apri-sondaggio.ts` | Avviso «sondaggio pre-partita aperto», lanciato da un admin dalla pagina partita |
| `src/routes/api/public/notifica-personalizzata.ts` | Messaggio push libero a un giocatore o a tutti, con storico in-app (M17) |
| `src/routes/api/public/notifiche-attive.ts` | Elenco dei giocatori con almeno un dispositivo iscritto alle push (solo admin) |
| `src/lib/notifiche-attive.server.ts`, `src/lib/notifiche-admin.ts` | Lato server dell'elenco sopra; hook client dell'elenco e dell'invio push libero |
| `src/lib/eventi-visibili.ts` | Gli eventi che l'utente corrente può vedere (calendario, home, elenco) |
| `src/lib/presenze-mese-core.ts` | Calcolo puro della percentuale di presenze dell'ultimo mese, separato dagli hook |
| `src/lib/error-capture.ts`, `src/lib/error-page.ts` | Cattura dell'errore lato server e pagina di errore statica |
| `src/lib/utils.ts` | `cn()`: unisce classi CSS condizionali risolvendo i conflitti di Tailwind |
| `src/integrations/supabase/types.ts` | Tipi generati dallo schema: non si modificano a mano |
| `src/integrations/supabase/auth-attacher.ts`, `src/integrations/supabase/auth-middleware.ts`, `src/integrations/supabase/client.server.ts` | File generati: il browser allega il token alle chiamate server, il server le autentica; `client.server.ts` ha il client con service role. Non si modificano a mano |
| `src/integrations/supabase/client-nuove-tabelle.ts` | Accesso tipizzato alle tabelle che `types.ts` generato non include ancora |
| `src/components/crapp/Avatar.tsx`, `src/components/crapp/BottomNav.tsx`, `src/components/crapp/BarraSottosezioni.tsx` | Foto del giocatore (con ricarica forzata), barra di navigazione a 4 voci, sottosezioni con pannello animato |
| `src/components/crapp/ProfiloAmministrativo.tsx` | Campi del profilo condivisi tra giocatore e dashboard admin (DD-017) |
| `src/components/crapp/ScoutReport.tsx` | Lettura dello scout di una partita: squadra, set per set, dettaglio per giocatore |
| `src/components/motion/Barra.tsx`, `src/components/motion/Numero.tsx`, `src/components/motion/Reveal.tsx` | Barra di avanzamento a molla, contatore animato, comparsa graduale all'ingresso nel viewport |
| `src/components/ui/drawer.tsx`, `src/components/ui/sonner.tsx` | Le due primitive shadcn in uso (drawer di vaul e toast) |
## Punti fermi ## Punti fermi
- **Routing**: file-based in `src/routes/`. `src/routeTree.gen.ts` è **generato**, non si - **Routing**: file-based in `src/routes/`. `src/routeTree.gen.ts` è **generato**, non si
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-007 — Badge calcolati dall’app, non salvati nel database # DD-007 — Badge calcolati dall’app, non salvati nel database
**Data:** origine progetto **Data:** origine progetto
**Stato:** Accettata **Stato:** Accettata
**Codice:** `src/lib/profili-core.ts`
**Contesto** **Contesto**
I badge dipendono da statistiche già disponibili (presenze, MVP, cacche, ecc.). Salvare ogni badge sbloccato nel database aggiungerebbe complessità senza beneficio immediato. I badge dipendono da statistiche già disponibili (presenze, MVP, cacche, ecc.). Salvare ogni badge sbloccato nel database aggiungerebbe complessità senza beneficio immediato.
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-011 — Autenticazione reale prima del profilo amministrativo completo # DD-011 — Autenticazione reale prima del profilo amministrativo completo
**Data:** agosto 2026 **Data:** agosto 2026
**Stato:** Accettata **Stato:** Accettata
**Codice:** `src/lib/auth-route.server.ts`, `src/lib/auth.ts`, `src/lib/crapp-data.ts`, `src/lib/ruoli.ts`, `src/routes/__root.tsx`, `src/routes/benvenuto.tsx`, `supabase/migrations/20260831120000_m4_solo_autenticati.sql`, `supabase/migrations/20260901140000_m6_avatar_giocatori.sql`, `supabase/migrations/20260924120100_m21_ruolo_allenatore.sql`
**Contesto** **Contesto**
Oggi l’app identifica l’utente con la selezione del giocatore da una lista, senza login. Documenti, certificati e dati personali richiedono sapere _chi_ sta operando e impedire accessi non autorizzati. Oggi l’app identifica l’utente con la selezione del giocatore da una lista, senza login. Documenti, certificati e dati personali richiedono sapere _chi_ sta operando e impedire accessi non autorizzati.
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-013 — Portabilità: l’app non deve dipendere da servizi esclusivi # DD-013 — Portabilità: l’app non deve dipendere da servizi esclusivi
**Data:** luglio 2026 **Data:** luglio 2026
**Stato:** Accettata **Stato:** Accettata
**Codice:** `src/integrations/supabase/client-nuove-tabelle.ts`
**Contesto** **Contesto**
La squadra potrebbe voler cambiare hosting, database o fornitore auth in futuro. La squadra potrebbe voler cambiare hosting, database o fornitore auth in futuro.
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-017 — L'amministratore può compilare i dati al posto del giocatore # DD-017 — L'amministratore può compilare i dati al posto del giocatore
**Data:** agosto 2026 **Data:** agosto 2026
**Stato:** Accettata **Stato:** Accettata
**Codice:** `src/components/crapp/ProfiloAmministrativo.tsx`, `src/lib/giocatori-squadra.ts`, `src/routes/admin.tsx`, `supabase/migrations/20260831170000_correzione_schema_profili_giocatore.sql`, `supabase/migrations/20260906120000_m11_scritture_per_ruolo.sql`
**Contesto** **Contesto**
Il modulo Profilo Giocatore era costruito su un confine netto: ognuno scrive solo la propria riga, l'amministratore legge e scarica. Nella pratica quel confine blocca il lavoro che il modulo doveva togliere: se metà squadra non compila i propri dati, l'export per il tesseramento CSI resta incompleto e l'admin torna a chiedere le informazioni in chat — esattamente ciò che CrAPP deve eliminare. Inoltre le docs assegnavano già agli admin la gestione dei dati squadra (nome, cognome, numero, ruolo) e il reset del collegamento all'account (DD-016 regola 2), senza che esistesse una schermata per farlo. Il modulo Profilo Giocatore era costruito su un confine netto: ognuno scrive solo la propria riga, l'amministratore legge e scarica. Nella pratica quel confine blocca il lavoro che il modulo doveva togliere: se metà squadra non compila i propri dati, l'export per il tesseramento CSI resta incompleto e l'admin torna a chiedere le informazioni in chat — esattamente ciò che CrAPP deve eliminare. Inoltre le docs assegnavano già agli admin la gestione dei dati squadra (nome, cognome, numero, ruolo) e il reset del collegamento all'account (DD-016 regola 2), senza che esistesse una schermata per farlo.
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-025 — Il promemoria palloni lo manda l'admin, per un evento # DD-025 — Il promemoria palloni lo manda l'admin, per un evento
**Data:** 6 settembre 2026 **Data:** 6 settembre 2026
**Stato:** Accettata **Stato:** Accettata
**Codice:** `src/lib/palloni-core.ts`, `src/routes/api/public/promemoria-palloni.ts`
**Contesto** **Contesto**
`promemoria-palloni` era disegnata per un cron quotidiano: calcolava chi è di turno **oggi** e `promemoria-palloni` era disegnata per un cron quotidiano: calcolava chi è di turno **oggi** e
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-028 — Soglia minima di campione per Media voto e MVP in home # DD-028 — Soglia minima di campione per Media voto e MVP in home
**Data:** 9 settembre 2026 **Data:** 9 settembre 2026
**Stato:** Accettata **Stato:** Accettata
**Codice:** `src/lib/pagelle.ts`
**Contesto** **Contesto**
Un audit della sezione «Colpo d'occhio» in home (`index.tsx`, StatTile Presenze/Media Un audit della sezione «Colpo d'occhio» in home (`index.tsx`, StatTile Presenze/Media
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-034 — L'allenatore è uno slot della squadra con tipo diverso, non un giocatore # DD-034 — L'allenatore è uno slot della squadra con tipo diverso, non un giocatore
**Data:** 24 settembre 2026 **Data:** 24 settembre 2026
**Stato:** Accettata (implementata con le migration M20 e M21) **Stato:** Accettata (implementata con le migration M20 e M21)
**Codice:** `src/components/crapp/EventoCard.tsx`, `src/components/crapp/Pagelle.tsx`, `src/components/crapp/ProfiloAmministrativo.tsx`, `src/components/crapp/PromemoriaPalloni.tsx`, `src/components/crapp/RosaPresenze.tsx`, `src/components/crapp/SondaggioCacche.tsx`, `src/components/crapp/VotazioneMvp.tsx`, `src/components/crapp/VotoSocial.tsx`, `src/lib/auth-route.server.ts`, `src/lib/cacche.ts`, `src/lib/giocatori-squadra.ts`, `src/lib/presenze.ts`, `src/lib/profili-core.ts`, `src/lib/rosa.ts`, `src/lib/ruoli.ts`, `src/lib/user-store.ts`, `src/routes/admin.tsx`, `src/routes/api/public/apri-sondaggio.ts`, `src/routes/eventi.tsx`, `src/routes/index.tsx`, `src/routes/partita.$id.tsx`, `src/routes/profilo.tsx`, `src/routes/squadra.tsx`, `supabase/migrations/20260924120000_m20_ruolo_allenatore_enum.sql`, `supabase/migrations/20260924120100_m21_ruolo_allenatore.sql`, `supabase/migrations/20260929180000_m25_promemoria_solo_giocatori.sql`
**Contesto** **Contesto**
Serve un account per l'allenatore: deve gestire gli eventi (oggi solo admin, `m11`) ma non è Serve un account per l'allenatore: deve gestire gli eventi (oggi solo admin, `m11`) ma non è
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-035 — Avviso certificati: calcolato in Home, visibile solo al titolare e agli admin # DD-035 — Avviso certificati: calcolato in Home, visibile solo al titolare e agli admin
**Data:** 24 settembre 2026 **Data:** 24 settembre 2026
**Stato:** Accettata (implementata, versione 1.1.0). La soglia del giocatore è stata alzata a 30 giorni da [DD-041](DD-041.md); quella dello staff resta 7. [DD-046](DD-046.md) aggiunge l'avviso per chi non ha caricato il certificato. **Stato:** Accettata (implementata, versione 1.1.0). La soglia del giocatore è stata alzata a 30 giorni da [DD-041](DD-041.md); quella dello staff resta 7. [DD-046](DD-046.md) aggiunge l'avviso per chi non ha caricato il certificato.
**Codice:** `src/components/crapp/AvvisoCertificati.tsx`, `src/lib/profili-core.ts`, `src/lib/ruoli.ts`
**Contesto** **Contesto**
Il certificato medico ha una data di scadenza (`profili_giocatore.certificato_scadenza`), ma Il certificato medico ha una data di scadenza (`profili_giocatore.certificato_scadenza`), ma
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-036 — Notifiche email via Gmail, da un worker Docker sull'host di casa # DD-036 — Notifiche email via Gmail, da un worker Docker sull'host di casa
**Data:** 29 settembre 2026 **Data:** 29 settembre 2026
**Stato:** Accettata **Stato:** Accettata
**Codice:** `mailer/mailer-core.ts`, `mailer/mailer.mjs`, `src/lib/preferenze-utente.ts`, `supabase/migrations/20260929120000_m22_notifiche_email.sql`
**Contesto** **Contesto**
Le notifiche di CrAPP arrivano solo con la push (che dipende da Chrome vivo in background, Le notifiche di CrAPP arrivano solo con la push (che dipende da Chrome vivo in background,
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-039 — L'allenatore non riceve i promemoria degli eventi # DD-039 — L'allenatore non riceve i promemoria degli eventi
**Data:** 29 settembre 2026 **Data:** 29 settembre 2026
**Stato:** Accettata **Stato:** Accettata
**Codice:** `supabase/migrations/20260929180000_m25_promemoria_solo_giocatori.sql`
**Contesto** **Contesto**
DD-034 stabilì che l'allenatore riceve i promemoria a 24 e 3 ore prima di un evento, sempre, convocato DD-034 stabilì che l'allenatore riceve i promemoria a 24 e 3 ore prima di un evento, sempre, convocato
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-040 — Promemoria con «oggi» o «domani», turno palloni e solleciti automatici # DD-040 — Promemoria con «oggi» o «domani», turno palloni e solleciti automatici
**Data:** 30 settembre 2026 **Data:** 30 settembre 2026
**Stato:** Accettata (implementata: migration `m26`, applicata in produzione il 30 settembre 2026, job, route e test). Il sollecito presenze è poi passato a un solo avviso a 24 ore da [DD-045](DD-045.md). Il turno palloni è poi passato a un solo avviso a 3 ore da [DD-042](DD-042.md). **Stato:** Accettata (implementata: migration `m26`, applicata in produzione il 30 settembre 2026, job, route e test). Il sollecito presenze è poi passato a un solo avviso a 24 ore da [DD-045](DD-045.md). Il turno palloni è poi passato a un solo avviso a 3 ore da [DD-042](DD-042.md).
**Codice:** `src/lib/palloni-core.ts`, `src/lib/presenze.ts`, `src/routes/api/public/sollecita-presenze.ts`, `supabase/migrations/20260930120000_m26_notifiche_automatiche.sql`
**Contesto** **Contesto**
Quattro notifiche su sei partivano da un pulsante premuto da un admin (DD-025 per i palloni): se nessuno Quattro notifiche su sei partivano da un pulsante premuto da un admin (DD-025 per i palloni): se nessuno
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-041 — Avviso certificati: il giocatore è avvisato un mese prima dello staff # DD-041 — Avviso certificati: il giocatore è avvisato un mese prima dello staff
**Data:** 1 ottobre 2026 **Data:** 1 ottobre 2026
**Stato:** Accettata (modifica la soglia di [DD-035](DD-035.md) per il solo giocatore) **Stato:** Accettata (modifica la soglia di [DD-035](DD-035.md) per il solo giocatore)
**Codice:** `src/components/crapp/AvvisoCertificati.tsx`, `src/lib/profili-core.ts`
**Contesto** **Contesto**
Con DD-035 giocatore e admin vedono l'avviso negli stessi 7 giorni prima della scadenza. Per Con DD-035 giocatore e admin vedono l'avviso negli stessi 7 giorni prima della scadenza. Per
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-042 — Turno palloni: un solo avviso, 3 ore prima # DD-042 — Turno palloni: un solo avviso, 3 ore prima
**Data:** 1 ottobre 2026 **Data:** 1 ottobre 2026
**Stato:** Accettata (migration `m27`, applicata in produzione il 1 ottobre 2026; modifica la parte «turno palloni» di [DD-040](DD-040.md)) **Stato:** Accettata (migration `m27`, applicata in produzione il 1 ottobre 2026; modifica la parte «turno palloni» di [DD-040](DD-040.md))
**Codice:** `supabase/migrations/20261001120000_m27_palloni_solo_3h.sql`
**Contesto** **Contesto**
DD-040 manda l'avviso del turno palloni a 12, 6 e 3 ore prima dell'evento: tre messaggi identici per DD-040 manda l'avviso del turno palloni a 12, 6 e 3 ore prima dell'evento: tre messaggi identici per
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-043 — Niente promemoria automatico a 24 e 3 ore prima degli eventi # DD-043 — Niente promemoria automatico a 24 e 3 ore prima degli eventi
**Data:** 1 ottobre 2026 **Data:** 1 ottobre 2026
**Stato:** Accettata (migration `m28`, applicata in produzione il 1 ottobre 2026; sostituisce il promemoria di **Stato:** Accettata (migration `m28`, applicata in produzione il 1 ottobre 2026; sostituisce il promemoria di
**Codice:** `supabase/migrations/20261001150000_m28_niente_promemoria_evento.sql`
[DD-030](DD-030.md), [DD-037](DD-037.md) e [DD-040](DD-040.md)) [DD-030](DD-030.md), [DD-037](DD-037.md) e [DD-040](DD-040.md))
**Contesto** **Contesto**
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-044 — Via la foto tessera dal profilo # DD-044 — Via la foto tessera dal profilo
**Data:** 1 ottobre 2026 **Data:** 1 ottobre 2026
**Stato:** Accettata (migration `m29`, applicata in produzione il 1 ottobre 2026) **Stato:** Accettata (migration `m29`, applicata in produzione il 1 ottobre 2026)
**Codice:** `supabase/migrations/20261001170000_m29_senza_foto_tessera.sql`
**Contesto** **Contesto**
Il profilo amministrativo chiedeva al giocatore una foto formato tessera (DD-016), per il Il profilo amministrativo chiedeva al giocatore una foto formato tessera (DD-016), per il
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-045 — Sollecito presenze: un solo avviso automatico, 24 ore prima # DD-045 — Sollecito presenze: un solo avviso automatico, 24 ore prima
**Data:** 1 ottobre 2026 **Data:** 1 ottobre 2026
**Stato:** Accettata (migration `m30`, applicata in produzione il 1 ottobre 2026; modifica la parte «sollecito presenze» **Stato:** Accettata (migration `m30`, applicata in produzione il 1 ottobre 2026; modifica la parte «sollecito presenze»
**Codice:** `supabase/migrations/20261001190000_m30_sollecito_solo_24h.sql`
di [DD-040](DD-040.md)) di [DD-040](DD-040.md))
**Contesto** **Contesto**
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-046 — Avviso certificati: anche chi non l'ha caricato # DD-046 — Avviso certificati: anche chi non l'ha caricato
**Data:** 4 ottobre 2026 **Data:** 4 ottobre 2026
**Stato:** Accettata (modifica [DD-035](DD-035.md): il certificato mancante non è più escluso dall'avviso) **Stato:** Accettata (modifica [DD-035](DD-035.md): il certificato mancante non è più escluso dall'avviso)
**Codice:** `src/components/crapp/AvvisoCertificati.tsx`, `src/lib/profili-core.ts`
**Contesto** **Contesto**
L'avviso certificati di DD-035 guarda solo la scadenza e salta chi non ha mai caricato il L'avviso certificati di DD-035 guarda solo la scadenza e salta chi non ha mai caricato il
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-047 — Notifica di compleanno # DD-047 — Notifica di compleanno
**Data:** 6 ottobre 2026 **Data:** 6 ottobre 2026
**Stato:** Accettata (migration `m31`, non ancora applicata in produzione; nasce dalla issue #11 «notifica») **Stato:** Accettata (migration `m31`, non ancora applicata in produzione; nasce dalla issue #11 «notifica»)
**Codice:** `supabase/migrations/20261006120000_m31_notifica_compleanno.sql`
**Contesto** **Contesto**
I compleanni si vedono solo aprendo il Calendario, dove `compleanniEventi()` li calcola dalla data di I compleanni si vedono solo aprendo il Calendario, dove `compleanniEventi()` li calcola dalla data di
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-050 — Avviso a admin e allenatori se una presenza cambia a meno di 6 ore dall'evento # DD-050 — Avviso a admin e allenatori se una presenza cambia a meno di 6 ore dall'evento
**Data:** 8 ottobre 2026 **Data:** 8 ottobre 2026
**Stato:** Implementata per admin e allenatori (migration `m32`, solo admin, applicata in produzione il 9 ottobre 2026; `m33`, anche allenatori) **Stato:** Implementata per admin e allenatori (migration `m32`, solo admin, applicata in produzione il 9 ottobre 2026; `m33`, anche allenatori)
**Codice:** `supabase/migrations/20261009120000_m32_presenza_modificata.sql`, `supabase/migrations/20261009150000_m33_presenza_modificata_allenatori.sql`
**Contesto** **Contesto**
Un giocatore può cambiare la risposta a un evento fino all'ultimo minuto. Chi organizza (admin e allenatore) Un giocatore può cambiare la risposta a un evento fino all'ultimo minuto. Chi organizza (admin e allenatore)
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-051 — Voto MVP definitivo e MVP a pari merito # DD-051 — Voto MVP definitivo e MVP a pari merito
**Data:** 26 ottobre 2026 **Data:** 26 ottobre 2026
**Stato:** Accettata (migration `m35` e `m36`) **Stato:** Accettata (migration `m35` e `m36`)
**Codice:** `supabase/migrations/20261026150000_m35_voto_mvp_definitivo.sql`, `supabase/migrations/20261026160000_m36_voto_mvp_presenti_e_orario.sql`
**Contesto** **Contesto**
Il voto MVP si poteva cambiare senza limiti e senza storico (`mvp.md`), e una parità in testa non Il voto MVP si poteva cambiare senza limiti e senza storico (`mvp.md`), e una parità in testa non
+2 -1
View File
@@ -1,7 +1,8 @@
# DD-052 — Voto MVP segreto, nome dal database e votazione che si chiude # DD-052 — Voto MVP segreto, nome dal database e votazione che si chiude
**Data:** 26 ottobre 2026 **Data:** 26 ottobre 2026
**Stato:** Accettata (migration `m37` e `m38`) **Stato:** Accettata (migration `m37` e `m38`)
**Codice:** `src/lib/mvp-voti.ts`, `supabase/migrations/20261026170000_m37_voto_mvp_segreto_e_chiusura.sql`, `supabase/migrations/20261026180000_m38_nome_votato_badge_social.sql`
**Contesto** **Contesto**
Dopo DD-051 il voto è definitivo e controllato a database, ma restavano tre difetti: chiunque poteva Dopo DD-051 il voto è definitivo e controllato a database, ma restavano tre difetti: chiunque poteva