# TtA Goblin · stato e cose da fare

Aggiornato: 2026-09-01. Lo storico dettagliato sta nei commit e in `docs/`, qui c'è solo il presente.

## ✅ Fatto e in produzione
Tutto il V1 è **live** su <https://tta-goblin.vercel.app>:
vetrina (home, eventi, albo, regolamento, community), classifiche e ranking dal database,
registrazione e accesso, profilo, dashboard giocatore, **gestionale admin completo**
(crea evento da template, iscrizioni, seeding e generazione gironi e calendario, inserimento risultati,
classifiche con spareggio, proposte promo/retrocessione, chiusura stagione che scrive il Ranking),
**import delle classifiche dal CSV di CGE**, notifiche via cron, impostazione mobile-first.

Ranking storico: importate le 86 posizioni di AUT25 dal roster EST26.

**Audit del 2026-09-01**: 37 difetti confermati e sistemati, tra cui due che cancellavano un torneo
intero con un click (salvare un risultato su un girone importato da CGE; "Rigenera" a evento
avviato) e il claim del palmarès che avveniva prima della verifica email. Aggiunti reset password,
rispedizione del link di verifica e titoli di pagina, che mancavano del tutto.
Provati dal vivo: reset password completo, logout, claim del nick storico, guardie del gestionale.

## 🔴 Bloccanti prima di aprire alla community (azione Paolo)
- [ ] **`RESEND_API_KEY` su Vercel.** È il blocco vero: senza, la mail di verifica non parte e
      **chi si registra resta fuori senza capire perché**. Serve anche `EMAIL_FROM`.
- [ ] `CRON_SECRET` su Vercel, altrimenti l'endpoint delle notifiche risponde 503.
- [ ] Confermare gli URL di Telegram e del forum per `src/lib/content/community.ts`
      (candidati reali trovati sulla pagina CGE del torneo, mai inventati).

## 🟡 Da verificare insieme
- [x] ~~Auto-iscrizione del giocatore~~: provata il 2026-09-02, funziona (doppio click compreso).
- [x] ~~Cambio email~~: provato il 2026-09-02. Ha fatto emergere un 500 al secondo link,
      corretto in `8885438`.
- [x] ~~Mobile sulle pagine nuove~~: verificate a 375px, nessun overflow, niente da correggere.
- [ ] Import del ranking storico multi-stagione dal workbook (serve un export pulito del foglio
      "Andamento Ranking": il parsing automatico dell'xlsx è a rischio).
- [x] ~~Rimuovere l'utente di prova `AuditMobile375`~~: rimosso il 2026-10-12.

## 🧭 Decisioni aperte con gli organizzatori
- [ ] **Soglie promo/retrocessione della formula a 13** (Bolgia attuale): nessun template le
      definisce, quindi valgono i default 2/2 e la retrocessione extra invernale non scatta.
      Dal 2027 la formula passa ai minigironi, quindi forse non serve più: chiedere.
- [ ] **Formula 2027 a minigironi da 4: implementata il 2026-10-12** (`BOLGIA_4` breve e
      `BOLGIA_4_LUNGA`, regola del foglio "Bolgia a 4"). Da confermare con loro:
      - punti delle partite a 2: messo **7-0**, l'ultima proposta in chat (prima 9-0, poi 8-0);
      - il 2° di A1 che retrocede (RudyRunner era contrario): è una riga di config in `templates.ts`;
      - cosa fare del resto quando gli iscritti non sono multipli di 4: oggi finisce in un
        girone Coda senza calendario e alla chiusura resta in fondo al ranking, nell'ordine di
        partenza (prima del 2026-10-12 spariva dal ranking). Loro vorrebbero "assorbire il girone coda";
      - la penalità -2 per timeout vale solo se la applica CGE (con l'import arriva già dentro
        il punteggio; nell'inserimento manuale non c'è).
- [ ] **Fonte di verità dei risultati**: CGE (importiamo le classifiche e non ricalcoliamo) oppure
      inserimento completo da noi. Vedi `docs/08-integrazione-cge.md` §6.
- [ ] Se serve il **dettaglio partita** (avversari, punteggi cultura) dentro il portale: l'export CGE
      non lo contiene, servirebbe affiancare un secondo canale.
- [ ] Formula delle prossime stagioni (gironi da 13, 7 o 4). Non blocca: è **configurazione** di un
      evento, non codice. Vedi `docs/04-riforma-formula.md`.

## 🧱 Debito tecnico noto
- [ ] Engine `BRACKET_ELIMINAZIONE` e `A_SQUADRE` non implementati. Ma attenzione: su CGE il Duello
      **non è un bracket**, è una sequenza di stage con gironi da 2 e seeding manuale, quindi
      probabilmente basta il motore a gironi già esistente.
- [ ] Nessuna interfaccia per la gestione dei ruoli: si passa da SQL.
- [ ] Le date di avvio partita non si impostano da interfaccia, quindi le notifiche restano dormienti.
- [ ] Capitalizzazione dei nick incoerente tra roster e CGE (`sellux` contro `Sellux`): è un dato da
      normalizzare, non un difetto del codice.

## 💡 Idee
- [ ] Chiedere a CGE un accesso in lettura ai propri tornei citando il precedente TTA Pulse
      (`tournaments@czechgames.com`). Costo quasi nullo, aspettativa bassa.
- [ ] PWA e notifiche push.
- [ ] Branch separato del database Neon per lo sviluppo, oggi dev e produzione condividono lo stesso.
