Documento di specifiche

First Pick

Il circuito nazionale italiano per il Magic: The Gathering limited (draft) competitivo giocato dal vivo. Aggrega i draft dei negozi verificati, fa iscrivere i giocatori, gestisce il torneo dall'inizio alla fine e alimenta un'unica classifica nazionale: i Punti Shard.

Aggiornato al 19 luglio 2026 Ambito Italia Superfici app mobile + 2 portali web Dominio firstpick.fun

Come leggere questo documento

First Pick è in costruzione. Ogni sezione dichiara esplicitamente lo stato di ciò che descrive: Costruito funziona ed è verificato · In corso in lavorazione · Pianificato deciso ma non ancora costruito · Da definire scelta ancora aperta. Nulla in questa pagina è una promessa commerciale.

Definizione

Cos'è First Pick

In corso

Non è un gioco e non è un social: è l'infrastruttura competitiva attorno a un gioco che si continua a giocare fisicamente, in negozio.

Il draft (o limited) è il formato in cui i giocatori aprono buste sigillate, si passano le carte e costruiscono un mazzo sul momento. Si gioca dal vivo, quasi sempre in un negozio. Oggi chi vuole giocarne uno deve scoprire l'evento passaparola, e quando l'ha giocato quel risultato non conta da nessuna parte.

First Pick chiude quel cerchio: trova il draft, iscriviti, gioca, e il risultato conta in una classifica nazionale unica che porta a un campionato annuale.

Il problema, lato giocatore

Manca massa critica: non trovi abbastanza persone con cui draftare. L'offerta è frammentata tra gruppi Facebook, siti dei singoli negozi e strumenti generalisti che il limited lo coprono male. E nessuno tiene il conto di quanto sei bravo.

Il problema, lato negozio

Riempire i tavoli e farsi conoscere da giocatori che non sanno nemmeno che quel draft esista. Un evento visibile in app è pubblicità implicita e porta gente nuova dentro al negozio.

La promessa al giocatore

«Trova un draft vicino a te, iscriviti, e scala la classifica nazionale dei migliori draftatori.»

La promessa al negozio

«Ospita eventi visibili in app, riempi i tavoli, gestisci il torneo senza fogli di carta.»

I principi che guidano il prodotto

  • Poche cose per schermata, ben pensate. L'app non deve sembrare fare mille cose, anche se le fa. Leggibilità massima, estetica premium — non minimal spinto.
  • Prima il cerchio di base, poi i dettagli. Si costruisce uno scheletro che funziona da capo a fondo, poi lo si arricchisce.
  • Integrità per costruzione. I match esistono solo dentro eventi reali, con check-in, di organizzatori verificati: non servono controlli sospettosi a valle.
  • Premi mai in denaro. Montepremi e prize pool sono in prodotti Magic. È una scelta deliberata, non un ripiego.
  • Configurabilità. Quote, parametri della classifica, soglie e set si regolano dal portale admin, senza toccare il codice.
  • Dati in UE. Infrastruttura interamente self-hosted su server proprio a Francoforte.

Perimetro

Cosa NON è

Costruito

Il perimetro è una scelta, non un limite di tempo. Queste cose sono state escluse deliberatamente.

Non è un luogo dove si gioca

First Pick non fa giocare a Magic online. I match sono fisici, al tavolo. L'app gestisce iscrizione, check-in, abbinamenti, risultati e classifica.

Non è un trova-eventi generalista

Solo Magic, solo limited/draft, solo eventi di organizzatori verificati. Niente tornei di altri formati o di altri giochi.

Non è un social network

Il livello social è volutamente leggero: si condivide un momento, si mette like, si commenta, e finisce lì. Niente thread, niente post lunghi.

Niente messaggi privati tra giocatori

Escluso di proposito: le chat dirette porterebbero moderazione, tutela dei minori e un prodotto diverso da quello che vogliamo fare.

Niente clan né gilde

Valutate e scartate esplicitamente. La competizione è individuale.

Non richiede l'affiliazione WPN

Essere un negozio affiliato Wizards è solo un'informazione in registrazione, non un requisito: club e associazioni non restano fuori. L'idoneità la valuta First Pick caso per caso.

Non c'è ancora: rimandato dopo la v1

Deciso, non dimenticato. Ogni voce è stata tolta consapevolmente dalla prima versione.

