Files
2026-06-18 22:21:38 -04:00

3.0 KiB

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.