Commit graph

2 commits

Author SHA1 Message Date
jedarden
79f3bee8a9 fix(web): serve replays from same-origin /data/ static assets, not R2
Replays are bundled into the Pages deploy as gzipped static assets (B2 stays
the private cold archive). Repoint all replay/card/thumbnail/live.json fetches
off the empty R2 cache and the non-resolving b2.aicodebattle.com onto
same-origin /data/, via a shared fetchReplayFromUrl helper that gunzips
.json.gz with DecompressionStream.

- new web/src/lib/replay-data.ts (REPLAY_BASE, replayUrl, fetchReplayFromUrl)
- replay.ts / embed.ts / pages/embed.ts / playlist-carousel.ts use the helper
- og-tags, bot-card, home, matches, bot-profile, playlists, feedback, ambient,
  api-types: /r2/ -> /data/
- pages.json data_paths updated; friendlier 404 message preserved
- 21 web tests pass; npm run build OK

Closes: bf-5cwi

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 16:41:30 -04:00
jedarden
55b259c918 feat(web): add embeddable replay widget route (plan §13.4)
Adds /embed/:id route for iframe-embeddable replay viewer with:
- Minimal chrome (controls visible on hover)
- Auto-play on load
- Query params: start, speed, mode
- ~2.7KB gzipped embed chunk

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 08:21:44 -04:00