Aller au contenu principal
Retour aux cas clients

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)

Page d'accueil publique de Spike Series avec matchs en direct, régions et prochains tournois

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