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>
- 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>
- 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
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>
Each migration file now runs in a transaction - if any statement fails,
the entire file is rolled back and no _migrations record is written.
Also documents the naive semicolon-split constraint.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Path was resolving to repo root instead of server/migrations/.
Changed from two '..' segments to one.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Removes better-sqlite3 and its types, installs mysql2 (async MariaDB
driver) along with jsonwebtoken, bcrypt, cookie-parser, and dotenv.
Rewrites db.ts to export a mysql2 connection pool pointed at the
Darkwatch MariaDB instance (port 3307).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Switch fire effect from tsParticles to a full-screen Three.js WebGL
shader using layered FBM noise for volumetric-style flames rising from
the bottom of the screen. Also fix rain/embers canvas banding by
switching them to tsParticles fullScreen mode.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fire: 1-5px (was 4-12, balloons), count 60-200, speed 4-10
- Rain: drop line shape (invisible in slim), use fast circles 200-600 at 15-30
speed so motion reads as streaks
- Embers: 1.5-4px, count 20-80, speed 0.5-2 — clearly slower/dimmer than fire
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fire: remove broken emitter (not in slim bundle), bigger particles (4-12px),
more count (80-300), outModes "out" so particles respawn continuously
- Rain: switch to line shape (in slim), size 10-20px for visible streaks,
higher opacity and speed
- Embers: bump min size to 2-5px, increase count (30-120) for visibility
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>