Saltar al contenido principal
Volver a casos

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)

Portada pública de Spike Series con partidos en directo, regiones y próximos torneos

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