Pagamento in app Mappa eventi + filtri avanzati Distanza GPS "vicino a te" Sezione Learning (guide, video) Draft casual tra amici Collezione carte Eventi creati dai giocatori Missioni ed emblemi Sotto-classifiche città/regione Statistiche su matchup e archetipi Eventi ricorrenti per il negozio Client web per i giocatori Login Google/Apple Autenticazione a due fattori Espansione fuori dall'Italia

Destinatari

Per chi è: tre ruoli, tre interfacce

I ruoli sono mutuamente esclusivi: un giocatore non è un organizzatore, e viceversa. Ognuno ha la propria superficie.

Giocatore In corso

Chiunque giochi a Magic e voglia fare un draft. Nessuna barriera d'ingresso: si registra dall'app, si iscrive, gioca. È la classifica a fare la selezione.

  • Interfaccia: app mobile (iOS + Android)
  • L'account si crea solo dentro l'app
  • Minori ammessi, con consenso dei genitori sotto i 14 anni

Organizzatore Costruito

Chi organizza eventi validi per la classifica: per lo più negozi di carte, ma il ruolo è unico. Accesso solo dopo verifica manuale di First Pick.

  • Interfaccia: portale web
  • Registrazione con ragione sociale, P.IVA, indirizzo, IBAN
  • Accesso con email e password (niente Google/Apple)

Admin (team First Pick) In corso

Strumento interno: approva gli organizzatori, supervisiona eventi e risultati, modera, e regola i parametri del sistema da interfaccia.

  • Interfaccia: portale web interno
  • Ogni decisione lascia una traccia immutabile
  • Autenticazione a due fattori prevista come obbligatoria

Flusso end-to-end

Come funziona: il "cerchio di base"

In corso

Sei passi. Quando girano tutti insieme su un evento reale, il prodotto è lanciato. Oggi siamo a metà del terzo.

  1. L'organizzatore si registra e viene approvato Costruito

    Il negozio si registra dal portale con i dati fiscali; resta su una schermata-cancello finché First Pick non decide. L'admin può approvare, rifiutare o chiedere altre informazioni (in questo caso il negozio corregge e re-invia). Ogni decisione richiede una nota e finisce nel registro di audit.

  2. L'organizzatore crea e pubblica l'evento Costruito

    Set, data e ora, quota d'iscrizione, numero di tavoli, scadenza iscrizioni, soglia di annullamento, premi. Alla pubblicazione il sistema genera un codice evento di 4 caratteri e crea i tavoli. Su un evento pubblicato che ha già iscritti, quota, data e set vengono congelati.

  3. I giocatori si iscrivono — «paghi in negozio» In corso

    Il giocatore vede i draft pubblicati (negozio, città, data, quota, posti liberi), apre il dettaglio e si iscrive. Nessun pagamento in app: l'iscrizione prenota il posto, si salda al banco la sera dell'evento. Può disiscriversi finché non ha fatto check-in. Il motore è pronto e verificato; le schermate dell'app sono in lavorazione.

  4. Check-in e avvio del torneo Pianificato

    In negozio il giocatore fa self check-in (con il codice evento come alternativa) e salda la quota. L'organizzatore vede chi è arrivato, aggiunge eventuali walk-in, toglie gli assenti e avvia il torneo. I tavoli sono pod da 6 a 8 giocatori; sotto i 6 alla soglia prevista il tavolo si annulla.

  5. Si gioca: abbinamenti svizzeri e risultati Pianificato

    Svizzero senza eliminazione, 3 round, match al meglio dei 3. Il vincitore inserisce il risultato e l'avversario conferma; il silenzio vale conferma dopo il tempo previsto, e l'organizzatore risolve le contestazioni.

  6. Punti Shard e classifica nazionale Pianificato

    Ogni match assegna o toglie Punti Shard in base alla forza dell'avversario. Il totale aggiorna la classifica nazionale e lo stadio del giocatore, e concorre alla qualificazione al campionato annuale.

Superficie 1

L'app del giocatore

App nativa iOS e Android (React Native + Expo). Tema scuro, cinque sezioni. Qui sotto le schermate reali già costruite e i mockup di quelle in arrivo.

First Pick

Competitive MTG draft

Accedi Crea account
tu@email.com
••••••••••
Accedi
Accesso Costruito

Bentornato

Luca

Punti Shard

1.284

Arcanista · 3° in Veneto

Il tuo prossimo draft

Gruul Games · ven 12 set, 20:30

Paghi in negozio · codice MN5S

Account

luca@email.com

Home Costruito

Draft vicini

Eventi

VeronaTutte

Draft serale · TDM

Gruul Games · Verona

ven 12 set, 20:30 · 15 €

11 posti liberi su 16

Draft del giovedì

Cardhouse · Verona

gio 18 set, 21:00 · 18 €

2 posti liberi su 24

Draft di lancio

Tana del Drago · Padova

Esaurito

Eventi Pianificato

‹ Eventi

Draft serale

Gruul Games · Verona

Quandoven 12 set, 20:30
SetTarkir: Dragonstorm
Quota15 €
Posti11 / 16 liberi
Iscrizionientro gio 11 set

Premi

Booster ai primi 4 · prodotto del negozio

Iscriviti — paghi in negozio

Nessun pagamento ora: paghi al banco la sera dell'evento.

Dettaglio + iscrizione Pianificato

Round 2 di 3 · in corso

Il tuo tavolo

Tavolo 2 · posto 5

Luca vs Marco

Bo3 · risultato da inserire

Inserisci il risultato

2 – 0 2 – 1 1 – 2 0 – 2

L'avversario conferma; senza risposta vale dopo 24 h.

Classifica evento

1. Marco 2-0 · 2. Luca 1-1 · 3. Sara 1-1

Torneo live + risultati Pianificato

Le 5 sezioni

  • Home — Shard, stadio, prossimo draft
  • Eventi — scoperta e iscrizione
  • Adunanza — feed leggero della community
  • Classifica — ranking nazionale
  • Profilo — storico e identità

Già costruito

  • Registrazione e accesso, tutto dentro l'app
  • Password dimenticata e reimpostazione
  • Home con dati reali dal server
  • Sessione sicura nel portachiavi del telefono

In arrivo

  • Lista e dettaglio eventi, iscrizione
  • Le mie iscrizioni + codice evento
  • Check-in e vista torneo live
  • Classifica e profilo completi

Le schermate marcate «pianificato» sono mockup: rappresentano il comportamento previsto, non un'interfaccia già esistente.

Superfici 2 e 3

I portali web

Costruito

Due applicazioni web separate: una per gli organizzatori, una interna per il team. Stesso design system dell'app, tema chiaro.

organizer.firstpick.fun/eventi/12
First Pick
Eventi Dashboard Profilo negozio Account

Draft serale · TDM

ven 12 set, 20:30 · quota 15 € · codice MN5S

Pubblicato
11iscritti
2tavoli
5posti liberi
4da saldare

Tavoli (pod da 6-8)

Tavolo 18 / 8 · confermato
Tavolo 23 / 8 · sotto il minimo

Iscritti

GiocatorePagamentoPresenzaTavolo
Luca B.SaldatoCheck-in1
Marco V.DovutoIscritto1
Sara T. walk-inSaldatoCheck-in2
Chiudi iscrizioni Aggiungi walk-in Annulla evento
Portale organizer — dettaglio evento Costruito
admin.firstpick.fun/organizers
First Pick
Organizers Eventi Classifica Report

Organizer

Verifica e approvazione dei negozi

3 in attesa
In attesaApprovati Info richiesteRifiutati
NegozioCittàP. IVAInviataStato
Gruul GamesVerona012345678918 lugIn attesa
CardhouseVerona987654321017 lugInfo richieste
Tana del DragoPadova112233445516 lugApprovato

Gruul Games — domanda

Ragione socialeGruul Games S.r.l. IndirizzoVia Roma 12, Verona Contattoinfo@gruulgames.it WPN store
Approva Chiedi info Rifiuta

Ogni decisione richiede una nota e finisce nel registro di audit.

Portale admin — approvazione organizer Costruito

Portale organizzatore

  • Registrazione del negozio e schermata di verifica
  • Elenco eventi con stato del ciclo di vita
  • Creazione, pubblicazione e annullamento evento
  • Dettaglio con tavoli, iscritti, pagamenti e presenze
  • Aggiunta di walk-in la sera stessa
  • Console del torneo live — pianificata

Portale admin (interno)

  • Coda di approvazione degli organizzatori con audit trail
  • Supervisione di tutti gli eventi, con annullamento d'autorità
  • Correzione di risultati e punteggi — pianificata
  • Moderazione dei contenuti — pianificata
  • Parametri di sistema configurabili — pianificati

Il cuore competitivo

Punti Shard, stadi e campionato

Pianificato

La classifica non è un accessorio: è il prodotto. I Punti Shard sono un Elo vero, calcolato sui match giocati davvero al tavolo.

Come si guadagnano

Come negli scacchi: battere un giocatore più forte dà più punti, perdere contro uno più debole ne toglie di più. Si può scendere, con un limite minimo a zero. Non è un contatore di presenze: è una misura di quanto sei bravo.

Una sola classifica

Nazionale e unica: niente sotto-classifiche per città, regione o negozio nella prima versione. L'orientamento attuale è una classifica all-time, senza azzeramenti stagionali.

I 10 stadi

1 Apprendista 0 – 149 Shard
2 Iniziato 150 – 349 Shard
3 Incantatore 350 – 549 Shard
4 Mago 550 – 799 Shard
5 Stregone 800 – 999 Shard
6 Arcanista 1000 – 1149 Shard

Muro élite

7 Arcimago 1150 – 1649 Shard
8 Arcimago Cremisi 1650 – 2249 Shard
9 Arcimago Dorato 2250 – 3049 Shard
10 Arcimago Ancestrale 3050 + Shard

The Final Draft

Il campionato annuale che chiude la stagione: i migliori della classifica si sfidano dal vivo, con montepremi in prodotti Magic — mai in denaro. Numero di finalisti, sede e data non sono ancora confermati, e l'attivazione dipende dalla validazione legale.

Parametri ancora da fissare

I valori esatti del calcolo (peso delle vittorie, moltiplicatori, bonus di piazzamento) non sono decisi: vanno prima simulati su larga scala. Qualunque numero circolante oggi è un'ipotesi di lavoro.

Sotto il cofano

Specifiche tecniche

Costruito

Monorepo unico, un solo backend per tutte e tre le superfici, infrastruttura interamente self-hosted.

Stack per superficie

SuperficieTecnologiaNote
App giocatoreJavaScript · React Native + Expo (SDK 54)App nativa iOS/Android, non una webview. Navigazione a file con expo-router.
Portali organizer e adminJavaScript · React + ViteSingle-page app servite da nginx, con TanStack Router e Query.
Backend APIGo 1.26 · chi · pgxBinario unico, SQL scritto a mano (niente ORM), migrazioni incluse nel binario.
DatabasePostgreSQL 16Backup automatici pianificati.
IdentitàZitadel v4 self-hostedIl browser e l'app non vedono mai una schermata Zitadel: media tutto il backend.
Design systemCSS con token OKLCH · StyleSheet nativoUna sola sorgente di colori per web e mobile.
InfrastrutturaDocker + Traefik su server proprio (Francoforte)Deploy automatico a ogni modifica del ramo principale.

Modello dati

Sei tabelle oggi in produzione. Il dominio del torneo (round, match, risultati, movimenti Shard) è progettato ma non ancora a schema.

TabellaContenuto
usersUtenti con ruolo (admin · organizer · player). L'unico ponte con il sistema d'identità è un identificativo opaco.
organizersDati del negozio e stato della pratica: in attesa · info richieste · approvato · rifiutato · sospeso.
eventsEvento e ciclo di vita: bozza · pubblicato · iscrizioni chiuse · live · concluso · annullato. Include codice evento, quota, soglie.
event_tablesI tavoli (pod) generati alla pubblicazione, 8 posti ciascuno.
registrationsIscrizioni su tre assi indipendenti: pagamento (dovuto/saldato/rimborsato), presenza (iscritto/check-in/assente), tavolo assegnato. Copre anche i walk-in senza account.
audit_logRegistro immutabile in sola aggiunta di ogni azione sensibile: chi, cosa, quando, su quale entità.

API

Una sola API REST per tutti i client, con controlli d'accesso a tre livelli.

GruppoChi puòCosa fa
Pubblicochiunque, con limiti di frequenzaRegistrazione organizzatore e giocatore, accesso, rinnovo sessione, uscita, reimpostazione password.
Autenticatoqualsiasi utenteIdentità corrente, cambio password.
Giocatorequalsiasi utenteElenco draft pubblicati (filtro città), dettaglio, iscrizione e disiscrizione, le proprie iscrizioni col codice evento.
Organizzatoreruolo organizer approvatoProfilo negozio, elenco e gestione eventi, pubblicazione, chiusura iscrizioni, annullamento, walk-in.
Adminruolo adminCoda organizzatori e decisioni, supervisione eventi, annullamento d'autorità.
Sondeinfrastruttura/healthz processo attivo · /readyz database raggiungibile.

Sicurezza

Identità e permessi

  • Accesso mediato dal backend: nessun client parla direttamente col sistema d'identità
  • Il ruolo si legge dal database, mai dal token: non è manipolabile dal client
  • Ogni operazione su un evento verifica che l'organizzatore sia approvato
  • Un evento di un altro organizzatore risponde «non trovato»: non ne rivela l'esistenza
  • All'uscita la sessione viene revocata anche sul server

Difese applicative

  • Limiti di frequenza per IP su tutti gli endpoint pubblici
  • Risposte e tempi uniformi su accesso e reimpostazione: non si può scoprire se un'email è registrata
  • Tutte le query parametrizzate: nessuna injection
  • Intestazioni di sicurezza e policy dei contenuti su API e portali
  • Registro di audit immutabile sulle azioni sensibili
  • Verifica formale di IBAN e partita IVA in registrazione

Un audit di sicurezza completo (revisione del codice più test dal vivo sui tre client) è stato eseguito il 19 luglio 2026: nessuna vulnerabilità critica o alta; i sette interventi di irrobustimento individuati sono stati applicati e verificati.

Linguaggio visivo

Design system

Costruito

Un'unica sorgente di verità per colori, tipografia e spaziature, condivisa fra web e app nativa.

PrimaryBlu profondo — azioni, identità
AccentOro metallico — premi, evidenza
ShardAzzurro luminoso — la gemma, i punti
InkSuperfici scure dell'app

Tipografia

Cinzel — serif inciso, per il marchio, i titoli e le etichette in maiuscolo. Solo stringhe brevi.
Manrope — sans ad alta leggibilità, per tutto il resto. Cifre tabellari sui dati.

Principi visivi

  • Superfici piatte, profondità con ombre blu tenui
  • I pulsanti poggiano su un bordo solido che si comprime alla pressione
  • Movimento discreto: molle riservate ai momenti di ricompensa
  • La gemma Shard è il motivo grafico principale

Le grafiche definitive (gemma illustrata, stemmi dei 10 stadi, icone) sono in produzione: il sistema le accoglie in appositi spazi già predisposti, senza rifare i layout.

A che punto siamo

Stato di avanzamento

In corso

Aggiornato al 19 luglio 2026.

Funziona ed è verificato Costruito

  • Infrastruttura completa in produzione con deploy automatico
  • Accesso, cambio e reimpostazione password su tutte e tre le superfici
  • Registrazione e approvazione degli organizzatori
  • Ciclo di vita completo dell'evento lato organizzatore
  • Supervisione eventi lato admin
  • Motore di iscrizione dei giocatori
  • App giocatore funzionante su dispositivo reale
  • Design system condiviso web + nativo

In lavorazione o pianificato

  • Schermate eventi e iscrizione nell'app In corso
  • Check-in e console del torneo live Pianificato
  • Abbinamenti svizzeri e inserimento risultati Pianificato
  • Calcolo dei Punti Shard e classifica Pianificato
  • Invio reale delle email Pianificato
  • Pubblicazione su App Store e Play Store Pianificato

Onestà intellettuale

Questioni ancora aperte

Da definire

Scelte non ancora prese. Sono elencate perché un documento di specifiche che le nasconde non serve a nessuno.

Modello economico
Come il servizio si sostiene è in fase di definizione con i consulenti fiscali. Nella prima versione non si paga in app: la quota si salda in negozio. Qualunque cifra circolante oggi è un'ipotesi di lavoro.
Struttura dei premi
Il principio è fermo — mai denaro, solo prodotti — ma l'impianto va confermato con un legale prima di attivare il campionato.
Classifica
All-time (orientamento attuale) oppure stagioni con ridimensionamento periodico: decisione non presa.
Parametri Shard
I valori del calcolo richiedono una simulazione su larga scala prima di essere fissati.
Programma fedeltà
Un meccanismo di punti spendibili in negozio è previsto come concetto, ma condizioni e funzionamento sono aperti.
Campionato annuale
Numero di finalisti, formula, sede e periodo non sono confermati.
Pubblicazione sugli store
Gli account sviluppatore Apple e Google non sono ancora attivi: oggi l'app si prova tramite strumenti di sviluppo.