Switch to JSON store so Electron runs without native sqlite rebuild.

Auto-seeds 10 presets on first launch; visual designer with palette, drag, resize, and bricks CRUD.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-09-12 14:52:31 +08:00
parent d1f180ee0a
commit 45105cd069
6 changed files with 112 additions and 461 deletions
+5 -23
View File
@@ -2,38 +2,20 @@
## Decision
Electron + React + TypeScript + Vite; SQLite with JSON documents for systems/characters; portable `app/shared` contract for future TTRPG Player + mobile.
Electron + React + TypeScript + Vite; JSON file store (`userData/store.json`) for systems/characters; portable `app/shared` contract for future TTRPG Player + mobile.
## Rationale
Matches TTRPG Player packaging targets; offline-first; no Postgres.
Offline-first; avoids native module rebuild (better-sqlite3) requiring Visual Studio on Windows.
# ADR-002: Formula DSL
## Decision
Custom minimal expression language (`floor`, `ceil`, `round`, `min`, `max`, `clamp`, arithmetic, `attr.*` / `skill.*` / `resource.*` / `derived.*`).
## Rationale
Same evaluator can be copied into the player; explicit rounding; no heavy CEL/JSONata dependency.
Custom minimal expression language with explicit rounding; portable to the player.
# ADR-003: Schema freeze via snapshotHash
## Decision
Player binds store `snapshotHash` (content-addressed) rather than inline full schema per character.
## Rationale
Implements freeze-on-bind without bloating `players.json`.
Player binds store `snapshotHash` rather than inline full schema per character.
# ADR-004: Spells from dnd.su
## Decision
Provide an import pipeline for PHB-labelled spells from dnd.su at product owner request, with README/IP disclaimer. Prefer SRD stubs in default presets.
## Rationale
Owner requested PHB coverage; redistribution risk acknowledged.
Import pipeline for PHB-labelled spells at product owner request, with IP disclaimer. Default presets ship SRD stubs.