71 lines
3.0 KiB
Markdown
71 lines
3.0 KiB
Markdown
# 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.
|