← Tous les projetsAll projects

02Shoryu

Les stats Street Fighter 6 que le site officiel ne montre pas bien : profils joueurs, classements, matchups et fiches personnages. The Street Fighter 6 stats the official site doesn't show well: player profiles, rankings, matchups and character pages.

Type
App web, en ligneWeb app, live
Stack
Next.js 16, TypeScript, Tailwind, Supabase, Recharts
StatutStatus
En production, open source (MIT)In production, open source (MIT)
LiensLinks
shoryu.site · GitHub
Shoryu

Le problèmeThe problem

Capcom n'a pas d'API publique pour Street Fighter 6. Les données existent sur Buckler's Boot Camp, le site officiel, mais elles sont éparpillées et on n'y voit pas l'évolution d'un joueur dans le temps.

Capcom has no public API for Street Fighter 6. The data exists on Buckler's Boot Camp, the official site, but it's scattered and you can't see how a player evolves over time.

Ce qu'il faitWhat it does

  • Profils joueurs : historique LP / MR, matchs, matchups par personnage, rivaux.
  • Le haut du classement Master et les taux d'utilisation des personnages par rang.
  • Une page par personnage : frame data, combos, matchups, patch notes.
  • Résultats des tournois Tier 1, profils des joueurs pros.
  • Streetdle, un jeu quotidien pour deviner un personnage.
  • Player profiles: LP / MR history, matches, per-character matchups, rivals.
  • The top of the Master ranking and character usage rates per rank.
  • A page per character: frame data, combos, matchups, patch notes.
  • Tier 1 tournament results, pro player profiles.
  • Streetdle, a daily guess-the-character game.

Tout est pensé mobile d'abord et fonctionne dès 375 px de large.

Everything is mobile first and works from 375 px wide.

Choix techniquesTechnical choices

Lire ce que Buckler rend déjà. Plutôt que deviner des endpoints non documentés, Shoryu lit le JSON __NEXT_DATA__ embarqué dans les pages de Buckler, avec un cookie de session. Toutes les requêtes passent par une file qui les espace, pour ne jamais inonder le site de Capcom.

Read what Buckler already renders. Instead of guessing undocumented endpoints, Shoryu reads the __NEXT_DATA__ JSON embedded in Buckler's pages, with a session cookie. Every request goes through a pacing queue so Capcom's site never gets flooded.

Cacher pour limiter le trafic. Supabase garde les données et leur historique :

Cache to keep traffic low. Supabase stores the data and its history:

ProfilsProfilesÀ la visite, au plus toutes les 12 hOn visit, at most every 12 h
MatchsMatchesÀ la demande, stockés au fur et à mesureOn demand, stored incrementally
Classement, usageRanking, usageTâche planifiée toutes les 12 hScheduled job every 12 h
TournoisTournamentsLiquipedia, GitHub Action chaque semaineLiquipedia, weekly GitHub Action

Next.js côté serveur. App Router et Server Components : les données sont récupérées sur le serveur, le cookie Buckler et la clé Supabase ne quittent jamais le back.

Server-side Next.js. App Router and Server Components: data is fetched on the server, so the Buckler cookie and the Supabase key never leave the back end.

LimitesLimits

Tout dépend d'un cookie de session Buckler qui expire régulièrement. Quand les profils reviennent vides, il faut en récupérer un nouveau à la main.

Everything depends on a Buckler session cookie that expires regularly. When profiles come back empty, a fresh one has to be grabbed by hand.