From 99786f6fc966bd4e198959cf4f6a9b7d65e3f644 Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Sat, 15 Aug 2026 21:42:09 +0200 Subject: [PATCH] fix: label a daily pip in game-day space, not the reader's zone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A day key is a game-day, not an instant, but the pip's title and aria-label were formatted in the browser's timezone. Every reader west of UTC saw a pip reading "12" whose screen-reader label said "Aug 11" — including the whole `america` region these checklists are scoped to. Co-Authored-By: Claude Opus 5 (1M context) --- src/client/components/DailyChecklist.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/client/components/DailyChecklist.tsx b/src/client/components/DailyChecklist.tsx index c5f4e96..d0b59db 100644 --- a/src/client/components/DailyChecklist.tsx +++ b/src/client/components/DailyChecklist.tsx @@ -135,9 +135,14 @@ function DayPip({ }) { const isToday = day === today; const isFuture = day > today; + // Rendered in UTC on purpose. A day key is a game-day, not an instant, and + // formatting it in the reader's own zone shifts it a day backwards for + // everyone west of UTC — so the pip would read "12" while the label a screen + // reader announces said "Aug 11". const label = new Date(`${day}T00:00:00Z`).toLocaleDateString(undefined, { day: "numeric", month: "short", + timeZone: "UTC", }); return (