---
title: MC Dashboards (Mission Control cross-board dashboards)
---

# MC Dashboards (Mission Control cross-board dashboards)

## What it is

A workspace-scoped dashboard that computes every widget client-side over the already-loaded board data, with a drag-and-resize grid, toolbar controls, and export. Part of Mission Control Phase 4d.

### What it does

Create dashboards that aggregate data from multiple boards into a single view. Each dashboard is scoped to a workspace and isolated by account (a foreign board id in the config just 404s, never leaks data). Dashboards support several widget types: **Numbers** (abbreviated figures like $378k), **Chart** (bar / column / pie / donut / line), and three sprint-related widgets: **Velocity**, **Planned-vs-unplanned**, and **Burndown** (frontend-computed from configured sprint/effort/done/date columns; Velocity is faithful, the other two are documented approximations since there's no sprint-history backend). Battery/Table/Apps remain in code but are off the add-widget menu.

## Where to find it

Open **Mission Control**, then the **Dashboards** section in its left nav. From there the **+** button creates one and **+ Add widget** builds it up.

## How it behaves

### How to use it

1. Open Mission Control and click the **"Dashboards"** section in the left nav
2. Click **+** to create a new dashboard
3. Use the **+ Add widget** dropdown to add widgets
4. Connect boards via the **N connected boards** button (opens a connect-boards modal)
5. Drag widgets to reposition, resize by dragging edges
6. Use toolbar controls: **People** and **Filter** to scope widget data, **Export** to save as PNG or print-to-PDF

### Key features

| Feature | Detail |
|---|---|
| Grid layout | `react-grid-layout` with per-widget `{x,y,w,h}` stored in config |
| Autosave | Draft + debounced-autosave model (no Edit/View toggle) |
| People/Filter toolbar | `config.filters` scope every widget's data via shared `applyFilters`; a rule only constrains boards that have its column |
| Export | Rasterizes the grid with `html-to-image` (PNG / print-to-PDF) |
| Invite | Reuses the member directory |
| Publish to Web | Dashboard header has a publish button (Phase 9b) |

### Data model

`dashboards` table (workspace-scoped + account-isolated like boards) with an opaque `config` JSONB (`boardIds` + `widgets`). CRUD via `dashboardsRoutes`. The `DashboardPage` computes every widget client-side over the existing ownership-checked `GET /boards/:id/full`.

## For agents

### Key files

- `src/plugins/mission-control/web/features/dashboard/` (all dashboard components)
- `src/plugins/mission-control/web/features/dashboard/DashboardPage.tsx` (main page)
- `src/plugins/mission-control/web/features/dashboard/DashboardHeader.tsx` (header with export/invite)
- `src/plugins/mission-control/web/features/dashboard/DashboardPublishButton.tsx` (publish to web)

### Tests

Pure logic (`dashboardLayout` / `sprintData` / `dashboardFilter`) is unit-tested. Design spec: `docs/superpowers/specs/mission-control-dashboard-redesign-design.md`.

## Related

### See also

- [mission-control.md](mission-control.md) (parent page)
- [INDEX.md](INDEX.md)

