Why do we build these per-request rather than during dashboard setup? It doesn't look like anything changes between requests. (Similarly for `WidgetContainer` and `DashboardPage` below.)