Hoppa till huvudinnehållet
Tillbaka till kundcase

Spike Series

En plattform för att driva en hel liga.

Regionala VALORANT-ligor för en europeisk arrangör: publik webb, adminportal och Discord-bot, byggda från grunden av VentuLabs med samma stack och samma garantier som våra egna produkter.

4 839
automatiska tester
8
språk
197
arkitekturbeslut
67
tabeller i databasen
1 200
samtidiga tittare, uppmätt

I produktion på spikeserieseu.es (Öppnas i en ny flik)

Spike Series publika startsida med livematcher, regioner och kommande turneringar

En plattform för att driva en hel liga

Publik webb för spelare och tittare, adminportal för arrangören och en Discord-bot som kopplar ihop allt i realtid.

  • Komplett tävlingsmotor

    Enkel och dubbel utslagning, gruppspel, schweizersystem, seriespel och GSL. Genererar spelträd och tabeller och räknar om dem automatiskt efter varje resultat.

  • Kartveton live

    De två kaptenerna vetar och väljer kartor turvis med nedräkning, i realtid och utan omladdning, med matchseriens historik synlig.

  • Check-in och matchflöde

    Check-in före match, ombokningar med tider som föreslås och godkänns mellan kaptenerna, och resultatrapportering per karta.

  • Chatt kopplad till Discord

    Lag- och matchchatt inne på webben, med automatisk gallring, synkroniserad med ligans Discord-kanaler.

  • Integrerad Discord-bot

    Skapar lagroller och lagkanaler automatiskt och skickar direktmeddelanden om matcher, resultat och deadlines, på användarens språk.

  • Marknad för lag och spelare

    Anslagstavla där spelare och lag annonserar och hittar en plats innan anmälan stänger.

  • Inloggning med Discord

    Registrering och inloggning med spelarens Discord-konto, utöver e-post och lösenord med krypterad session.

  • Åtta språk

    Webb, portal och innehåll översatta till ES, EN, FR, PT, IT, DE, NL och TR, där varje språk bara laddar sitt eget paket.

  • Liveresultat

    Läser resultatet från sändningen för att uppdatera livematcherna utan manuell inblandning.

  • Underhåll utan avbrott

    Slås på från portalen och når direkt alla som surfar, utan att sidan laddas om.

  • Granskad support

    Supportteamet kan logga in som en användare för att hjälpa till, med synlig varning och fullständig logg av sessionen.

  • Designad mobil först

    Varje skärm utformas och testas först vid 390 px bredd, från spelträd till chatt, innan den anpassas för desktop.

Teknisk arkitektur

Samma stack och samma garantier som våra egna produkter: tester, automatisk driftsättning och flera arrangörer per instans från dag ett.

Frontend

  • Next.js 16 med App Router
  • React 19
  • TypeScript i strikt läge
  • Tailwind CSS 4
  • 8 språk, vart och ett med eget paket
  • Mobil först, testat vid 390 px

Backend

  • Serverkomponenter och API-rutter
  • Krypterade sessioner och bcrypt
  • Validering med Zod i allt som ändrar data
  • Live via server-sent events
  • CSRF-skydd och begränsning av anrop
  • Inloggning med Discord

Data

  • PostgreSQL 16 med Drizzle ORM
  • 67 tabeller och 99 migreringar
  • Isolering per arrangör och per liga
  • Främmande nycklar med kontrollerad radering
  • Triggers för ändringsdatum
  • Versionerade SQL-migreringar

Tävlingsmotor

  • Rent bibliotek, utan ramverk eller databas
  • Enkel och dubbel utslagning, schweizersystem, seriespel och GSL
  • Deterministisk: samma turnering ger samma spelträd
  • 100 % radtäckning
  • Konfigurerbara tabeller och tiebreaks
  • Bara gränssnittet och portalen använder den

Infrastruktur

  • Ubuntu 24.04-server med Node 22
  • Nginx och PM2 med flera instanser
  • Let's Encrypt-certifikat med HSTS
  • Driftsättning från VentuHub med säkerhetskopia först
  • Hälsokontroll och automatisk återställning
  • 1 200 samtidiga tittare uppmätta

