Every widget owns its own data
- Constraint
- The dashboard reads from several unrelated sources, each with its own shape and its own latency.
- Decision
- Each widget fetches, caches and parses its own data through TanStack Query, with its own loading and error state.
- Trade-off
- More query keys to keep coherent, and a genuine “refresh everything” has to be built deliberately rather than coming for free. In exchange, one failing source degrades one widget instead of the page.



