Spike Series
Una plataforma para correr un circuito entero.
Circuitos regionales de VALORANT para un organizador europeo: web pública, portal de gestión y bot de Discord, construidos de cero por VentuLabs con el mismo stack y las mismas garantías que nuestros propios productos.
- 4.839
- pruebas automáticas
- 8
- idiomas
- 197
- decisiones de arquitectura
- 67
- tablas en la base de datos
- 1.200
- espectadores a la vez, medidos
En producción en spikeserieseu.es (Se abre en una pestaña nueva)

Una plataforma para correr un circuito entero
Web pública para jugadores y espectadores, portal de gestión para el organizador y un bot de Discord que conecta todo en tiempo real.
Motor de competición completo
Eliminación simple y doble, grupos, suizo, liga y GSL. Genera cuadros y clasificaciones y los recalcula solo tras cada resultado.
Vetos de mapas en directo
Los dos capitanes vetan y eligen mapas por turnos con cuenta atrás, en tiempo real y sin recargar, con el historial de la serie a la vista.
Check-in y flujo del partido
Check-in antes de jugar, reprogramaciones con franjas propuestas y aceptadas entre capitanes, y reporte de resultado por mapa.
Chat conectado a Discord
Chat de equipo y de partido dentro de la web, con retención automática, sincronizado con los canales de Discord del circuito.
Bot de Discord integrado
Crea roles y canales de equipo automáticamente y avisa por mensaje directo de partidos, resultados y plazos, en el idioma del usuario.
Mercado de equipos y jugadores
Tablón donde jugadores y equipos publican y encuentran hueco antes de que cierren las inscripciones.
Acceso con Discord
Alta y acceso con la cuenta de Discord del jugador, además de email y contraseña con sesión cifrada.
Ocho idiomas
Web, portal y contenido traducidos a ES, EN, FR, PT, IT, DE, NL y TR, con cada idioma cargando solo lo suyo.
Marcador en directo
Lectura del marcador desde la emisión para actualizar los partidos en directo sin intervención manual.
Mantenimiento sin corte
Se activa desde el portal y llega al instante a quien está navegando, sin recargar la página.
Soporte auditado
El equipo de soporte puede entrar como un usuario para ayudarle, con aviso visible y registro completo de la sesión.
Diseñado móvil primero
Cada pantalla se piensa y se prueba primero a 390 px de ancho, del cuadro al chat, antes de adaptarla a escritorio.
Arquitectura técnica
El mismo stack y las mismas garantías que nuestros propios productos: pruebas, despliegue automático y varios organizadores por instancia desde el primer día.
Frontend
- Next.js 16 con App Router
- React 19
- TypeScript en modo estricto
- Tailwind CSS 4
- 8 idiomas, cada uno con su propio paquete
- Móvil primero, probado a 390 px
Backend
- Componentes de servidor y rutas de API
- Sesiones cifradas y bcrypt
- Validación con Zod en todo lo que muta datos
- Directo con eventos del servidor
- Protección CSRF y límites de peticiones
- Acceso con Discord
Datos
- PostgreSQL 16 con Drizzle ORM
- 67 tablas y 99 migraciones
- Aislamiento por organizador y por circuito
- Claves foráneas con borrado controlado
- Disparadores de fecha de cambio
- Migraciones SQL versionadas
Motor de competición
- Librería pura, sin framework ni base de datos
- Eliminación simple y doble, suizo, liga y GSL
- Determinista: el mismo torneo genera el mismo cuadro
- Cobertura del 100 % de líneas
- Clasificaciones y desempates configurables
- Solo la interfaz y el portal lo consumen
Infraestructura
- Servidor Ubuntu 24.04 con Node 22
- Nginx y PM2 con varias instancias
- Certificados Let's Encrypt con HSTS
- Despliegue desde VentuHub con copia previa
- Comprobación de salud y vuelta atrás automática
- 1.200 espectadores simultáneos medidos
Calidad
- 4.141 pruebas con Vitest en 405 ficheros
- 698 pruebas de extremo a extremo con Playwright
- Tres proyectos: móvil Chrome, móvil Safari y escritorio
- Postgres real en las pruebas
- ESLint con reglas de calidad y trinquete
- Lighthouse 91, 100, 100 y 100 en móvil
Roles diferenciados
Un capitán no puede tocar otro equipo. Un árbitro solo verifica los partidos que le tocan.
Admin
Acceso completo: usuarios, auditoría, ajustes del organizador y mantenimiento.
Organización
Gestión operativa de circuitos, torneos, inscripciones y equipos.
Árbitro
Verifica los resultados de los partidos que tiene asignados.
Capitán
Su equipo: plantilla, inscripciones, check-in, vetos y reporte de resultado.
Jugador
Ve su equipo y sus partidos y edita su propio perfil.
No es solo una web de resultados
Decisiones de ingeniería que normalmente no se ven, pero que dan estabilidad a una competición en directo.
Motor de competición como librería pura
Sin dependencias del framework, de la base de datos ni de la hora del sistema: la hora se inyecta y el sorteo usa una semilla, así que el mismo torneo siempre genera el mismo cuadro en las pruebas.
Solo el idioma activo viaja al navegador
Cada uno de los ocho idiomas es su propio paquete: el servidor ya sabe el idioma antes de pintar la página y el cliente solo descarga ese.
Partidos en directo sin recargar
Un único flujo de eventos por pestaña avisa de resultados, vetos y cambios de clasificación en cuanto ocurren, con reconexión automática.
Mantenimiento sin dejar a nadie a medias
Se activa desde el portal y llega al instante a quien está navegando, sin que tenga que refrescar para enterarse.
Soporte con trazabilidad completa
El equipo de soporte puede entrar como un usuario para resolver una incidencia, con un aviso permanente en pantalla y el registro de qué hizo.
Varios organizadores desde el primer día
Cada organizador y cada circuito quedan aislados en la base de datos: es lo que convierte el prototipo en un producto replicable.
Capacidad medida, no estimada
Pruebas de carga con partidos en directo: 1.200 espectadores simultáneos con respuestas por debajo de 350 ms en el percentil 95.
Despliegue con vuelta atrás automática
La compilación se prepara aparte y entra de golpe en el servidor; si el arranque falla, el sistema vuelve solo a la versión anterior.
Miles de pruebas automáticas
Cobertura desde el motor de competición hasta los flujos completos de capitán y organizador. Cada despliegue se bloquea si algo falla.
- 4.141
- pruebas con Vitest
- 405
- ficheros de prueba
- 698
- pruebas de extremo a extremo
- 3
- proyectos: dos móviles y escritorio
Motor de competición
Cuadros de eliminación simple y doble, suizo, liga y GSL: descansos correctos, clasificaciones estables y resultados imposibles rechazados.
Autenticación y sesión
Acceso con email y con Discord, sesión cifrada, CSRF, límites de intentos y auditoría.
Aislamiento por organizador
Separación por organizador y por circuito verificada a nivel de consulta y de base de datos.
Partidos y directo
Check-in, reprogramaciones, vetos de mapas, reporte y verificación de resultados y el flujo de eventos en directo.
Idiomas y contenido
Los ocho idiomas cargan lo que deben y nada más: se prueba que ningún cliente descargue un idioma que no está usando.
Extremo a extremo, móvil primero
Flujos completos de capitán y de organizador sobre Chrome real, en dos proyectos móviles y uno de escritorio, con comprobaciones de accesibilidad.
Stack completo
El mismo criterio que en nuestros propios productos: solo herramientas modernas, mantenidas y con comunidad activa.
- Next.js 16
- React 19
- TypeScript 5
- Tailwind CSS 4
- Node.js 22
- PostgreSQL 16
- Drizzle ORM
- PGlite en pruebas
- Sesiones cifradas
- Zod
- discord.js
- Vitest
- Playwright
- ESLint 9
- SQL
- Bash
- Nginx
- PM2
- Ubuntu 24.04
- VentuHub
- Let's Encrypt
¿Necesitas algo así?
Spike Series es código propio construido a medida para un organizador de circuitos de VALORANT: sin plantillas, sin servicios de terceros y con el mismo rigor técnico que ponemos en nuestros productos.
Volver a casos