Skip to content

feat: add shared top 10 leaderboard for all games - #3

Open
2R-2T wants to merge 1 commit into
masterfrom
feat/leaderboard
Open

feat: add shared top 10 leaderboard for all games#3
2R-2T wants to merge 1 commit into
masterfrom
feat/leaderboard

Conversation

@2R-2T

@2R-2T 2R-2T commented Jul 18, 2026

Copy link
Copy Markdown
Collaborator

Quoi

Leaderboard TOP 10 par jeu, partagé entre tous les joueurs, accessible via un bouton LEADERBOARD sur l'écran d'accueil et l'écran game over de chaque jeu (aucune modification dans les 7 jeux : tout passe par GameWrapper).

Comment

  • Front : src/utils/leaderboard.ts (fetch/submit + fallback localStorage avec migration des anciennes clés), refonte de GameWrapper (état leaderboard[], overlay TOP 10, rang 1 doré).
  • Logique pure partagée : src/utils/leaderboardCore.ts (tri, insertion, troncature à 10, sanitisation) — utilisée par le front, le middleware Vite et la fonction Vercel.
  • Dev : le middleware highscore-api de vite.config.ts passe au format tableau TOP 10 (toujours highscores.json local).
  • Prod : fonction serverless api/highscores.ts sur Vercel Blob (store privé déjà connecté au projet). Design un blob par score (highscores/<jeu>/<score>-<NOM>.json) : la lecture du contenu d'un blob est cachée par le CDN ≥ 60 s, donc un fichier unique lu/écrit perdait des scores ; list() est cohérent immédiatement et les chemins uniques éliminent les races entre sauvegardes simultanées. Élagage au-delà de 30 scores par jeu, whitelist des 7 gameIds.

Vérifié

  • UI de bout en bout en dev (Playwright) : accueil, panneau TOP 10, état vide, partie réelle jusqu'au game over, saisie 3 lettres, sauvegarde, fallback hors-ligne.
  • Fonction serverless exercée contre le vrai store Blob : cohérence lecture-après-écriture, égalités (l'ancien garde son rang), 400/405, élagage.
  • Le store est déjà seedé avec les records existants. Au merge, Vercel déploie et /api/highscores devient actif (token injecté automatiquement).

- Leaderboard overlay (top 10) reachable from idle and game over screens
- Pure leaderboard logic shared between frontend, Vite dev middleware and prod
- Prod: Vercel serverless function backed by Vercel Blob (private store),
  one blob per score to avoid CDN cache staleness and concurrent-write races
- Dev keeps the local highscores.json file, now in top 10 format
- Offline fallback on localStorage with migration of legacy keys
@vercel

vercel Bot commented Jul 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
jeux Ready Ready Preview, Comment Jul 18, 2026 5:55pm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant