Spike Series
Una piattaforma per far girare un intero circuito.
Circuiti regionali di VALORANT per un organizzatore europeo: sito pubblico, portale di gestione e bot Discord, costruiti da zero da VentuLabs con lo stesso stack e le stesse garanzie dei nostri prodotti.
- 4839
- test automatici
- 8
- lingue
- 197
- decisioni di architettura
- 67
- tabelle nel database
- 1200
- spettatori in contemporanea, misurati
In produzione su spikeserieseu.es (Si apre in una nuova scheda)

Una piattaforma per far girare un intero circuito
Sito pubblico per giocatori e spettatori, portale di gestione per l'organizzatore e un bot Discord che collega tutto in tempo reale.
Motore di competizione completo
Eliminazione singola e doppia, gironi, svizzero, campionato e GSL. Genera tabelloni e classifiche e li ricalcola da solo dopo ogni risultato.
Veto delle mappe in diretta
I due capitani escludono e scelgono le mappe a turno con conto alla rovescia, in tempo reale e senza ricaricare, con lo storico della serie in vista.
Check-in e flusso della partita
Check-in prima di giocare, riprogrammazioni con fasce orarie proposte e accettate tra capitani, e report del risultato per mappa.
Chat collegata a Discord
Chat di squadra e di partita dentro il sito, con conservazione automatica, sincronizzata con i canali Discord del circuito.
Bot Discord integrato
Crea automaticamente ruoli e canali di squadra e avvisa con un messaggio diretto di partite, risultati e scadenze, nella lingua dell'utente.
Mercato di squadre e giocatori
Bacheca dove giocatori e squadre pubblicano annunci e trovano posto prima che chiudano le iscrizioni.
Accesso con Discord
Registrazione e accesso con l'account Discord del giocatore, oltre a email e password con sessione cifrata.
Otto lingue
Sito, portale e contenuti tradotti in ES, EN, FR, PT, IT, DE, NL e TR, con ogni lingua che carica solo il suo.
Punteggio in diretta
Lettura del punteggio dalla trasmissione per aggiornare le partite in diretta senza intervento manuale.
Manutenzione senza interruzioni
Si attiva dal portale e arriva all'istante a chi sta navigando, senza ricaricare la pagina.
Supporto tracciato
Il team di supporto può entrare come un utente per aiutarlo, con avviso visibile e registro completo della sessione.
Progettato mobile first
Ogni schermata viene pensata e testata prima a 390 px di larghezza, dal tabellone alla chat, prima di adattarla al desktop.
Architettura tecnica
Lo stesso stack e le stesse garanzie dei nostri prodotti: test, deploy automatico e più organizzatori per istanza dal primo giorno.
Frontend
- Next.js 16 con App Router
- React 19
- TypeScript in modalità strict
- Tailwind CSS 4
- 8 lingue, ognuna con il suo pacchetto
- Mobile first, testato a 390 px
Backend
- Server component e route API
- Sessioni cifrate e bcrypt
- Validazione con Zod su tutto ciò che modifica dati
- Diretta con eventi dal server
- Protezione CSRF e rate limiting
- Accesso con Discord
Dati
- PostgreSQL 16 con Drizzle ORM
- 67 tabelle e 99 migrazioni
- Isolamento per organizzatore e per circuito
- Chiavi esterne con cancellazione controllata
- Trigger di data di modifica
- Migrazioni SQL versionate
Motore di competizione
- Libreria pura, senza framework né database
- Eliminazione singola e doppia, svizzero, campionato e GSL
- Deterministico: lo stesso torneo genera lo stesso tabellone
- Copertura del 100% delle righe
- Classifiche e spareggi configurabili
- Solo l'interfaccia e il portale lo usano
Infrastruttura
- Server Ubuntu 24.04 con Node 22
- Nginx e PM2 con più istanze
- Certificati Let's Encrypt con HSTS
- Deploy da VentuHub con backup preventivo
- Health check e rollback automatico
- 1.200 spettatori in contemporanea misurati
Qualità
- 4.141 test con Vitest in 405 file
- 698 test end-to-end con Playwright
- Tre progetti: Chrome mobile, Safari mobile e desktop
- Postgres reale nei test
- ESLint con regole di qualità e ratchet
- Lighthouse 91, 100, 100 e 100 su mobile
Ruoli distinti
Un capitano non può toccare un'altra squadra. Un arbitro verifica solo le partite che gli spettano.
Admin
Accesso completo: utenti, audit, impostazioni dell'organizzatore e manutenzione.
Organizzazione
Gestione operativa di circuiti, tornei, iscrizioni e squadre.
Arbitro
Verifica i risultati delle partite che gli sono assegnate.
Capitano
La sua squadra: roster, iscrizioni, check-in, veti e report del risultato.
Giocatore
Vede la sua squadra e le sue partite e modifica il proprio profilo.
Non è solo un sito di risultati
Decisioni di ingegneria che di solito non si vedono, ma che danno stabilità a una competizione in diretta.
Motore di competizione come libreria pura
Senza dipendenze dal framework, dal database né dall'ora di sistema: l'ora viene iniettata e il sorteggio usa un seed, così lo stesso torneo genera sempre lo stesso tabellone nei test.
Solo la lingua attiva viaggia fino al browser
Ognuna delle otto lingue è un pacchetto a sé: il server conosce la lingua prima di disegnare la pagina e il client scarica solo quella.
Partite in diretta senza ricaricare
Un unico flusso di eventi per scheda avvisa di risultati, veti e cambi di classifica appena succedono, con riconnessione automatica.
Manutenzione senza lasciare nessuno a metà
Si attiva dal portale e arriva all'istante a chi sta navigando, senza dover aggiornare la pagina per accorgersene.
Supporto con tracciabilità completa
Il team di supporto può entrare come un utente per risolvere un problema, con un avviso permanente sullo schermo e il registro di cosa ha fatto.
Più organizzatori dal primo giorno
Ogni organizzatore e ogni circuito restano isolati nel database: è ciò che trasforma il prototipo in un prodotto replicabile.
Capacità misurata, non stimata
Test di carico con partite in diretta: 1.200 spettatori in contemporanea con risposte sotto i 350 ms al 95º percentile.
Deploy con rollback automatico
La build si prepara a parte ed entra sul server in un colpo solo; se l'avvio fallisce, il sistema torna da solo alla versione precedente.
Migliaia di test automatici
Copertura dal motore di competizione ai flussi completi di capitano e organizzatore. Ogni deploy si blocca se qualcosa fallisce.
- 4.141
- test con Vitest
- 405
- file di test
- 698
- test end-to-end
- 3
- progetti: due mobile e uno desktop
Motore di competizione
Tabelloni a eliminazione singola e doppia, svizzero, campionato e GSL: bye corretti, classifiche stabili e risultati impossibili rifiutati.
Autenticazione e sessione
Accesso con email e con Discord, sessione cifrata, CSRF, limite ai tentativi e audit.
Isolamento per organizzatore
Separazione per organizzatore e per circuito verificata a livello di query e di database.
Partite e diretta
Check-in, riprogrammazioni, veto delle mappe, report e verifica dei risultati e il flusso di eventi in diretta.
Lingue e contenuti
Le otto lingue caricano ciò che devono e niente di più: si verifica che nessun client scarichi una lingua che non sta usando.
End-to-end, mobile first
Flussi completi di capitano e organizzatore su Chrome reale, in due progetti mobile e uno desktop, con controlli di accessibilità.
Stack completo
Lo stesso criterio dei nostri prodotti: solo strumenti moderni, mantenuti e con una community attiva.
- Next.js 16
- React 19
- TypeScript 5
- Tailwind CSS 4
- Node.js 22
- PostgreSQL 16
- Drizzle ORM
- PGlite nei test
- Sessioni cifrate
- Zod
- discord.js
- Vitest
- Playwright
- ESLint 9
- SQL
- Bash
- Nginx
- PM2
- Ubuntu 24.04
- VentuHub
- Let's Encrypt
Ti serve qualcosa del genere?
Spike Series è codice nostro costruito su misura per un organizzatore di circuiti di VALORANT: senza template, senza servizi di terzi e con lo stesso rigore tecnico che mettiamo nei nostri prodotti.
Torna ai casi