Le problème
Arena est le mode de League of Legends en petites équipes et en manches, et les sites de statistiques habituels le couvrent à peine. Un groupe d'amis voulait revoir sa saison comme Spotify Wrapped résume une année de musique : ce qu'ils ont joué, comment ils ont gagné, avec qui. L'API de Riot ne fournit que des données de match brutes, une requête à la fois, sous des limites de débit strictes.
Ce que j'ai construit
Un site Next.js 16 où chacun peut chercher un Riot ID et accéder à un espace de bilan : un récit façon story, un tableau de bord sur un seul écran, des succès, une analyse détaillée et des cartes à partager, plus des classements et des pages par champion. Derrière, une API Fastify ne lit que notre propre base Postgres, qu'un crawler remplit de matchs Arena. Un service passerelle distinct est le seul processus à détenir les clés Riot : il applique les limites de chaque clé et sert les requêtes par niveaux de priorité, pour qu'un visiteur ne reste jamais bloqué derrière le crawler.
Défis techniques
- Les limites de débit comme contrainte principale. Le crawler ne fait que de la découverte, et chaque modification est jugée au nombre de matchs stockés par appel à Riot.
- Un mode qui change. Arena est passé d'équipes de deux à des équipes de trois, et Riot a modifié ses identifiants de file. Ces valeurs sont toujours lues dans chaque match, jamais codées en dur.
- Le stockage. Les pages lisent un schéma allégé qui ne garde que ce qui est affiché. Les données complètes de Riot sont compressées dans une base d'archive séparée, d'où tout champ abandonné peut être recalculé.
- Les données aberrantes. Les matchs aux dégâts impossibles sont signalés et exclus des succès et des classements.
- La confidentialité. Les identifiants internes des joueurs et les messages d'erreur bruts de Riot n'atteignent jamais un visiteur.
Résultat
Le site est en ligne et utilisé par le groupe d'amis, avec recherche ouverte par Riot ID, classements, une collection complète de succès et des cartes à partager. Prochaine étape : un lancement public avec une clé Riot de production.