Kvalitet

  • 4 141 tester med Vitest i 405 filer
  • 698 end-to-end-tester med Playwright
  • Tre projekt: mobil Chrome, mobil Safari och desktop
  • Riktig Postgres i testerna
  • ESLint med kvalitetsregler och regressionsspärr
  • Lighthouse 91, 100, 100 och 100 på mobil

Tydligt åtskilda roller

En kapten kan inte röra ett annat lag. En domare verifierar bara sina tilldelade matcher.

  • Admin

    Full åtkomst: användare, revisionslogg, arrangörsinställningar och underhåll.

  • Organisation

    Operativ hantering av ligor, turneringar, anmälningar och lag.

  • Domare

    Verifierar resultaten i de matcher som tilldelats.

  • Kapten

    Sitt lag: trupp, anmälningar, check-in, veton och resultatrapportering.

  • Spelare

    Ser sitt lag och sina matcher och redigerar sin egen profil.

Inte bara en resultatsida

Ingenjörsbeslut som normalt inte syns, men som ger stabilitet åt en tävling som pågår live.

  • Tävlingsmotorn som rent bibliotek

    Inga beroenden till ramverket, databasen eller systemklockan: tiden injiceras och lottningen använder ett frö, så samma turnering ger alltid samma spelträd i testerna.

  • Bara det aktiva språket skickas till webbläsaren

    Vart och ett av de åtta språken är ett eget paket: servern vet språket innan sidan renderas och klienten laddar bara ner det.

  • Livematcher utan omladdning

    Ett enda händelseflöde per flik meddelar resultat, veton och tabelländringar så fort de sker, med automatisk återanslutning.

  • Underhåll utan att lämna någon på halva vägen

    Slås på från portalen och når direkt alla som surfar, utan att de behöver uppdatera sidan för att få veta det.

  • Support med fullständig spårbarhet

    Supportteamet kan logga in som en användare för att lösa ett ärende, med en permanent varning på skärmen och en logg över vad som gjordes.

  • Flera arrangörer från dag ett

    Varje arrangör och varje liga är isolerad i databasen: det är det som gör prototypen till en replikerbar produkt.

  • Uppmätt kapacitet, inte uppskattad

    Belastningstester med livematcher: 1 200 samtidiga tittare med svarstider under 350 ms i 95:e percentilen.

  • Driftsättning med automatisk återställning

    Bygget förbereds separat och går in på servern i ett svep; om uppstarten misslyckas återgår systemet självt till föregående version.

Tusentals automatiska tester

Täckning från tävlingsmotorn till kompletta flöden för kapten och arrangör. Varje driftsättning stoppas om något går fel.

4 141
tester med Vitest
405
testfiler
698
end-to-end-tester
3
projekt: två mobila och ett för desktop
  • Tävlingsmotor

    Spelträd för enkel och dubbel utslagning, schweizersystem, seriespel och GSL: korrekta frirundor, stabila tabeller och omöjliga resultat som avvisas.

  • Autentisering och session

    Inloggning med e-post och med Discord, krypterad session, CSRF, begränsning av försök och revisionslogg.

  • Isolering per arrangör

    Separation per arrangör och per liga verifierad på fråge- och databasnivå.

  • Matcher och live

    Check-in, ombokningar, kartveton, rapportering och verifiering av resultat samt händelseflödet live.

  • Språk och innehåll

    De åtta språken laddar det de ska och inget mer: det testas att ingen klient laddar ner ett språk den inte använder.

  • End-to-end, mobil först

    Kompletta flöden för kapten och arrangör i riktig Chrome, i två mobilprojekt och ett för desktop, med tillgänglighetskontroller.

Hela stacken

Samma princip som i våra egna produkter: bara moderna verktyg som underhålls och har en aktiv community.

  • Next.js 16
  • React 19
  • TypeScript 5
  • Tailwind CSS 4
  • Node.js 22
  • PostgreSQL 16
  • Drizzle ORM
  • PGlite i tester
  • Krypterade sessioner
  • Zod
  • discord.js
  • Vitest
  • Playwright
  • ESLint 9
  • SQL
  • Bash
  • Nginx
  • PM2
  • Ubuntu 24.04
  • VentuHub
  • Let's Encrypt

Behöver du något liknande?

Spike Series är egen kod, skräddarsydd för en arrangör av VALORANT-ligor: inga mallar, inga tredjepartstjänster och samma tekniska noggrannhet som vi lägger i våra egna produkter.

Tillbaka till kundcase