# Phase 18: Auto timezone detection and ability to change timezone - Discussion Log > **Audit trail only.** Do not use as input to planning, research, or execution agents. > Decisions are captured in CONTEXT.md — this log preserves the alternatives considered. **Date:** 2026-06-14 **Phase:** 18-auto-timezone-detection-and-ability-to-change-timezone **Areas discussed:** Timezone scope, Detection & drift, Where to change it, Behavioral boundary --- ## Timezone scope | Option | Description | Selected | |--------|-------------|----------| | Single household tz | One value in app_config; matches existing implicit single-TZ model and the 2-person same-household reality | ✓ | | Per-member timezone | users.timezone column; per-member 9 AM reminders; needs migration + per-row scheduler logic | | **User's choice:** Single household tz (app_config) **Notes:** Two-person same household — single value is the simplest correct model. --- ## Detection & drift | Option | Description | Selected | |--------|-------------|----------| | Seed on setup, manual after | Auto-detect during Phase 12 wizard/first run to seed; thereafter changes only via settings UI, no auto-overwrite | ✓ | | Detect every login, prompt on drift | Compare browser tz to stored on each login; prompt to update when different | | | Detect every login, silent update | Always overwrite stored tz with the browser's | | **User's choice:** Seed on setup, manual after **Notes:** Avoids travel/VPN silently shifting the "fires at 9 AM" guarantee. --- ## Where to change it | Option | Description | Selected | |--------|-------------|----------| | Admin Settings + wizard | Role-gated /admin Settings (Phase 10) + seeded by the Phase 12 setup wizard | ✓ | | Any member, general settings | Non-admin settings area; fits per-member scope better | | **User's choice:** Admin Settings + wizard **Notes:** Single household-wide setting behind requireAdmin is the correct fit. --- ## Behavioral boundary | Option | Description | Selected | |--------|-------------|----------| | All-day reminder tz only | Stored tz is source of truth for server-side all-day 9 AM computation, overriding process.env.TZ; display + timed serialization stay browser-local | ✓ | | Also override display / timed logic | Stored tz also drives display rendering and/or timed reminders | | **User's choice:** All-day reminder tz only **Notes:** Keeps blast radius small; protects the already-correct browser-local write/display path. --- ## Claude's Discretion - Timezone picker UX (recorded default: searchable IANA dropdown; validate IANA before storing). - Exact app_config key name + read/cache strategy for the stored value in scheduler/outbox. - Optional non-blocking "detected zone differs" login notice (allowed, not required). ## Deferred Ideas - Per-member timezones — only relevant if members live in different zones; own phase if ever true. - Driving display/timed reminders off the stored tz — deliberately excluded to protect the browser-local path.