dune-tools/character-builder
Vantz Stockwell 65d06f1754 Two-column layout with sticky character summary
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>
2026-05-23 07:58:27 -04:00
..
backend Add Dune Awakening character builder + initial project scaffolding 2026-05-23 07:30:37 -04:00
data Synthesize per-level rewards for the Character card 2026-05-23 07:50:20 -04:00
frontend Two-column layout with sticky character summary 2026-05-23 07:58:27 -04:00
scripts Synthesize per-level rewards for the Character card 2026-05-23 07:50:20 -04:00
.dockerignore Add Dune Awakening character builder + initial project scaffolding 2026-05-23 07:30:37 -04:00
docker-compose.yml Use external port 9002 instead of 8080 2026-05-23 07:30:55 -04:00
Dockerfile Add Dune Awakening character builder + initial project scaffolding 2026-05-23 07:30:37 -04:00
README.md Use external port 9002 instead of 8080 2026-05-23 07:30:55 -04:00

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/*.html into ./data/*.json via scripts/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.