Comment ça marche
ChessInsights transforme les PGN broadcast de Lichess en insights exploitables sur la gestion du temps de réflexion au plus haut niveau mondial.
La donnée
Chaque partie est ingérée depuis l’API publique Lichess (/api/broadcast/round/:id.pgn). Les PGN contiennent des annotations %clk (temps restant après chaque coup) et %eval (évaluation moteur Stockfish).
Le temps passé sur un coup est calculé, pas lu directement :
T_n = clk[n−1] − clk[n] + increment + bonus_de_phaseLe modèle de cadence est structuré (phases avec moveCount, baseMs, incrementMs), ce qui permet de gérer n’importe quelle cadence — classique FIDE, rapide, blitz, avec ou sans increment.
Les phases
Chaque coup est classifié en ouverture, milieu de jeu ou finale selon des bornes configurables. Défaut : 1-15 / 16-40 / 41+. Les bornes sont ajustables à la volée depuis la page stats d’un tournoi (sliders persistés en URL).
Les stats produites
- Par partie : temps total par camp, plus longues réflexions, répartition par phase, courbe d’horloge.
- Par joueur × tournoi : profil temporel, moyenne / max / min / médiane / écart-type par phase.
- Par tournoi : leaderboards, analyses agrégées — clock au coup 40, profondeur « hors du livre », fatigue par ronde, heatmap ouverture × joueur, corrélation temps × qualité.
L’approche
Pas de machine learning opaque. Les stats sont des agrégations SQL + TS pures, reproductibles et testées par golden files sur des PGN réels. Le résumé narratif par partie (bouton “Générer un résumé”) est la seule pièce générée par un LLM (Llama 3.3 70B via Groq), cadré par un prompt qui ne voit que les données factuelles pré-calculées.
Le code
Open-source (privé pour l’instant) sur GitHub, Next.js 16 + Postgres 17 + Drizzle ORM, déployé sur un VPS avec CI/CD GitHub Actions.
Données Lichess ↗