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

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