Deadlock Labs
Production-grade Analytics-Plattform für Valves Deadlock mit reverse-engineerter Match-History und Echtzeit-Daten.
Das Problem
Deadlock ist ein 6v6 Hero-Shooter von Valve - aber beim Early-Access-Launch gab es keine vernünftige Match-History. Keine Hero-Winrates. Keine Performance-Trends. Es gab zwar bereits einige Tracking-Tools in der Community, aber keines hat die Daten so aufbereitet, wie wir es uns vorgestellt haben.
Als 3er-Team haben wir entschieden, es besser zu machen.
Was ich gebaut habe
Deadlock Labs ist eine production-grade Analytics-Plattform die Daten aus der öffentlichen Deadlock-API und einem selbst reverse-engineerten Match-History-Tool (basierend auf GC-Steam-Kommunikation) ingested, verarbeitet, in einer relationalen Datenbank speichert und in einem schnellen Web-Interface präsentiert.
Kernfunktionen:
- Match-History - eigenes Tool, reverse-engineered aus GC-Steam-Kommunikation, mit Speicherung für 1.000.000+ Matches
- Spieler-Profile - Stats über alle Heroes, Winrates, Performance-Trends
- Hero-Analytics - Pick-Rates, Win-Rates, Damage-Profile pro Patch
- Leaderboards - nach mehreren Metriken gereiht, stündlich aktualisiert
- Draft-Tool - @dnd-kit mit Drag-and-Drop Hero-Auswahl
- Live-Match-Viewer - Echtzeit-Daten während aktiver Matches via Polling
Architektur
Der Stack wurde aus einem konkreten Grund gewählt: vorhersehbare Kosten und lineare Skalierung.
Frontend: Next.js 16 mit React 19 und TypeScript. Server-Components für die datenintensiven Seiten (Leaderboards, Hero-Stats), Client-Components nur wo Interaktivität nötig ist. Das hält den Lighthouse-Performance-Score bei 94 - auch mit großen Datentabellen.
Datenbank: PostgreSQL via Prisma. Match-Daten sind über mehrere Tabellen normalisiert - Spieler, Heroes, Items, Match-Events. Komplexe Queries (z.B. Hero-Winrates gefiltert nach Rank-Bracket) laufen mit richtigen Indexes unter 80ms.
Caching: Redis sitzt vor den teuersten Queries. Hot-Data (aktuelles Leaderboard Top 100, Hero-Stats für den aktuellen Patch) wird mit 5-Minuten-TTL gecacht. Dadurch sinkt die p95-Response-Time für diese Endpoints von 1,2s auf unter 40ms.
Auth: NextAuth v5 mit Overwolf-OAuth - Spieler loggen sich ein um ihr Profil zu claimen und eigene Stats getrennt von öffentlichen Daten zu tracken.
Engineering-Herausforderungen
Match-History existierte nicht. Valve bietet keine offizielle Match-History-API. Wir haben die GC-Steam-Kommunikation (Game Coordinator Protobuf-Messages) reverse-engineered und daraus ein eigenes Match-History-Tool gebaut. Das System ingested und speichert mittlerweile über 1.000.000 Matches.
Die öffentliche API ist nicht dokumentiert. Valve veröffentlicht keine API-Docs für Deadlock. Wir haben die Endpoints aus Network-Traffic reverse-engineered, eigene Type-Definitions geschrieben und eine resiliente Ingestion-Schicht gebaut die Rate-Limits, fehlende Felder und Schema-Änderungen zwischen Patches handled.
Match-Daten sind unordentlich. Ein einzelner Match produziert tausende Events. Wir haben eine Processing-Pipeline gebaut die Events beim Ingesten in ein sauberes Schema normalisiert - damit sind Queries schnell und das Schema bleibt stabil auch wenn Valve das Roh-Format ändert.
Skalierung kam schneller als erwartet. Nach einem Post auf r/deadlockthegame traf die Plattform tausende Unique Visitors innerhalb von 48 Stunden. Die Redis-Caching-Schicht hat die Datenbank vor dem Kollaps bewahrt. Kein Downtime.
Internationalisierung at scale. Die gesamte UI unterstützt über 10 Sprachen (u.a. Deutsch, Englisch, Spanisch, Koreanisch, Chinesisch) via next-intl, inklusive dynamisch geladener Hero-Namen, Ability-Beschreibungen und Patch-Notes. Alle übersetzten Inhalte werden zur Build-Zeit statisch pre-gerendert.
Ergebnisse
- 1.000.000+ Match-Replays gespeichert und abfragbar via eigenem GC-Steam-Tool
- Lighthouse Performance: 94 - schnell auf Mobile und Desktop
- p95 API-Response-Time: unter 40ms für gecachte Endpoints
- Kein Downtime beim initialen Traffic-Spike
- Aktive Nutzerbasis aus der Deadlock-Community
- Mehrsprachig (10+ Sprachen) mit vollständigem Static Pre-Rendering
Tech Stack
Next.js 16 · React 19 · TypeScript · Prisma · PostgreSQL · Redis · NextAuth v5 · next-intl · @dnd-kit · Vercel · Railway



