metaculus · backstage, reviewed checking 4 feeds…

Backstage, reviewedlive feeds · proper lifecycles · honest UI

The original /backstage is a descriptive document — what the dashboard is supposed to do. Three of its four named endpoints have been 403'd by the upstream Metaculus API since 2026-05-13, so what the doc names mostly does not run. What does run is the HTML dashboard itself — the rendered page at /. It is embedded below as the primary view. The lifecycle table and per-endpoint status are kept for completeness, demoted to a footer.

The dashboard, embedded direct iframe · the upstream's own JS reaches its own API

The iframe below points at metaculus.raindesk.dev/ directly (not through the Caddy proxy on this origin). This is intentional: the dashboard's own JS issues fetches to /api/* relative to its origin; routing those through the proxy here would point them at endpoints that don't exist. The cost of direct embedding is the possibility of X-Frame-Options refusal; if the iframe is empty for you, the upstream is refusing to be embedded and a "open in new tab" fallback is shown.

↳ live · src = metaculus.raindesk.dev · open in new tab

Lifecycle vocabulary the framework for the status footer below

loading Request in flight. No prior data; the page knows nothing yet. shown while: initial fetch or manual re-fetch
ready A response arrived within the freshness window (60s). Data is shown with its observed-at timestamp. shown until: 60s after last fetch
stale Data exists but the freshness window has elapsed. Still shown, with "stale since" indicator. Click refresh to re-fetch. shown after: 60s without re-fetch
error The last fetch failed (timeout, 4xx, 5xx, or upstream refused). The page reports what failed and when. persists until next successful fetch

Per-endpoint status three of four feeds 403'd since 2026-05-13

Each feed below was named in /backstage as part of the dashboard's architecture. The page probes them from your browser and reports the truth. The three that have been failing for days are failing because the upstream Metaculus API rejects the dashboard's unauthenticated requests; that is not a problem in the proxy or the page.

Architecture preserved from original /backstage

┌─────────────────────────────────────────────────────────────────┐ │ METACULUS FORECAST DASHBOARD │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────┐ ┌──────────┐ ┌─────────────┐ │ │ │Metaculus│───▶│ Parser │───▶│ Formatter │ │ │ │ API │ │(Clojure) │ │(text/html) │ │ │ └─────────┘ └──────────┘ └─────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ ┌─────────────┐ │ │ │ Confidence │ │ TTE Effects │ │ │ │ Intervals │ │ (terminal) │ │ │ └──────────────┘ └─────────────┘ │ │ │ │ Outputs: JSON API │ HTML Dashboard │ Terminal (TTE) │ └─────────────────────────────────────────────────────────────────┘ Source: ~/fleet-archives/archive/DEC3/metaculus Stack: Babashka + HTTP-Kit · POSIX shell collectors · TTE for terminal

What "reviewed" means here

The original /backstage describes endpoints; this page shows their behaviour. The difference matters because endpoints lie about themselves. /api/questions on the live dashboard returns 500 most of the day because its upstream (metaculus.com API) frequently 403s — the original doc does not acknowledge this. The reviewed page surfaces the failure state in the UI with a specific error code and timestamp.

Each feed has four lifecycle states. The page favours showing stale over showing nothing, because the previous successful response is usually more useful than a spinner.

Defences in this page