- Add `timezone` column to User model (VARCHAR 64, default UTC) with
idempotent startup migration
- Expose and persist timezone via PATCH /api/users/me
- Fix TimerEvent.occurred_at serialization to include UTC offset marker
(+00:00) so JavaScript correctly parses timestamps as UTC
- Add frontend utility (src/utils/time.js) with timezone-aware
formatTime, getHHMM, getDateInTZ, tzDateTimeToUTC helpers and a
curated IANA timezone list
- Add Settings section to Admin page with timezone dropdown; saves to
both the API and localStorage for the unauthenticated TV view
- Update Activity Log to display and edit times in the user's timezone
- Update TV dashboard clock to respect the saved timezone
- Update README: features, setup steps, usage table, WebSocket events
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>