Gap
Timezone is hardcoded UTC — sites are created timezone: "UTC" (routes/analytics.ts:399) and the hourly axis is labeled UTC (dashboard.stx:1220-1222). "Day" bucketing is therefore wrong for non-UTC users.
Proposed
Store a per-site timezone (already a column on sites), let the owner set it, and bucket time-series in that zone.
Priority: P1.
From the 2026-07-20 privacy-first competitive audit (vs. Plausible / Fathom / Simple Analytics / Umami).