diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md new file mode 100644 index 0000000..5a630e5 --- /dev/null +++ b/docs/ROADMAP.md @@ -0,0 +1,100 @@ +# Darkwatch Roadmap + +Last updated: 2026-04-11 + +A living document tracking planned features, improvements, and ideas. Items move to a spec/plan when work begins. + +--- + +## In Progress / Next Up + +### Bugs & Quick Fixes +- [ ] **Dice overlay blocks interaction** — 3D dice canvas captures all pointer events; non-covered areas should remain interactive while dice are rolling +- [ ] **Fog slider alpha not wired** — AtmospherePanel intensity slider not connected to fog CSS opacity + +### Spellcasting System *(major feature)* +Shadowdark uses no spell slots — spells are cast with a check (1d20 + INT/WIS vs DC 10 + tier). Failure exhausts the spell until rest. Full mechanics from the Player Quickstart: + +- [ ] Spell database (Tier 1–2 complete from quickstart; extensible to Tier 3–5) +- [ ] Spellcasting check mechanic with success/fail/crit tracking +- [ ] Per-spell "exhausted until rest" state on failure +- [ ] Focus spell tracking — active focus indicator, maintenance check prompts +- [ ] Wizard mishap table on crit fail (d12, tier-dependent) +- [ ] Priest penance tracking on crit fail (spell locked until penance paid; cost by tier) + +### Character Creation Improvements +- [ ] Stat rolling UI — 3d6 per stat with individual reroll buttons +- [ ] Background selection/roll — d20 table (Urchin, Soldier, Acolyte, etc.) +- [ ] HP calculation from class HD + CON on create and level up +- [ ] Starting gold display — 2d6 × 5 gp shown during creation + +### Leveling & Progression +- [ ] XP threshold fix — next level = current level × 10 (10 XP for lvl 2, 20 for lvl 3, etc.) +- [ ] Talent roll UI on level up — 2d6 on class table, with stacking support +- [ ] Title auto-update from class + alignment + level lookup table + +--- + +## Planned + +### Gameplay Tools +- [ ] **Initiative tracker** — turn order display, DM-managed, synced via socket +- [ ] **Conditions / status effects** — poisoned, stunned, dying, etc. shown on character cards +- [ ] **Death timer** — dying state: 1d4 + CON rounds, d20 each turn to rise at 1 HP +- [ ] **Party loot / shared inventory** — campaign-level shared pool, DM-managed + +### Metrics & Analytics *(Prometheus + Grafana)* +Track feature usage and player behavior to understand what's actually being used. Useful once the app has multiple users/campaigns. + +Event ideas to instrument: +- Atmosphere effects toggled (fog, fire, rain, embers) — are DMs using them? +- Character color changes — how often, is it a one-time setup or ongoing? +- Dice rolls — frequency per session, types rolled, nat 20 rate +- Spell cast attempts / failures / mishaps +- Luck token usage +- Torch timer activations +- Feature flags (e.g., "physical dice" toggle if added) — adoption rate +- Campaign creation, invite acceptance, session length proxies + +Stack: Prometheus (metrics collection) + Grafana (dashboards). Server emits metrics via a `/metrics` endpoint; Prometheus scrapes it. Grafana visualizes. + +--- + +## Atmosphere & Effects +- [x] Fog overlay — CSS gradient, synced via socket *(done)* +- [x] Fire effect — Three.js particle fire *(done)* +- [x] Rain / embers — tsParticles *(done)* +- [ ] Snow — tsParticles, not yet implemented; evaluate if worth adding after DM feedback +- [ ] Ambient audio — optional, low priority + +--- + +## Longer Term / Ideas +- [ ] **Profile image upgrades** — beyond DiceBear (custom uploads, etc.) +- [ ] **Multi-system support** — select game system on campaign create (Cairn, Knave, Pathfinder 2e, Cyberpunk RED, etc.); stats/rules/theme adapt per system. OSR games are easiest wins (same basic schema, just different data). +- [ ] **Containerize server** — Dockerfile for Node server; useful when moving toward hosting. Client stays static build + CDN. +- [ ] **Kubernetes / autoscaling** — Socket.IO needs sticky sessions or Redis pub/sub adapter for multi-instance. DB moves to managed service (RDS, PlanetScale). Revisit when public. +- [ ] **Monetization model** — if pursued: charge for hosting infrastructure (not game IP). Fan content policies vary by publisher; OSR/CC games are safest. Consult legal before adding paid tiers. + +--- + +## Completed +- [x] Campaign CRUD with real-time sync (Socket.IO) +- [x] Character CRUD — stats, gear, talents, HP, XP, currency +- [x] Auto-calculated AC and derived attacks +- [x] Talent effects — stat bonuses, AC, attack/damage, gear slots, HP scaling +- [x] View/edit mode split, click-to-edit InlineNumber +- [x] Medieval visual theme — Cinzel + Alegreya, parchment, gold filigree, color schemes +- [x] 3D dice rolling with predetermined outcomes, character-colored dice, delayed roll log +- [x] Torch timer — 60 min countdown, synced across clients +- [x] Luck token toggle +- [x] DiceBear avatars with style picker +- [x] Color picker per character +- [x] Mobile layout — full-screen sheet, long-press adv/dis, roll log drawer +- [x] Custom SelectDropdown — cross-platform consistent +- [x] Compact DM character cards — 3-up grid, HP/AC/luck/torch/modifiers +- [x] Atmosphere panel — fog, fire, rain, embers; DM-only, synced via socket +- [x] MariaDB migration — replaced SQLite with MariaDB 11 in Docker +- [x] Auth — email/password, JWT httpOnly cookies, register/login/logout +- [x] Campaign membership — DM and player roles, invite links +- [x] Per-campaign role enforcement — API middleware, socket auth, frontend gating