Audit repo-wide: 44 dei 46 componenti in src/components/ui/ non erano
importati da nessuna schermata (tengo solo drawer.tsx e sonner.tsx, gli
unici referenziati). Con loro cadono 26 dipendenze diventate orfane
(radix-ui, react-hook-form, recharts, date-fns, embla-carousel, ecc.),
l'integrazione src/integrations/lovable/ (già segnalata come rimovibile
in CLAUDE.md ma mai tolta) e 11 export mai referenziati in src/lib e
src/components/crapp.
Verificato con tsc --noEmit e build: nessun riferimento rotto, bundle
runtime invariato (il codice era già escluso dal tree-shaking, quindi
qui si riduce solo il peso di installazione/manutenzione, non quello
spedito al browser).
Spiega che l'admin gating in-app ora passa da un vero login Strapi invece
del nome scelto, e che il limite di sicurezza (RLS Supabase ancora aperta)
resta, con puntatore allo schema auth dormiente già presente nelle migration.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Le azioni da referente (/scout, /eventi, sollecito presenze, export CSV
scout) non dipendono più da quale giocatore hai scelto di essere in
/benvenuto (chiunque poteva scegliere "Ivan Cacciari" senza password), ma
da un login reale contro l'account admin di Strapi (già usato per gestire
rosa/classifica/storico), verificato via /admin/login.
Nuovi src/lib/admin-auth.ts (loginAdmin/logoutAdmin/useAdminSession, sessione
locale di 8h) e src/components/crapp/AdminLogin.tsx (form riutilizzabile),
raggiungibile da /profilo e dalle schermate riservate. Rimossi adminNomi/
isAdmin da crapp-data.ts.
Resta un limite noto: questo protegge solo la UI dell'app, le tabelle
Supabase coinvolte hanno ancora RLS aperta e restano scrivibili in diretto
con la chiave anon — un fix più ampio (Supabase Auth + RLS reale) è
documentato ma non ancora fatto.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
bun non è nel PATH in ambienti sandbox (usare npx/bunx), il repo non è
prettier-clean ovunque (filtrare i falsi positivi preesistenti), e la porta
Postgres locale può differire dal default 5432 nei .env di sviluppo.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CLAUDE.md, docs/PORTABILITA.md e mem/features/cloud-efficienza.md riflettono
che rosa/classifica/storico partite vengono ora da Strapi (non più hardcoded)
e che lo scout finalizzato viene anche inviato a Strapi, oltre al localStorage.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nuova route server /api/public/scout-finale: proxy verso il content type
scout-match-finale con un token Strapi di sola scrittura, mai esposto al
client. Il salvataggio in localStorage (già chiamato da finePartita() in
scout.tsx nel commit precedente) resta la fonte per le statistiche; questo
invio è additivo e non bloccante, se fallisce la partita resta comunque
salvata sul device come già accadeva prima.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nuovi moduli src/lib/strapi-client.ts + rosa-base.ts/classifica-csi.ts/
storico-match.ts (hook TanStack Query, cache lunga, nessun polling). L'id
stabile gN diventa il campo `codice` su Strapi, per non rompere le FK verso
pagelle/cacche/mvp/palloni/presenze/azioni scout già chiavate su quella
stringa. isAdmin ora prende il Giocatore invece di un id, così non dipende
più dal roster. Rifattorizzati di conseguenza tutti i punti che importavano
`giocatori`/`classifica`/`storicoMatch` come array sincroni (componenti,
hook, due route server) per usare gli hook o un parametro esplicito.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Introduce lo stack Strapi dockerizzato (infra/strapi/), sullo stesso Postgres
dello stack Supabase con un database logico separato, dietro Caddy su /cms/*.
L'editing dei dati avviene solo nel pannello admin nativo di Strapi.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Passo-passo per avviare lo stack Supabase in locale e per il deploy in
produzione (dominio unico con routing /api/*, migrazioni, build/avvio
Node, job pianificati), coerente con i file infra aggiunti nel commit
precedente.
Stack Docker completo in infra/supabase/docker/ (vendored da supabase/supabase)
per svincolare dev e produzione da Lovable Cloud. Include override di
produzione che non espone porte pubblicamente e disattiva i servizi non
usati da CrAPP (Realtime, Storage, imgproxy, Edge Functions, pooler),
un Caddyfile con routing /api/* per un solo dominio, e i template .env
per app e stack. Forzo inoltre il preset Nitro a node-server in
vite.config.ts, dato che il default sarebbe Cloudflare Workers.
Il README precedente era la proposta iniziale del progetto (funzionalità
desiderate, comandi npm). Lo sostituisco con stack, funzionalità
effettivamente implementate e comandi bun corretti.
Il CLAUDE.md e la memory affermavano una sincronizzazione CSI e una
persistenza server-side dei risultati partita che non esistono nel
codice: la classifica è un array hardcoded (demo) e il risultato
scoutato vive solo nel localStorage di chi segna.