# TtA: piattaforma tornei *Through the Ages* (Tana dei Goblin) Progetto **pro bono** per la community Tana dei Goblin: vetrina pubblica (classifiche, ranking, albo, regolamento, notizie) e gestionale per gli organizzatori, che sostituisce il loro file Excel. Le partite restano su **CGE Online** (l'app ufficiale): da lì si importano le classifiche col CSV di "Download results". Stato, decisioni aperte e cose da fare: [`tasks/todo.md`](tasks/todo.md). ## Stack e ambienti - **SvelteKit** (Svelte 5) su **Vercel**, funzioni in `fra1`; **Neon Postgres + Drizzle**; **Better Auth**; email con **Resend** da `tornei@tornei.duebytes.it`; Tailwind; editor delle notizie **Tiptap**. - **Sito vero**: https://tta-goblin.vercel.app, database `neondb`, condiviso anche col dev locale (`.env`): ogni dato creato in prova lì è reale. - **Copia di prova** per gli organizzatori: https://tta-goblin-prova.vercel.app, progetto Vercel `tta-goblin-prova`, database `neondb_prova` (stesso progetto Neon). Striscia rossa con `VITE_AMBIENTE=prova`. ## Comandi - Deploy sito vero: `vercel --prod --yes` (il push su `main` **non** pubblica). - Deploy copia di prova: `VERCEL_ORG_ID=team_2UKAhhce0M7kHBllr8uoez3R VERCEL_PROJECT_ID=prj_onM5N5AmWIwCYEZHqtq6p7086Nut vercel deploy --prod --yes`. Ogni modifica va pubblicata su tutti e due. - Test: `npx vitest run` (unitari); integrazione **sulla copia**, mai su produzione: `npx vitest run --config vitest.integration.config.ts --mode prova` (legge `.env.prova.local`, gitignorato). - Tipi: `npm run check`. - Migrazioni: `node --env-file=.env node_modules/drizzle-kit/bin.cjs generate --name X`, poi `migrate`. Sulla copia: `node --env-file=.env --env-file=.env.prova.local node_modules/drizzle-kit/bin.cjs migrate`. **In produzione la lancia Paolo** (a Claude è bloccata), e va fatta **prima** del deploy che la usa. - Prova in locale contro la copia: `vite build`, poi `node --env-file= node_modules/vite/bin/vite.js preview --port 4188 --strictPort` con `BETTER_AUTH_URL=http://localhost:4188` nel file (porta diversa ⇒ "Invalid origin"; la 4173 è di un altro progetto). - Script in `scripts/` (tutti con prova a secco, `--scrivi` per scrivere): `import-ranking-csv.mjs` (ranking di una stagione da `nick;posizione[;serie]`), `rinomina-gironi-piramide.mjs`. ## Convenzioni - Italiano ovunque, anche nei commenti; codice in inglese o italiano come il file intorno. - Testi dell'interfaccia e dei documenti senza em-dash né lessico gonfiato; per i messaggi che Paolo manda agli organizzatori la skill `scrivere-come-paolo`. - Ogni operazione distruttiva chiede conferma e dice cosa si perde; i messaggi d'esito stanno accanto al bottone. - Dati di prova: si creano sulla copia o su localhost e si cancellano alla fine. - Trappole tecniche già incontrate: nella memoria di progetto (`tta-goblin-platform`). ## Documentazione - `docs/01…08`, l'analisi iniziale (dominio, stato precedente, requisiti, modello dati e integrazione CGE): si consulta ancora `08-integrazione-cge.md`. - `docs/plans/`: piani e handoff datati (`AAAA-MM-GG-.md`). - Manuale per gli organizzatori: nel sito, `/admin/documentazione` (va aggiornato quando cambia un flusso). - `data/sorgenti/`: snapshot di Trello, regolamento e mappa del workbook Excel (giugno 2026).