- Introduce body[data-house="atreides"] and body[data-house="harkonnen"] CSS blocks that override --sand / --sand-2 / --spice / --ember and the background gradient vars, so the whole UI (panels, progress bars, primary CTA, totals, allocated/maxed skill borders) recolors when the house is switched. - Fix the previously-swapped house identity colors: Atreides is green, Harkonnen is orange. Both house-pick cards now always display in their identity color, so the unselected house remains visually tagged. - App.vue applies the theme by setting document.body.dataset.house from a reactive watcher. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| backend | ||
| data | ||
| frontend | ||
| scripts | ||
| .dockerignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
Dune Awakening — Character Builder
Plan your character across House, Class, Character XP, Specializations, Faction Standing, and Skill Trees. Shareable via short link.
Stack
- Frontend: Vue 3 + Vite + TypeScript
- Backend: NestJS (Node 22, TypeScript)
- Storage: Valkey (Redis-compatible) for build sharing
- Data: extracted from
../sample-data/*.htmlinto./data/*.jsonviascripts/extract.py
Two containers: app (NestJS serving the SPA + API) and valkey. Wire-up in
docker-compose.yml.
Run
docker compose up --build
Then open http://localhost:9002.
Update data
If you save new HTML snapshots into ../sample-data/, re-run the extractor:
uv run python3 scripts/extract.py
This regenerates ./data/*.json, which the container picks up on next build.
API
POST /api/builds— body is a build payload (any JSON ≤16 KB). Returns{ code }(8-char URL-safe id).GET /api/builds/:code— returns{ code, build }.GET /api/data/:file— serves the static JSON tables (allow-listed).
Builds are stored in Valkey with a rolling 1-year TTL (refreshed on each fetch), so popular shared builds don't expire.
Dev (without Docker)
In two terminals:
# backend
cd backend && npm install && VALKEY_URL=redis://localhost:6379 npm run start:dev
# frontend
cd frontend && npm install && npm run dev
The Vite dev server proxies /api/* to localhost:3000.