Optimize dashboard overview loading

This commit is contained in:
2026-06-06 00:42:00 +02:00
parent a412998c96
commit b340489d96
14 changed files with 990 additions and 88 deletions

View File

@@ -10,7 +10,10 @@ All dashboard pages poll the State Hub API automatically. No manual refresh is e
## Poll interval
Every page fetches fresh data from `http://127.0.0.1:8000` every **15 seconds** using an async generator loop. The previous data stays visible while the next request is in flight, so the UI never goes blank.
Most live pages fetch fresh data from `http://127.0.0.1:8000` every **15 seconds**
using an async generator loop. The overview page uses a heavier bounded read
model and refreshes every **60 seconds**. The previous data stays visible while
the next request is in flight, so the UI never goes blank.
---
@@ -21,6 +24,7 @@ The **●** dot in the top-right corner of each page shows the current connectio
| Indicator | Meaning |
|---|---|
| **● Live · updated HH:MM:SS** | Last poll succeeded — data is current as of that time |
| **● Stale · last successful update HH:MM:SS** | Last refresh failed, but cached page data is still visible |
| **● Offline — run: `make api`** | API is unreachable — the dot turns red |
The timestamp updates on every successful poll. If you see a time that is more than ~30 seconds in the past, the poll is stalled (browser tab backgrounded or network issue) — reloading the page resets the loop.
@@ -48,7 +52,7 @@ make api # db + migrate + uvicorn (restarts if already running)
| Page | Endpoints |
|---|---|
| Overview | `/state/summary` |
| Overview | `/state/overview`, `/decisions/?decision_type=pending` |
| Workplans | `/workplans/`, `/topics/`, `/state/summary` |
| Decisions | `/decisions/?limit=500`, `/topics/` |
| Progress | `/progress/?limit=500` |
@@ -57,4 +61,4 @@ All endpoints are read-only GET requests. The dashboard never writes to the API.
---
*Poll interval: 15 s. Data is refreshed in the background — the page never reloads itself.*
*Poll interval: 15 s for most pages, 60 s for Overview. Data is refreshed in the background — the page never reloads itself.*