- First-run safety notice (photosensitivity, clinical use, privacy); glow
rate capped at 2.5Hz below the photosensitive trigger band
- Patient data: initials/code hint, Export All / Wipe All buttons
- Relay sessions get crypto-random room ids instead of guessable room-1
- Fix: Pan Sync off now actually stops pink-noise panning
- Fix: slider drags no longer audibly restart the noise source
- Fix: switching pink->discrete preset no longer leaves noise running
- Fix: Speed Boost no longer compounds into stored speed across reloads
- Fix: patient/preset names HTML-escaped in lists
- Fix: patientViewport now relays over LAN (old server dropped it)
- server.py rewritten stdlib-only: static site + WS relay in one process,
no pip/venv; setup.sh/bat deleted, start scripts are now 3 lines
- MIT LICENSE added; README rewritten with safety-first quick start
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Extracted patient logic from `patient.html` to `js/patient.js` for better maintainability.
- Optimized `js/bls.js` renderer to reduce garbage collection by reusing objects in the draw loop.
- Decoupled state persistence from state updates. Added a `persist` flag to `setState` and `mergeState`.
- Disabled state persistence in the Patient view and Admin preview to prevent excessive `localStorage` writes, significantly improving performance on low-end hardware.
- Cleaned up `js/admin.js` to explicitly handle persistence only when necessary.