Spike Series
Une plateforme pour faire tourner tout un circuit.
Des circuits régionaux VALORANT pour un organisateur européen : site public, portail de gestion et bot Discord, construits de zéro par VentuLabs avec la même stack et les mêmes garanties que nos propres produits.
- 4 839
- tests automatisés
- 8
- langues
- 197
- décisions d'architecture
- 67
- tables en base de données
- 1 200
- spectateurs simultanés, mesurés
En production sur spikeserieseu.es (S'ouvre dans un nouvel onglet)

Une plateforme pour faire tourner tout un circuit
Un site public pour les joueurs et les spectateurs, un portail de gestion pour l'organisateur et un bot Discord qui relie le tout en temps réel.
Moteur de compétition complet
Élimination simple et double, groupes, système suisse, ligue et GSL. Il génère les arbres et les classements et les recalcule tout seul après chaque résultat.
Vetos de cartes en direct
Les deux capitaines bannissent et choisissent les cartes à tour de rôle avec compte à rebours, en temps réel et sans recharger, avec l'historique de la série sous les yeux.
Check-in et déroulement du match
Check-in avant de jouer, reprogrammations avec créneaux proposés et acceptés entre capitaines, et déclaration du résultat par carte.
Chat connecté à Discord
Chat d'équipe et de match dans le site, avec rétention automatique, synchronisé avec les salons Discord du circuit.
Bot Discord intégré
Crée automatiquement les rôles et salons d'équipe et prévient par message privé des matchs, résultats et échéances, dans la langue de l'utilisateur.
Marché d'équipes et de joueurs
Un tableau où joueurs et équipes publient et trouvent une place avant la clôture des inscriptions.
Connexion avec Discord
Inscription et connexion avec le compte Discord du joueur, en plus de l'e-mail et du mot de passe avec session chiffrée.
Huit langues
Site, portail et contenu traduits en ES, EN, FR, PT, IT, DE, NL et TR, chaque langue ne chargeant que ses propres textes.
Score en direct
Lecture du score depuis la diffusion pour mettre à jour les matchs en direct sans intervention manuelle.
Maintenance sans coupure
Activée depuis le portail et transmise instantanément à ceux qui naviguent, sans recharger la page.
Support audité
L'équipe de support peut se connecter en tant qu'utilisateur pour l'aider, avec avertissement visible et journal complet de la session.
Conçu mobile d'abord
Chaque écran est pensé et testé d'abord à 390 px de large, de l'arbre au chat, avant d'être adapté à l'ordinateur.
Architecture technique
La même stack et les mêmes garanties que nos propres produits : tests, déploiement automatique et plusieurs organisateurs par instance dès le premier jour.
Frontend
- Next.js 16 avec App Router
- React 19
- TypeScript en mode strict
- Tailwind CSS 4
- 8 langues, chacune dans son propre paquet
- Mobile d'abord, testé à 390 px
Backend
- Composants serveur et routes d'API
- Sessions chiffrées et bcrypt
- Validation Zod sur tout ce qui modifie des données
- Direct par événements envoyés par le serveur
- Protection CSRF et limitation des requêtes
- Connexion avec Discord
Données
- PostgreSQL 16 avec Drizzle ORM
- 67 tables et 99 migrations
- Isolation par organisateur et par circuit
- Clés étrangères avec suppression contrôlée
- Déclencheurs de date de modification
- Migrations SQL versionnées
Moteur de compétition
- Bibliothèque pure, sans framework ni base de données
- Élimination simple et double, suisse, ligue et GSL
- Déterministe : le même tournoi génère le même arbre
- 100 % des lignes couvertes
- Classements et départages configurables
- Consommé uniquement par l'interface et le portail
Infrastructure
- Serveur Ubuntu 24.04 avec Node 22
- Nginx et PM2 avec plusieurs instances
- Certificats Let's Encrypt avec HSTS
- Déploiement depuis VentuHub avec sauvegarde préalable
- Vérification de santé et retour arrière automatique
- 1 200 spectateurs simultanés mesurés
Qualité
- 4 141 tests avec Vitest dans 405 fichiers
- 698 tests de bout en bout avec Playwright
- Trois projets : Chrome mobile, Safari mobile et ordinateur
- Un vrai Postgres dans les tests
- ESLint avec règles de qualité et cliquet
- Lighthouse 91, 100, 100 et 100 sur mobile
Des rôles distincts
Un capitaine ne peut pas toucher à une autre équipe. Un arbitre ne vérifie que les matchs qui lui reviennent.
Admin
Accès complet : utilisateurs, audit, paramètres de l'organisateur et maintenance.
Organisation
Gestion opérationnelle des circuits, tournois, inscriptions et équipes.
Arbitre
Vérifie les résultats des matchs qui lui sont attribués.
Capitaine
Son équipe : effectif, inscriptions, check-in, vetos et déclaration de résultat.
Joueur
Voit son équipe et ses matchs et modifie son propre profil.
Pas qu'un simple site de résultats
Des choix d'ingénierie qu'on ne voit pas d'habitude, mais qui donnent de la stabilité à une compétition en direct.
Un moteur de compétition en bibliothèque pure
Aucune dépendance au framework, à la base de données ni à l'horloge système : l'heure est injectée et le tirage utilise une graine, si bien que le même tournoi génère toujours le même arbre dans les tests.
Seule la langue active voyage jusqu'au navigateur
Chacune des huit langues est son propre paquet : le serveur connaît déjà la langue avant d'afficher la page et le client ne télécharge que celle-là.
Des matchs en direct sans recharger
Un seul flux d'événements par onglet signale résultats, vetos et changements de classement dès qu'ils surviennent, avec reconnexion automatique.
Une maintenance qui ne laisse personne en plan
Activée depuis le portail et transmise instantanément à ceux qui naviguent, sans qu'ils aient à rafraîchir pour le savoir.
Un support avec traçabilité complète
L'équipe de support peut se connecter en tant qu'utilisateur pour résoudre un incident, avec un avertissement permanent à l'écran et le journal de ce qu'elle a fait.
Plusieurs organisateurs dès le premier jour
Chaque organisateur et chaque circuit sont isolés dans la base de données : c'est ce qui transforme le prototype en produit réplicable.
Une capacité mesurée, pas estimée
Tests de charge avec des matchs en direct : 1 200 spectateurs simultanés avec des réponses sous 350 ms au 95e percentile.
Un déploiement avec retour arrière automatique
La compilation se prépare à part et entre d'un coup sur le serveur ; si le démarrage échoue, le système revient tout seul à la version précédente.
Des milliers de tests automatisés
Une couverture qui va du moteur de compétition aux parcours complets de capitaine et d'organisateur. Chaque déploiement est bloqué si quelque chose échoue.
- 4 141
- tests avec Vitest
- 405
- fichiers de test
- 698
- tests de bout en bout
- 3
- projets : deux mobiles et un ordinateur
Moteur de compétition
Arbres à élimination simple et double, suisse, ligue et GSL : exemptions correctes, classements stables et résultats impossibles rejetés.
Authentification et session
Connexion par e-mail et par Discord, session chiffrée, CSRF, limitation des tentatives et audit.
Isolation par organisateur
Séparation par organisateur et par circuit vérifiée au niveau des requêtes et de la base de données.
Matchs et direct
Check-in, reprogrammations, vetos de cartes, déclaration et vérification des résultats et flux d'événements en direct.
Langues et contenu
Les huit langues chargent ce qu'elles doivent et rien de plus : on vérifie qu'aucun client ne télécharge une langue qu'il n'utilise pas.
De bout en bout, mobile d'abord
Parcours complets de capitaine et d'organisateur sur un vrai Chrome, dans deux projets mobiles et un projet ordinateur, avec contrôles d'accessibilité.
Stack complète
Le même critère que pour nos propres produits : uniquement des outils modernes, maintenus et dotés d'une communauté active.
- Next.js 16
- React 19
- TypeScript 5
- Tailwind CSS 4
- Node.js 22
- PostgreSQL 16
- Drizzle ORM
- PGlite dans les tests
- Sessions chiffrées
- Zod
- discord.js
- Vitest
- Playwright
- ESLint 9
- SQL
- Bash
- Nginx
- PM2
- Ubuntu 24.04
- VentuHub
- Let's Encrypt
Besoin de quelque chose comme ça ?
Spike Series est du code maison construit sur mesure pour un organisateur de circuits VALORANT : sans templates, sans services tiers et avec la même rigueur technique que nous mettons dans nos produits.
Retour aux cas clients