dare.co.uk · dashboard v2
Observable Framework proof-of-concept · porting one chart from dashboard.dare.co.uk to test the rebuild path
requests · days
avg requests / day
months in window
last observation
Page hits — by month
The chart the v1 dashboard CSS-fixed yesterday (commit 9a03c2f). This is the Observable Plot version, rendered from the same underlying 90-day series. Compare bar heights side-by-side against v1.
Page hits — by weekday (90-day avg)
The second tab on the v1 trend chart, same data shape. Demonstrates the toggle pattern Observable handles natively via two side-by-side blocks (or a real toggle component in a later iteration).
Daily series — last 90 days
below typical ·
typical band
elevated ·
Typical band = 25th–75th percentile of the prior 83 days. Last 7 days are coloured by the verdict; the band shades the chart so any departure is visible without reading the numbers.
Source: →
· fetched · POC notes
Wired:
src/data/heatmap.json.pyreads the existing~/Downloads/dare_analytics_cache/heatmap_90d_*.json(latest), reshapes into{daily, monthly, weekday_avg}, emits JSON on stdout. Observable Framework captures it as the built data file — no rewrite of the v1 Python fetcher needed.- Three charts using
@observablehq/plot: monthly bars (the one with the CSS-fix incident), weekday-avg bars, and 90-day daily area+line. All driven from the same loader output. - Metric cards CSS-tuned to match the v1 pattern: big bold number, lowercase grey label, inline ↗/↘ delta with traffic-light colour.
Not wired yet (Phase 2):
- Live CF Analytics GraphQL fetch in the data loader itself (would need
CF_ANALYTICS_TOKENviaop://Code Shared/dare-pipeline analytics/credential). - Hover popovers / cross-filter linking between charts.
- Narrator paragraph (LLM-generated lede from v1).
- The "Live" toggle that re-queries CF on-demand (Observable Framework's build-time model needs a small JS escape hatch for this).
- Multi-site shape — a shared
xlab-co/dashboard-kitexposingMetricCard, narrator loader, voice tokens, importable fromdare-dashboard-v2,audrey-dashboard,dogwood-dashboard.
What this proves (or fails to):
- Existing Python loaders slot in unchanged — yes/no.
- Observable Plot lands the metric-card visual + chart density — eyeball vs v1 to decide.
- Build → static-files → CF Pages deploy fits the existing GitHub Actions cron rhythm — yes (deploy step is
wrangler pages deploy dist).