Commit History
-
Fix localStorage auth fallback trapping accounts on one device
mlmihjaz +1: Claude Opus 4.8backendReachable() no longer memoizes failures, so a single cold-start probe miss can't permanently route the session to localStorage. Added a 5s timeout on the probe. register()/login() refuse the device-local fallback in production (localFallbackAllowed gates it to localhost / explicit opt-in), throwing a retry error instead of silently forking an account that breaks login from any other device. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>24ea5ee -
Per-user backend word sync, sea wavelets, and pond surface life
Persistence - Store.js: IndexedDB + localStorage mirror + in-memory last-resort fallback; per-user namespacing keyed by lowercased email; auto-migrate guest progress on first login (one-shot, flagged in localStorage); idb transaction errors no longer permanently disable the IDB connection - Backend sync: new POST/GET /api/me/words on the Node server with a user_words SQLite table (email, w, status, streak, ok, bad, seen, stars). Store.js debounces uploads (~1.2 s) and pulls remote-merged-into-local before loadProgress so the same account picks up on any browser/device - Vite proxy /api → :7860 so backend sync actually runs in dev mode (was silently failing same-origin before, which is why incognito never saw saved progress) - GameUI: visible bottom-right "Saved" toast on every Store.onSave, top-right Report Problem button with diagnostic dump + wa.me link, dismissable "Recently fixed" card under it Water - Replace single-axis sin/cos vertex waves with 5-layer multi…4e53d9c
-
Clear leaderboard: remove fake peer seed, use backend leaderboard API
94ef118 -
Use env-backed seed admin password and rotate default
2846662 -
Initial commit: ECHO 3D vocab game with Node+SQLite backend, admin dashboard, Docker deploy
173e683