Commit graph

2 commits

Author SHA1 Message Date
Vantz Stockwell
25083d5572 Defend against stale skill-tree JSON cache
A friend on Chrome hit "C.subtrees is not iterable" — Chrome was serving
the previous skill-tree JSON shape ({nodes, edges} at top level) out of
the disk cache while running the new bundle that expects {subtrees}.
Hard reload fixed his session but other users could hit the same.

Three layers of defense:
1. backend/data.controller.ts: Cache-Control switches from
   'public, max-age=3600' to 'no-cache, must-revalidate' so the browser
   always revalidates JSON files against the server.
2. frontend/data.ts: every data fetch gets ?v=2 + cache:'no-cache' to
   bust any existing browser/CDN entry.
3. frontend/data.ts loadSkillTree(): if the response still has the legacy
   shape (no subtrees, but nodes array), wrap it in a single anonymous
   subtree so the UI doesn't crash on iteration.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 08:33:30 -04:00
Vantz Stockwell
98a1792106 Add Dune Awakening character builder + initial project scaffolding
- character-builder/: Vue 3 + NestJS + Valkey app for planning house, class,
  character XP, 5 spec tracks, faction standing, and skill trees. Shareable
  via short link (POST /api/builds → 8-char nanoid).
- character-builder/data/: parsed JSON tables (character XP through L200,
  5 specs to L100, 2 faction standing tables, 5 class skill trees).
- character-builder/scripts/extract.py: parser that regenerates data/*.json
  from the gitignored sample-data/*.html snapshots.
- Dockerfile + docker-compose.yml: two-container deploy (app + Valkey).
- specialization-calculator/: pre-existing single-file XP/quest calculator,
  carried into the repo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 07:30:37 -04:00