dare global-time page — clickable UTC dates resolve to meeting-time planner (LIVE 2026-05-16)
DARE.CO.UK · PARKED SKETCH · 2026-05-18
Mirrored from ~/.claude/.../memory/project_dare_global_time_page_parked.md. This is a design sketch parked for future build — read for context, not as a current deliverable.
SHIPPED 2026-05-16. dare-time-poc.pages.dev/
/ renders a London/NYC/Tokyo working-hours grid for any date. Every UTC date stamp in dashboard.dare.co.uk AND devreports.dare.co.uk catalog now links to the corresponding day-grid. Generator at ~/bin/dare_time_page.py uses Python’s zoneinfo stdlib — no external API. Phase 2 backlog: ICS export, custom-city query string, co-locate URL under devreports.dare.co.uk/time/.
STATUS: LIVE. Sketched, shipped, and wired into production on the same day (2026-05-16). See “Live state” section at the bottom for what’s deployed and what’s queued for Phase 2.
Dan flagged 2026-05-16 morning: every UTC date stamp in the dev reports (catalog “Generated 6.01am” lines, session report headers, “fetched at” footers, etc.) sits in a single time zone — London/UTC — that’s invisible context to a New York or Tokyo collaborator. If those dates were links, they could resolve to a small page showing the same instant in multiple time zones, colour-coded by working-hours overlap.
Reference inspiration: timeanddate.com/worldclock/meetingtime.html?iso=20260516&p1=198&p2=136 — the colour-coded meeting-time grid. Hour rows × city columns, each cell tinted by working-hours fit:
- Green — comfortable working hours for that city (~9 am–5 pm)
- Amber — fringe hours (early morning, late evening — meeting-feasible but ask-first territory)
- Pink/red — night hours (don’t schedule)
- Grey — UTC reference column (no judgement)
That tri-state tinting is the lever. The whole grid is “is this hour green for everyone?” at a glance.
Why: scheduling meetings across countries is famously hard without a visual aid. Every Slack thread that ends “what time is that in Tokyo?” is friction we already know about. A clickable UTC date that resolves to a colour-coded meeting-time grid replaces the friction with a one-click answer. It also gives devreports a second axis of utility (catalog of work + scheduling lookup), which compounds the surface’s value without changing its primary purpose.
Why this fits the dare toolkit shape:
- Static page generator (per
project_hygiene_toolkit.md) — one script, one URL per date, no server. - Reuses the existing devreports.dare.co.uk Cloudflare Pages project — pages live at
/time/2026-05-16/etc. - Date-stamped output, predictable URL shape — same find-time-matches-save-time rhythm as the rest of the toolkit.
- Portable: dogwood (NYC ↔ Hamptons ↔ Greenwich pickup scheduling), audrey (NYC ↔ international logistics), client work (any cross-timezone engagement).
POC sketch (when resumed):
- Default city set: London / New York / Tokyo. Three regions: morning-Europe / morning-East-Coast-US / morning-East-Asia. Covers ~85% of dare’s meeting geography. User can add more later — but ship three first so the visual reads cleanly.
- URL shape:
https://devreports.dare.co.uk/time/<YYYY-MM-DD>/— clean, RESTful, cacheable. - Generator: Python script (
~/bin/dare_time_page.py) walks a date range, emits one static HTML per UTC date. 24 rows (UTC hours) × 3 columns (London / NYC / Tokyo). Each cell shows the local time-of-day + colour class from the working-hours map. No JS needed for v1 — pure server-rendered HTML. - Link injection: the dev-reports publish script (
dare_dev_reports_publish.py) or the augmented-session-report renderer learns about the URL pattern and rewrites bare UTC date stamps to<a href="/time/<date>/">. Hover-preview shows the meeting-time grid inline (perfeedback_hover_preview_on_urls.md). - City personalisation: v1 hard-codes London/NYC/Tokyo. v2 reads
?cities=london,nyc,tokyo,sydneyquery string and renders dynamically. v3 saves a per-visitor preference in localStorage. (Don’t pre-build v2/v3 — wait for the friction.)
Implementation candidates for the “global time API”:
The timeanddate.com page is HTML-only (no public API). Options for our generator:
zoneinfo(Python stdlib) — built-in, accurate, no network. Gives wall-clock for any(utc_datetime, timezone_name)pair. This is probably enough — we don’t need a third-party API.pytz— older, still used in some places.zoneinfois the modern choice.tzdatapackage — ships the IANA database. Worth pinning the version in case the OS-bundled tzdata lags.- Skip the API question entirely — colour mapping is just
if 9 ≤ hour < 17 → green; if 7 ≤ hour < 22 → amber; else pink. The “API” is the working-hours rule, which is local to us.
Resume conditions:
- A specific scheduling pain point lands (e.g. a client engagement with a non-London partner) — that’s the wedge.
- The hover-preview pattern from
feedback_hover_preview_on_urls.mdrolls out broadly enough that adding “and these UTC dates become links too” is a one-line extension. - Dogwood needs a NYC ↔ Hamptons ↔ London pickup-scheduling helper for member dogs — same generator, different city set.
- Audrey expands wholesale ops to a non-US time zone — same.
Related memory:
feedback_hover_preview_on_urls.md— the URL-becomes-link-with-hover pattern this would extendproject_hygiene_toolkit.md— generator philosophy (static, dated outputs, portable)feedback_save_vs_find_alignment.md— design save-shape AND find-query together
Status: parked. Reference link Dan flagged: https://www.timeanddate.com/worldclock/meetingtime.html?iso=20260516&p1=198&p2=136
Live state (as of 2026-05-16)
Shipped:
~/bin/dare_time_page.py— the static generator. Flags:--date YYYY-MM-DD,--days N,--cities london,nyc,tokyo,...(presets + raw IANA tz strings),--out PATH. Defaults: today + next 6, London/NYC/Tokyo. Zero deps beyond stdlib (zoneinfofrom Python 3.9+).- Hosted at
https://dare-time-poc.pages.dev— currently 45 days deployed (2026-04-16 → 2026-05-30). Index page lists each day’s Goldilocks-slot count + a 24-segment overlap bar. - dashboard.dare.co.uk header has two clickable dates: the window-end kicker date and the “Generated …” timestamp. Both link to the corresponding
/<iso>/day page. (~/bin/dare_cf_analytics.py + dare-pipelinee82bd66.) - devreports.dare.co.uk has every per-day section heading wrapped as a link to
/<iso>/+ the top “Last published …” freshness stamp linked too. ~10 date links per catalog render. (~/bin/dare_dev_reports_publish.py + dare-pipelinec98c147.) - CSS pattern:
.time-link+h2 > a:only-child— dotted-underline that solidifies + turns accent-red on hover. Subordinate to the primary content; readers don’t see “clickable date” until they look.
Phase 2 backlog (in priority order):
- ICS export — click a Goldilocks row → copy as ICS / open in Google Calendar with the slot pre-filled. Trivial extension (ICS is just text); turns the page from “viewer” into “scheduler”.
- Co-locate the URL under
devreports.dare.co.uk/time/— currently a separate CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Pages project (dare-time-poc). Co-locating means one less domain, cleaner sharing, drops the .pages.dev subdomain. Pattern: route/time/*to the time-page renderer in the devreports pipeline (Cloud Run can serve both). - Custom cities via query string —
?cities=london,paris,berlin,sydneyreads fromCITY_PRESETS(already exists in the generator). Render dynamically when the query string is present. - localStorage per-visitor preference — remember which cities each visitor wants. Cookie-free.
- “Best pair” suggestion when 3-way is empty — when no Goldilocks slot exists, suggest the best 2-of-3 overlap (e.g. “London+NYC have 3 core hours at UTC 14–17”). Common case for London+NYC+Tokyo, which almost never has a 3-way core slot.
--rule strict|relaxedflag — flips whetherfringecounts as overlap. Relaxed mode unlocks evening-Tokyo / morning-NYC slots.- Hover-preview integration — when the date links are inside a dev report, the hover-preview helper (
anchor_enricher.py) could render the mini-grid inline. Same mechanism used forlink-with-thumbanchors. - Portfolio fan-out — dogwood (NYC ↔ Hamptons pickup scheduling), audrey (international wholesale ops), client work. Generator already accepts any IANA tz, so each instance is just a
--citieschange + a separate CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Pages project.
Counter-pattern noted: with London+NYC+Tokyo on strict-core rule, Goldilocks slots are usually empty — that’s a real-world finding, not a bug. The grid surfaces “no 3-way slot exists today” honestly. Phase-2 item #5 (best-pair suggestion) is the answer.