Skill trees: - Class is no longer a single choice. The class panel is now tabs inside the Skill Trees section that switch which tree is viewed; allocations from every tree share one global skill-point pool sourced from character level. - Switching tabs preserves allocations (previously cleared them). - New "Skill Summary" panel lists every allocated skill grouped by class. - Tree-local "spent" badge appears on each class tab; tree header now shows both per-tree and global totals, and turns red if over-budget. Spec perks: - Extractor now parses the Rewards column of each spec track HTML (name, cost, description, effect, bonus, icon). All 5 specs have 41 perks each. - Spec cards display a scrollable perk list: unlocked perks highlighted, and a "Show all" toggle reveals locked/upcoming perks dimmed. A "Next: X at L Y" hint always points at the next unlock. 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.