Files

1.6 KiB

Static Public Data

The web server serves /data/* from the same public data cache used by /api/tss/*, and fills missing snapshots from the matching API route with a short timeout. The frontend uses /api/tss/* by default; set VITE_STATIC_DATA=true only for static-first experiments.

  • /data/leaderboard-teams.json
  • /data/leaderboard-players.json
  • /data/home-teams.json
  • /data/recent-games.json
  • /data/teams/{key}.json
  • /data/teams/{key}.games.json
  • /data/players/{key}.json
  • /data/games/{key}.json
  • /data/games/{key}.logs.json

{key} is encodeURIComponent(value).replace(/%/g, '~').

Snapshot files should keep the same response shape as the matching /api/tss/* endpoint. Missing files are fine: the app remembers the miss for the current browser session and uses the existing API route instead.

Do not generate every possible entity forever. Keep /data bounded:

  • Always generate the small global snapshots: leaderboards, home teams, recent games.
  • Generate team/player/game detail snapshots only for hot items, such as current leaderboard entries, recent games, recently viewed pages, or pinned items.
  • Prune detail snapshots by age and access. For example: keep recent games for 7-30 days, keep leaderboard teams/players while they remain ranked, and delete cold files that have not been refreshed recently.
  • Write snapshots atomically (file.tmp then rename) so readers never see a partial JSON file.
  • Serve compressed responses from the web server/CDN when possible. Keep source JSON minified unless humans need to inspect a fixture.