Saltar para o conteúdo principal
Voltar aos casos

Spike Series

Uma plataforma para gerir um circuito inteiro.

Circuitos regionais de VALORANT para um organizador europeu: site público, portal de gestão e bot de Discord, construídos de raiz pela VentuLabs com a mesma stack e as mesmas garantias dos nossos próprios produtos.

4839
testes automáticos
8
idiomas
197
decisões de arquitetura
67
tabelas na base de dados
1200
espetadores em simultâneo, medidos

Em produção em spikeserieseu.es (Abre num novo separador)

Página inicial pública da Spike Series com partidas em direto, regiões e próximos torneios

Uma plataforma para gerir um circuito inteiro

Site público para jogadores e espetadores, portal de gestão para o organizador e um bot de Discord que liga tudo em tempo real.

  • Motor de competição completo

    Eliminação simples e dupla, grupos, suíço, liga e GSL. Gera quadros e classificações e recalcula-os sozinho após cada resultado.

  • Vetos de mapas em direto

    Os dois capitães vetam e escolhem mapas à vez com contagem decrescente, em tempo real e sem recarregar, com o histórico da série à vista.

  • Check-in e fluxo da partida

    Check-in antes de jogar, reagendamentos com horários propostos e aceites entre capitães, e reporte do resultado por mapa.

  • Chat ligado ao Discord

    Chat de equipa e de partida dentro do site, com retenção automática, sincronizado com os canais de Discord do circuito.

  • Bot de Discord integrado

    Cria automaticamente cargos e canais de equipa e avisa por mensagem direta de partidas, resultados e prazos, no idioma do utilizador.

  • Mercado de equipas e jogadores

    Quadro onde jogadores e equipas publicam anúncios e encontram lugar antes de as inscrições fecharem.

  • Acesso com Discord

    Registo e acesso com a conta de Discord do jogador, além de email e palavra-passe com sessão cifrada.

  • Oito idiomas

    Site, portal e conteúdo traduzidos para ES, EN, FR, PT, IT, DE, NL e TR, com cada idioma a carregar apenas o que é seu.

  • Resultado em direto

    Leitura do resultado a partir da emissão para atualizar as partidas em direto sem intervenção manual.

  • Manutenção sem interrupção

    Ativa-se a partir do portal e chega de imediato a quem está a navegar, sem recarregar a página.

  • Suporte auditado

    A equipa de suporte pode entrar como um utilizador para o ajudar, com aviso visível e registo completo da sessão.

  • Pensado primeiro para o telemóvel

    Cada ecrã é pensado e testado primeiro a 390 px de largura, do quadro ao chat, antes de ser adaptado ao desktop.

Arquitetura técnica

A mesma stack e as mesmas garantias dos nossos próprios produtos: testes, deploy automático e vários organizadores por instância desde o primeiro dia.

Frontend

  • Next.js 16 com App Router
  • React 19
  • TypeScript em modo estrito
  • Tailwind CSS 4
  • 8 idiomas, cada um com o seu próprio pacote
  • Telemóvel primeiro, testado a 390 px

Backend

  • Componentes de servidor e rotas de API
  • Sessões cifradas e bcrypt
  • Validação com Zod em tudo o que altera dados
  • Direto com eventos do servidor
  • Proteção CSRF e limites de pedidos
  • Acesso com Discord

Dados

  • PostgreSQL 16 com Drizzle ORM
  • 67 tabelas e 99 migrações
  • Isolamento por organizador e por circuito
  • Chaves estrangeiras com eliminação controlada
  • Triggers de data de alteração
  • Migrações SQL versionadas

Motor de competição

  • Biblioteca pura, sem framework nem base de dados
  • Eliminação simples e dupla, suíço, liga e GSL
  • Determinista: o mesmo torneio gera o mesmo quadro
  • Cobertura de 100% das linhas
  • Classificações e desempates configuráveis
  • Só a interface e o portal o consomem

Infraestrutura

  • Servidor Ubuntu 24.04 com Node 22
  • Nginx e PM2 com várias instâncias
  • Certificados Let's Encrypt com HSTS
  • Deploy a partir do VentuHub com cópia prévia
  • Verificação de saúde e reversão automática
  • 1.200 espetadores em simultâneo medidos

Qualidade

  • 4.141 testes com Vitest em 405 ficheiros
  • 698 testes de ponta a ponta com Playwright
  • Três projetos: Chrome móvel, Safari móvel e desktop
  • Postgres real nos testes
  • ESLint com regras de qualidade e ratchet
  • Lighthouse 91, 100, 100 e 100 em telemóvel

Perfis diferenciados

Um capitão não pode mexer noutra equipa. Um árbitro só verifica as partidas que lhe cabem.

  • Admin

    Acesso completo: utilizadores, auditoria, definições do organizador e manutenção.

  • Organização

    Gestão operacional de circuitos, torneios, inscrições e equipas.

  • Árbitro

    Verifica os resultados das partidas que lhe estão atribuídas.

  • Capitão

    A sua equipa: plantel, inscrições, check-in, vetos e reporte do resultado.

  • Jogador

    Vê a sua equipa e as suas partidas e edita o seu próprio perfil.

Não é só um site de resultados

Decisões de engenharia que normalmente não se veem, mas que dão estabilidade a uma competição em direto.

  • Motor de competição como biblioteca pura

    Sem dependências do framework, da base de dados nem da hora do sistema: a hora é injetada e o sorteio usa uma semente, por isso o mesmo torneio gera sempre o mesmo quadro nos testes.

  • Só o idioma ativo viaja até ao navegador

    Cada um dos oito idiomas é o seu próprio pacote: o servidor já sabe o idioma antes de desenhar a página e o cliente só descarrega esse.

  • Partidas em direto sem recarregar

    Um único fluxo de eventos por separador avisa de resultados, vetos e alterações na classificação assim que acontecem, com reconexão automática.

  • Manutenção sem deixar ninguém a meio

    Ativa-se a partir do portal e chega de imediato a quem está a navegar, sem ter de atualizar a página para o saber.

  • Suporte com rastreabilidade completa

    A equipa de suporte pode entrar como um utilizador para resolver uma incidência, com um aviso permanente no ecrã e o registo do que fez.

  • Vários organizadores desde o primeiro dia

    Cada organizador e cada circuito ficam isolados na base de dados: é o que transforma o protótipo num produto replicável.

  • Capacidade medida, não estimada

    Testes de carga com partidas em direto: 1.200 espetadores em simultâneo com respostas abaixo de 350 ms no percentil 95.

  • Deploy com reversão automática

    A compilação prepara-se à parte e entra de uma vez no servidor; se o arranque falhar, o sistema regressa sozinho à versão anterior.

Milhares de testes automáticos

Cobertura desde o motor de competição até aos fluxos completos de capitão e organizador. Cada deploy é bloqueado se algo falhar.

4.141
testes com Vitest
405
ficheiros de teste
698
testes de ponta a ponta
3
projetos: dois móveis e um desktop
  • Motor de competição

    Quadros de eliminação simples e dupla, suíço, liga e GSL: folgas corretas, classificações estáveis e resultados impossíveis rejeitados.

  • Autenticação e sessão

    Acesso com email e com Discord, sessão cifrada, CSRF, limite de tentativas e auditoria.

  • Isolamento por organizador

    Separação por organizador e por circuito verificada ao nível da consulta e da base de dados.

  • Partidas e direto

    Check-in, reagendamentos, vetos de mapas, reporte e verificação de resultados e o fluxo de eventos em direto.

  • Idiomas e conteúdo

    Os oito idiomas carregam o que devem e nada mais: testa-se que nenhum cliente descarrega um idioma que não está a usar.

  • Ponta a ponta, telemóvel primeiro

    Fluxos completos de capitão e de organizador sobre Chrome real, em dois projetos móveis e um de desktop, com verificações de acessibilidade.

Stack completa

O mesmo critério dos nossos próprios produtos: só ferramentas modernas, mantidas e com comunidade ativa.

  • Next.js 16
  • React 19
  • TypeScript 5
  • Tailwind CSS 4
  • Node.js 22
  • PostgreSQL 16
  • Drizzle ORM
  • PGlite nos testes
  • Sessões cifradas
  • Zod
  • discord.js
  • Vitest
  • Playwright
  • ESLint 9
  • SQL
  • Bash
  • Nginx
  • PM2
  • Ubuntu 24.04
  • VentuHub
  • Let's Encrypt

Precisa de algo assim?

A Spike Series é código próprio construído à medida para um organizador de circuitos de VALORANT: sem templates, sem serviços de terceiros e com o mesmo rigor técnico que colocamos nos nossos produtos.

Voltar aos casos