The Build Ledger now uses a two-column grid: the builder UI stays on the left, and a new sticky CharacterSummary panel on the right aggregates the whole character at a glance — house, level, total XP, skill/intel point pools (with POI bonus broken out), per-spec levels with cumulative XP and perks unlocked, current faction tier and progress to next, skill allocations grouped by class, and the six most recent perk unlocks across character + specs. The previous separate "Skill Summary" panel is subsumed by the sidebar. Wrap width grows from 1240px to 1560px. Below 1180px the layout collapses to one column and the summary becomes non-sticky. 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.