A personal Counter-Strike 2 telemetry project

Counter-Strike 2 Analysis

I wanted to analyze professional CS2 telemetry at scale, so I built an automated ETL pipeline that parsed >380 GB of tier-1 tournament replays into compact Parquet datastores. It powers map-to-map performance trends, rolling form indicators, and interactive 2D radar duel heatmaps.

01Individual match history · 65 tournaments

Map-to-Map Performance Trends

Track map-to-map variance of HLTV Rating 3.0 across tier-1 tournaments, comparing 5, 10, 15, and 20-map moving averages against career baselines.

  • →5, 10, 15, and 20-map rolling window moving averages
  • →Map pool breakdown and individual map filters
  • →Separate map variance from true player momentum
  • →Career rating baselines across tier-1 LAN tournaments

02Rolling momentum & streaks · Tier-1 CS2

CS2 Form Tracker

Evaluate current player trajectory with rolling 10-map ratings, plain-language form verdicts, and recent match outcome breakdowns.

  • →Rolling 10-map rating compared against career baseline
  • →Plain-language form verdict (Surging, Peak, Slumping, Stable)
  • →Momentum delta and performance streak indicators
  • →Recent match history strip with individual map scores

03Spatial combat telemetry · 598,000+ events

2D Radar Duel & Kill Analytics

Interactive top-down radar spatial projections rendering player duel locations, directional kill vectors, and trade attribution on official competitive maps.

  • →Attacker and victim spatial positioning on official radar overviews
  • →Directional engagement vectors with weapon, headshot, and wallbang tags
  • →3-second sliding-window trade-kill attribution analysis
  • →Filterable by player, map, side (T / CT), and kill outcome

How it works

From raw demo files to the radar

Data collection & ingestion

An automated Python pipeline downloads and verifies tournament demos across 65 tier-1 events. Uses browser TLS impersonation, request jitter, circuit-breaker error handling, and SQLite WAL mode to track match processing state without data loss.

Polars ETL & event normalization

Processes >380 GB of raw match replays into a compact 472 MB partitioned Parquet datastore (>99.8% storage reduction). Extracts and normalizes 598,000+ combat events with sub-tick precision.

Spatial projection & trade attribution

Transforms in-game world coordinates into 2D radar map space. Computes directional kill vectors and executes 3-second sliding-window algorithms to identify and credit trade kills.

Interactive visualizations & caching

Next.js App Router renders tournament analytics, Canvas-based form curves, and interactive radar duel heatmaps. Pre-computed manifest indexes enable instant player lookups and shareable state.

Next.js and TypeScript on the site, Python and Polars for the data pipelines, and Snappy Parquet / Supabase for the cleaned telemetry.

Next.js · TypeScript · Python · Polars · Snappy Parquet · SQLite · Supabase · Canvas · SVG

← back to all projects