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 Elo Over Time.
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.
Highlight Games
Curated Highlight Games with replay boards and analysis excerpts.
Mar 19 · Chess.com
Clean mate vs sozplayschess05
Clean mate finish where `21. Qf4` allowed `21...Qd2#` immediately.
Opponent
sozplayschess05
Color
Black
Time control
600
Length
21 moves
Kevin Mok won by checkmate
Open Highlight GameMar 17 · Chess.com
80% accuracy win vs newbie060806
80% accuracy game that Chess.com estimated at 1150 Elo, finished by `45. Qbb8#`.
Opponent
dookiedealer
Color
White
Time control
600
Length
47 moves
Kevin Mok won on time
Open Highlight GameMar 15 · Chess.com
Comeback mate vs Ironmike3982
Comeback mate where `15. Bf2` lost the rook but the attack still converted with `27. Qh5#`.
Opponent
Ironmike3982
Color
White
Time control
600
Length
27 moves
Kevin Mok won by checkmate
Open Highlight GameWhy 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