Pairs export with validated .db restore, documents the difference from game
save imports, and renames the JSON upload button to Import game backup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keeps the README aligned with the new viewer features so setup and API
usage stay discoverable without reading the source.
Co-authored-by: Cursor <cursoragent@cursor.com>
Extends the goals system and viewer UX so players can track item and skill
targets with groups, ETAs, global search, snapshot management, and DB export.
Co-authored-by: Cursor <cursoragent@cursor.com>
Include goal groups without items in the structured goals API so newly created groups show up immediately.
Co-authored-by: Cursor <cursoragent@cursor.com>
Log goal creation, group management, tab usage, deletions, and goals reached on import to measure feature adoption and completion.
Co-authored-by: Cursor <cursoragent@cursor.com>
Players can create named goal groups, set absolute item targets from inventory, track progress in a new Goals tab, and get banners when uploads complete goals or entire groups.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the fixed /v/local/ default with a reused secret viewer id so local runs get a bookmarkable personal URL like production.
Co-authored-by: Cursor <cursoragent@cursor.com>
Load tagged-events from plausible.elpatron.me on all pages, allow it in CSP, and track successful save uploads with import status.
Co-authored-by: Cursor <cursoragent@cursor.com>
Map the container to the host so NPM can reach http://<host>:5000 and document the docker-network alternative in the README.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pass the viewer id via a body data attribute instead of a blocked inline script so personal links still load saved data after restart.
Co-authored-by: Cursor <cursoragent@cursor.com>
Build public links from host_url netloc behind reverse proxies so generated viewer URLs do not include the internal upstream port.
Co-authored-by: Cursor <cursoragent@cursor.com>
Read get_data_dir from the environment on each request so CLI and server always use the same viewer database path.
Co-authored-by: Cursor <cursoragent@cursor.com>
Each player gets an isolated SQLite viewer via a unique URL without login, with landing page warnings to save the link and compose-based hosting for sharing with others.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prepare the UI for English (default/fallback) and German with auto or manual locale selection, and report import issues with client-translated warnings instead of failing on minor save format changes.
Co-authored-by: Cursor <cursoragent@cursor.com>