Static chess analytics
Typed chess analytics with product-level polish.
This site turns a Chess.com export into a static-data Next.js experience: precomputed JSON, App Router pages, interactive charts, replay controls, and recruiter-facing engineering framing.
Current rating
415
Peak window
450
Dataset span
Feb 13, 2026 to Mar 15, 2026
Elo preview
The latest 18-game slice from the full rating arc, with live momentum, result-coded swings, and the same chart language as insights.
Window
#102-#119
18 recent games
Swing
+7 Elo
Trendline 421
Record
10-8-0
Wins-losses-draws
Current rating
415
Net +100 across the dataset
Peak rating
450
Best single point on the ladder
Win rate
50%
59-54-6 overall
Game count
119
Most common control: 900+10
Best recent form
50%
5-5-0 over the last 10
Spotlight strip
A few moments worth pulling into the narrative.
Why this project exists
A chess export became a frontend product exercise.
Recruiters should not need to infer engineering taste from source code alone. This project packages a raw chess export as a polished, data-rich interface to demonstrate typed transformations, visual hierarchy, interaction design, and production-minded App Router composition.
The chess domain is just the raw material. The actual signal is how the data gets normalized, summarized, and surfaced without hiding the implementation quality behind a generic dashboard template.
How it was built
Static data pipeline, typed contracts, small client islands.
- The source export is parsed once into normalized JSON with rating history, FEN timelines, opening signatures, and analytics summaries.
- Pages read from `lib/data.ts` only, so the UI never reaches into the raw source file or adds a runtime backend just to render charts.
- Client components are limited to the places where interaction matters: charts, replay controls, URL-backed filters, and hero micro-motion.
Recent games