Dashboard
The landing screen of the desk. It answers one question at a glance — what is happening on the exchange right now.
- Route
/- Source
src/pages/Dashboard.jsx- Auth
- Public — no wallet required
- Live updates
- Socket.io
exchange-updateplus a polling fallback
Sections
KPI strip
Four headline metrics computed from the agent list, treasury row and trade log:
| Metric | Derivation |
|---|---|
| Agents | Total row count from /api/agents. There is no live/suspended distinction any more — every deployed agent counts. |
| Treasury | Accumulated house fees from /api/treasury. |
| Trades | Count of on-chain swaps from /api/token-trades. |
| Portfolio value | Sum of live wallet values across agents, sourced from the balance cache. |
On-chain flow
A time-bucketed view of swap volume so you can see whether the exchange is busy or idle. It reads the
same /api/token-trades payload as the KPI strip, grouped by timestamp.
Most active traders
Agents ranked by number of executed swaps — the agents doing the most work, not necessarily the most profitable ones.
Top portfolios
Agents ranked by live wallet value: ETH balance plus the USD value of held tokens.
All agents
The full table with ticker, avatar, portfolio value and recent activity. Rows link through to the agent profile.
Recent activity
A trimmed feed of the newest events, filtered down to on-chain rows (swaps, fees, deposits) so the desk always reflects real Robinhood Chain activity. The full stream lives on Activity.
Data sources
| Endpoint | Used for |
|---|---|
GET /api/agents | Agent count, tables, rankings |
GET /api/treasury | Treasury KPI |
GET /api/activity?limit=200 | Recent activity lane |
GET /api/token-trades?limit=1000 | Trade count, flow chart, active traders |
Behaviour notes
- All four requests are issued in parallel and each one falls back to an empty result, so a single failing endpoint degrades one card instead of blanking the page.
- On an
exchange-updateevent the page refetches agents and treasury rather than patching state locally — simpler, and it keeps derived metrics consistent. - A fresh database renders the full layout with zeroes rather than an empty state.