- Vue 59.8%
- TypeScript 39.2%
- JavaScript 0.7%
- CSS 0.1%
|
All checks were successful
Build and Push Docker Image / build (push) Successful in 26s
Some upstream subclass entries omit a feature from their reference list even though its full definition exists elsewhere in the same data file (e.g. Warlock Genie patron's level-1 vessel/wrath features). Cross-check against the already-loaded feature-detail lookup and recover any match, guarded by source + classSource so an unrelated edition's variant of the same feature name can't get pulled in. Also give each feature at a level its own line and its own accordion transition, instead of sharing one detail panel per level — switching between two features in the same level now collapses/expands smoothly instead of hard-cutting the shared panel's content. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| public | ||
| scripts | ||
| src | ||
| .dockerignore | ||
| .gitignore | ||
| .nvmrc | ||
| AGENTS.md | ||
| AGENTS.original.md | ||
| Dockerfile | ||
| index.html | ||
| LICENSE | ||
| nginx.conf | ||
| package-lock.json | ||
| package.json | ||
| PROJECT_STATUS.md | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
D&D 5e Character Builder
Vue 3 + TypeScript app for creating D&D 5th Edition characters using 5e.tools-shaped JSON. Characters and fetched rules data live in the browser (IndexedDB); no backend.
See PROJECT_STATUS.md for feature depth, gaps, and roadmap. Contributor/agent notes (local mirror vs GitHub fetch, key paths): AGENTS.md.
Features (high level)
- Character creation wizard — 9 steps: Basic Info → Class (subclass + Features tab: optional features, ASI / feat at ASI levels) → Race → Background → Abilities → Skills → Spells → Equipment → Features (general feats).
- Edition filtering — 5e vs 2024 / One D&D visibility (
filterByEdition, source overlap pickers). - Ability scores — Manual, standard array, point buy (8–15), or debug preset;
baseAbilitiesvs finalabilities(base + recorded ASIs, cap 20); switching method does not discard ASIs from the class step. - Skills — Class / background / race choices, overlap handling, Expertise when the class grants it.
- Spells — Class-list filtering by progression and limits; Flexible picks tab for Magical Secrets–style choices parsed from
additionalSpells(spellFlexiblePicks, universal pool). - Character sheet & list — Saved characters, sheet view (limits noted in
PROJECT_STATUS.md: e.g. HP/AC, feat mechanics). - Level-up wizard — Partial flow (see status doc); creation path is ahead on ASI/spells UX in places.
- Data — Fetch from configurable mirror (default GitHub raw); Dexie cache + TTL; stale cache used if fetch fails.
Tech stack
Vue 3 (Composition API), TypeScript, Vite, Vue Router, Pinia, Dexie, @vueform/multiselect, Ajv (dev validation for some payloads).
Getting started
Requirements: Node.js 18+, npm.
npm install
npm run dev # http://localhost:5173 (typical Vite port)
npm run build # vue-tsc -b && vite build
npm run preview # preview production build
Optional: npm run generate:5etools-types — codegen/types for mirrored JSON (see script).
Repository layout (abbrev.)
src/
├── components/
│ ├── CharacterWizard/ # Step*.vue, OptionalFeaturesPicker, AsiBlock
│ ├── LevelUpWizard/
│ ├── CharacterSheet.vue
│ └── …
├── db/index.ts # Dexie schema + Character shape (baseAbilities, spells, …)
├── services/
│ ├── dataLoader.ts # Fetch + cache 5e.tools paths
│ ├── featureCalculator.ts
│ ├── featureParser.ts
│ ├── characterRules.ts
│ ├── abilityScores.ts # Base + ASI → finals
│ ├── spellFlexiblePicks.ts
│ └── characterService.ts
├── stores/ # character.ts, data.ts
├── router/
├── types/ # 5etools.ts, generated/, …
└── views/
Data source
Rules content is loaded like 5e.tools: races, classes (data/class/), subclasses, backgrounds, spells (data/spells/), items, feats, skills, optional features, etc. Default remote root is configurable in src/services/dataLoader.ts (DATA_BASE_URL). Agents doing JSON inspection can use the local mirror under external/5etools-src/data/ when present (see AGENTS.md).
License
MIT