darkwatch/docs/ROADMAP.md
Aaron Wood 12b32bd15a Add API docs, feature docs, and marketing site to longer-term roadmap
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 15:15:07 -04:00

5.6 KiB

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

Leveling & Progression

  • Talent roll UI on level up — 2d6 on class table, with stacking support; currently talents are added manually

Gameplay Tools

  • Initiative tracker — turn order display, DM-managed, synced via socket
  • Death timer — dying state: 1d4 + CON rounds, d20 each turn to rise at 1 HP
  • Conditions / status effects — poisoned, stunned, dying, etc. shown on character cards (DB tables exist from spellcasting work)

Planned

Gameplay Tools

  • Party loot / shared inventory — campaign-level shared pool, DM-managed
  • Creature gallery / NPC system — DM-managed library of enemy stat blocks (name, HP, AC, etc.); quick-add to initiative tracker; reusable across sessions

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

  • Fog overlay — CSS gradient, synced via socket (done)
  • Fire effect — Three.js particle fire (done)
  • Rain / embers — tsParticles (done)
  • Snow — tsParticles, not yet implemented; evaluate if worth adding after DM feedback
  • Ambient audio — optional, low priority

Longer Term / Ideas

  • Formal DB migration tool — replace homegrown migrate.ts with something like umzug or db-migrate; adds rollback support, checksums, and safer SQL parsing. Current tool works fine but has rough edges (naive semicolon splitting, no down migrations).
  • API documentation — OpenAPI/Swagger spec for all REST endpoints; auto-generate from route definitions if possible. Useful for future integrations, mobile clients, or third-party tooling.
  • Feature documentation / changelog — living doc (or generated site) tracking everything the app does: features, rules implemented, known limitations. Audience: DMs onboarding to the tool, not developers.
  • Marketing / product site — interactive public-facing site showcasing what Darkwatch does; could include live demos, feature highlights, screenshots. Separate from the app itself. Evaluate after the app has real users.
  • 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

  • Dice overlay fix — canvas no longer blocks pointer events during animation
  • Fog intensity slider — wired to CSS opacity
  • Title auto-update — derived from class + alignment + level on every change
  • Spellcasting system — 34 Tier 1-2 spells, 1d20 cast checks, exhaustion, Wizard mishap table (d12 auto-apply with undo), Priest penance, rest to recover, focus indicator on DM cards
  • Character creation wizard — 4-step modal: name/class/ancestry → 3d6 stat rolling → background/alignment/deity → review (HP, gold, gear slots, title all derived)

Completed (older)

  • Campaign CRUD with real-time sync (Socket.IO)
  • Character CRUD — stats, gear, talents, HP, XP, currency
  • Auto-calculated AC and derived attacks
  • Talent effects — stat bonuses, AC, attack/damage, gear slots, HP scaling
  • View/edit mode split, click-to-edit InlineNumber
  • Medieval visual theme — Cinzel + Alegreya, parchment, gold filigree, color schemes
  • 3D dice rolling with predetermined outcomes, character-colored dice, delayed roll log
  • Torch timer — 60 min countdown, synced across clients
  • Luck token toggle
  • DiceBear avatars with style picker
  • Color picker per character
  • Mobile layout — full-screen sheet, long-press adv/dis, roll log drawer
  • Custom SelectDropdown — cross-platform consistent
  • Compact DM character cards — 3-up grid, HP/AC/luck/torch/modifiers
  • Atmosphere panel — fog, fire, rain, embers; DM-only, synced via socket
  • MariaDB migration — replaced SQLite with MariaDB 11 in Docker
  • Auth — email/password, JWT httpOnly cookies, register/login/logout
  • Campaign membership — DM and player roles, invite links
  • Per-campaign role enforcement — API middleware, socket auth, frontend gating