darkwatch/docs/ROADMAP.md
Aaron Wood b6ca67ff8b docs: add ROADMAP.md with full feature backlog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 03:22:44 -04:00

100 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 12 complete from quickstart; extensible to Tier 35)
- [ ] 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