Early Bird and Twenty Doors read the laptop's clock, not the member's

Fixkamo-internal
Shipped
September 9, 2026 at 2:32 AM UTC
Author
Kamo
Commit
6e9440a

`check-server-timestamps` was red on main: `rememberToday` bucketed the day with `new **************** which is the BROWSER's zone. The guard exists because that is a fact about the machine, not about the member — someone whose profile says Eastern is still working in Eastern from a hotel in Denver. Both cartography eggs that are about WHEN had it: - Twenty Doors counts distinct areas in one sitting. Bucketed by the browser's day, a member two zones from their profile had the set emptied hours early or hours late — mid-sitting either way, and indistinguishable from the egg simply not paying. - Early Bird asked `new Date().getHours() < 6`, the same defect written the other way. It paid for a 7am start and missed a 5am one. `rememberToday` now takes the zone and REQUIRES it, so an omitted one is a compile error rather than a silent fall back to the browser. It buckets with `zonedDayKey`, which the chat day separators and the agenda already group by, so "today" means one thing across the product. `zonedHour` is new beside `zonedDayKey` and is what Early Bird asks now. It uses `hourCycle: 'h23'` rather than `hour12: false`, which renders midnight as 24 in some runtimes and would put an hour outside the range it promises. EggHunter reads `useMemberTimezone()`, which costs nothing: MemberTimezoneProvider wraps the application in the root layout, so this is the zone the server already resolved, available synchronously on the first render. Neither function had a single test, which is why a browser-zone bug survived in both. There are twelve now, including the case that distinguishes them — one instant that falls on different calendar days in Los Angeles and London. The first draft of that test used 09:00 UTC, which is the same day in both and proved nothing; it is 03:00 UTC, inside the only window where the two zones disagree.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing