Skip to content

Dashboards

Dashboards

Per-tenant, named collections of widgets. Lives at /bi.

Create a dashboard

/biNew dashboard. Title + description; saves immediately with an empty canvas.

Anatomy

A dashboard row stores:

id: uuid
tenant_id: uuid
title: string
description: string | null
widgets: Widget[] # 0..n
share_token: string | null # set when public

Widget 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.