Composable widgets
Dashboards
Mark a Postgres view as `type: "dashboard_widget"` in its comment and it appears as a widget on the schema dashboard, with permissions inherited from the underlying view.
0.supasheet.app / crm / dashboard
MRR
$148.2k+12.4%
Open deals
294+8.1%
Win rate
34.7%-1.2%
Revenue trendarea
Pipeline by stagebar
MRR last 12 weekstrend
Active userstrend
Avg deal sizetrend
What it does
The capabilities you get out of the box.
Capability01
SQL-defined widgets
A view is a widget. No widget builder, no JSON config.
Capability02
Permission-scoped
Users only see widgets whose underlying view they can SELECT.
Capability03
Per-schema
Each schema gets its own dashboard - perfect for multi-tenant or multi-domain apps.
How it works
Three steps from SQL to UI.
- 01Create a viewAggregate, join, window - any SQL is fair game.
- 02Tag itAdd `{"type": "dashboard_widget"}` to the view comment.
- 03DoneIt shows up on the next dashboard load with the right chart type.
example/dashboards.sql
-- KPI card: count of open deals.
create or replace view crm.deal_pipeline_summary
with (security_invoker = true) as
select count(*) as open_deals
from crm.deals
where stage not in ('won', 'lost');
comment on view crm.deal_pipeline_summary is '{
"type": "dashboard_widget",
"name": "Open deals",
"widget_type": "card_1"
}';
-- Table widget: latest 10 deals.
create or replace view crm.recent_deals
with (security_invoker = true) as
select id, name, value, stage, owner_id, created_at
from crm.deals
order by created_at desc
limit 10;
comment on view crm.recent_deals is '{
"type": "dashboard_widget",
"name": "Recent deals",
"widget_type": "table_1"
}';Get started
Try it on your own Supabase project.
Connect a project, install the Supasheet schema, and your tables are live in minutes.
No credit cardSelf-host or managedMIT licensed