Commit graph

89 commits

Author SHA1 Message Date
Aaron Wood
34443b0c19 docs: update handbook/changelog spec with repo-local skills and changelog cadence note 2026-04-11 16:28:30 -04:00
Aaron Wood
11e057b09e docs: add handbook and changelog design spec 2026-04-11 16:23:20 -04:00
Aaron Wood
7fc13bd553 docs: mark initiative tracker complete in roadmap 2026-04-11 15:56:51 -04:00
Aaron Wood
7a032bc277 fix: enforce HP visibility on player-emitted rolls, add membership check to request-state
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 15:53:20 -04:00
Aaron Wood
247379ba57 feat: integrate initiative tracker into campaign view
Wires up InitiativeTracker and CombatStartModal into CampaignView with socket event handlers, a DM-only Combat button, two-column layout with combat sidebar, and responsive CSS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 15:49:59 -04:00
Aaron Wood
65c914e3e0 feat: add CombatStartModal for DM combat setup 2026-04-11 15:46:11 -04:00
Aaron Wood
77be024ec6 feat: add InitiativeTracker sidebar component 2026-04-11 15:44:22 -04:00
Aaron Wood
3c3a92ce99 feat: add CombatState and CombatEnemy types 2026-04-11 15:39:52 -04:00
Aaron Wood
fcee648d07 feat: register initiative handlers in socket setup 2026-04-11 15:38:37 -04:00
Aaron Wood
53453bcbd7 feat: add initiative socket handlers 2026-04-11 15:37:27 -04:00
Aaron Wood
333ac1e24f feat: add combat_state JSON column to campaigns 2026-04-11 15:29:58 -04:00
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
Aaron Wood
c86b812747 Add formal migration tool to longer-term roadmap
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 15:12:11 -04:00
Aaron Wood
dcf386c52d Add initiative tracker design spec and update roadmap
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 14:16:32 -04:00
Aaron Wood
80eb50d359 Move SpellList above CharacterSheet so it's visible without scrolling
Also delete stale compiled .js files that were shadowing the .tsx source
and causing Vite to serve the old pre-spells versions of all components.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 13:07:17 -04:00
Aaron Wood
7cde985a21 docs: update roadmap — mark overnight work complete, reorder backlog 2026-04-11 12:10:41 -04:00
Aaron Wood
2e1fff4c2d feat: replace inline create form with CharacterWizard multi-step modal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 11:55:43 -04:00
Aaron Wood
a6218c72d4 feat: add CharacterWizard multi-step character creation modal
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 11:54:53 -04:00
Aaron Wood
3e6749de5f feat: extend createCharacter API to accept full character fields 2026-04-11 11:51:39 -04:00
Aaron Wood
6ecdda51f6 feat: add character creation utility functions 2026-04-11 11:51:37 -04:00
Aaron Wood
34583c8eff feat: add Shadowdark backgrounds data file 2026-04-11 11:51:35 -04:00
Aaron Wood
d8dbbabf7e feat: extend character creation endpoint to accept full character data 2026-04-11 11:51:33 -04:00
Aaron Wood
9399fc2186 feat: spellcasting UI — SpellList, cast result modal, undo button, rest button, focus indicator
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 11:49:29 -04:00
Aaron Wood
ba02ffcfcb fix: backtick-quote reserved word 'range' in spells SQL 2026-04-11 11:44:44 -04:00
Aaron Wood
b3218ee9cd feat: add Spell, CharacterSpell, Condition types and API functions 2026-04-11 11:36:40 -04:00
Aaron Wood
127d8c8391 feat: spell cast endpoint with mishap auto-apply and roll undo 2026-04-11 11:36:02 -04:00
Aaron Wood
ff7f22d77b feat: spell catalog and character spell management routes 2026-04-11 11:34:41 -04:00
Aaron Wood
7ad0f1410d feat: seed 34 Tier 1-2 spells from Shadowdark Player Quickstart 2026-04-11 11:32:21 -04:00
Aaron Wood
59e10a3408 feat: add spells, character_spells, conditions tables and roll_log metadata
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 10:45:52 -04:00
Aaron Wood
ad2019ebbc docs: add character creation wizard implementation plan 2026-04-11 10:13:32 -04:00
Aaron Wood
768c55c6b9 fix: dice overlay no longer blocks clicks, fog alpha wired to intensity, title auto-updates from class/alignment/level
- DiceTray: remove pointer-events:auto from .active so UI remains clickable during dice animation
- FogOverlay: accept intensity prop, map 0-100 to 0.15-1.0 opacity
- CampaignView: pass fog intensity to FogOverlay
- InfoPanel: auto-derive Shadowdark title when class/alignment/level changes
- Add shadowdark-titles.ts utility with full title lookup table from Player Quickstart
- Add CLAUDE.md with project instructions and pre-approved permissions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 03:53:00 -04:00
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
Aaron Wood
1de0e2edd4 fix: use INSERT IGNORE for campaign_members in seed to handle stale rows
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 02:33:12 -04:00
Aaron Wood
f62e0077d7 feat: rename app title to Darkwatch
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:47:06 -04:00
Aaron Wood
47215b48f1 feat: add DM/player role separation — atmosphere, invite, and edit controls gated by role
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:44:27 -04:00
Aaron Wood
e2548ad660 feat: add Login, Register, and Join campaign pages
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:38:45 -04:00
Aaron Wood
075a9c5505 feat: add AuthContext, RequireAuth guard, and Darkwatch app routing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:36:38 -04:00
Aaron Wood
11714ecbe4 feat: add credentials:include to all API calls and withCredentials to socket
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:35:01 -04:00
Aaron Wood
a37600fdfa feat: add JWT cookie auth to Socket.io connections and enforce DM-only atmosphere
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:33:35 -04:00
Aaron Wood
fae1e75f6f feat: enforce character ownership — players own their characters, DMs can modify any
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:31:49 -04:00
Aaron Wood
56d46166cd feat: add campaign membership, invite generation, and join-by-token routes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:29:42 -04:00
Aaron Wood
d1156745ca feat: add register, login, logout, and me auth endpoints 2026-04-11 00:26:49 -04:00
Aaron Wood
80f0b3535b fix: add req.user guard and try/catch to requireCampaignRole middleware
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:22:48 -04:00
Aaron Wood
bd433286ae feat: add JWT utility and requireAuth/requireCampaignRole middleware 2026-04-11 00:21:53 -04:00
Aaron Wood
39f8220eb7 feat: rewrite seed-dev-data for MariaDB with test users and campaign members
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:20:15 -04:00
Aaron Wood
ec75add5b7 fix: correct character:updated broadcast payload and existence check order
- Broadcast enriched DB row (with parsed overrides) instead of raw req.body
- Check affectedRows from UPDATE to detect missing characters before SELECT
- Import ExecuteValues from mysql2 at the top level instead of inline cast
2026-04-11 00:16:18 -04:00
Aaron Wood
385d9b6e9e feat: convert characters routes to async mysql2
Replace synchronous better-sqlite3 calls with async mysql2 db.execute(),
import parseJson from shared utility, and add try/catch error handling
throughout all character, gear, talent, and stat endpoints.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:14:49 -04:00
Aaron Wood
2812d81979 fix: add error handling and safe JSON parsing to route handlers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:12:08 -04:00
Aaron Wood
268997a009 feat: convert campaigns, game-items, game-talents, rolls routes to async mysql2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 00:09:46 -04:00
Aaron Wood
dbc12ac816 feat: wire up migrations, CORS with credentials, cookie-parser 2026-04-11 00:07:42 -04:00