Status: done

# 35 — Tracker web dashboard

## What to build

A read-only web dashboard served by the tracker itself at `GET /dashboard` — single page, plain HTML/JS polling the tracker's HTTP endpoints, static assets embedded in the tracker package. No new build toolchain.

Because the tracker hive replicates ledger and registry state, **any tracker in the mesh — leader or follower — can serve the dashboard** from its own state.

Panels:

- Hive membership and current Raft leader
- Node registry: health, scores, coverage map per model
- Client ledger balances
- Node pending balances and next-payout ETA
- Settlement history with devnet explorer links (tx signatures)
- Strikes / bans / forfeiture events
- Rolling RPM stats per model

Write operations (editing prices, manual settlement trigger) are deferred to a later story.

## Acceptance criteria

- [ ] `GET /dashboard` serves the UI from any tracker (leader or follower)
- [ ] All seven panels render with live data
- [ ] Auto-refresh ≤5s without page reload
- [ ] No new build toolchain — static assets embedded in the tracker package
- [ ] Works against a 3-tracker hive in the two-machine LAN test setup

## Blocked by

- `31-billing-ledger.md`
- `33-settlement-loop.md`
