Opening the analytics dashboard used to trigger a full re-aggregation of the event log on every visit, after the browser had already spent a round trip loading an empty shell. Both waits are now gone.
- The backend keeps a precomputed snapshot per date range and refreshes it in the background every five minutes, so the metrics endpoint answers from memory instead of recomputing per request.
- A stale snapshot is served immediately while it refreshes behind the scenes, and a failed refresh keeps the last good data - viewers are never blocked on a recomputation.
- The dashboard page now fetches its data during the server render, so the first paint already carries the numbers - a major difference on slow connections.
- Repeat visits within a minute are answered straight from the browser's private cache without any network round trip.
- The same caching layer now backs the Skill Browser, the profile data behind job and event discovery, artifacts, persisted lesson content, learning paths, and assessment history - those surfaces answer from memory too, with cached data dropped the moment the learner changes something.
