Dashboards
Dashboards
Per-tenant, named collections of widgets. Lives at /bi.
Create a dashboard
/bi → New dashboard. Title + description; saves immediately
with an empty canvas.
Anatomy
A dashboard row stores:
id: uuidtenant_id: uuidtitle: stringdescription: string | nullwidgets: Widget[] # 0..nshare_token: string | null # set when publicWidget order + layout is captured per-widget in layout_json
(react-grid-layout’s {i, x, y, w, h} shape).
Open a dashboard
/bi/{dashboard_id} — the canvas opens with every widget refreshed
from its last_data_json (last successful run). Click Refresh
all to re-execute every widget’s SQL in parallel; or per-widget
↻ for a single re-run.
Naming convention
Dashboards are searchable by title — name them like the question they answer:
- Clinic A/R overview
- Coverage drives — daily
- ABA panel productivity
- RCM denials — top causes this quarter
Avoid generic names like Dashboard 1; they don’t scale past 3-4 boards.
Permissions
Dashboard read is granted to any user who has read on at least one of the dashboard’s widget connections. Owners can grant per-user / per-role visibility from the dashboard settings drawer.
Delete
Dashboard owner can delete; cascade removes widgets + share tokens.
Templates (roadmap)
Per-tenant dashboard templates are documented intent — clone a stock dashboard (“Clinic A/R overview”, “ABA panel productivity”) instead of building from scratch. Not yet shipped; surface in Limits.