Dashboards as code. Ship a status board in a pull request.
dashb0rd is the dashboards-as-code platform your team actually versions. Define status pages, KPI boards and ops consoles in TypeScript, commit to git, and every PR gets a preview URL. Rollbacks are a git revert.
- Widget primitives
- 24
- Data source adapters
- 12
- PR → preview
- < 60s
- Price per public board
- $0
Six primitives. Endless boards.
Every widget is a typed React component you import from @db0/widgets. Compose them into boards with a single defineDashboard() call.
Metric· KPI tile
@db0/widgetsA big number with a delta, sparkline and threshold-aware colouring.
Status· Uptime
@db0/widgetsService status grid with history bars and colour-coded incident windows.
Timeline· Events
@db0/widgetsOrdered events with tags, owners and links — deploys, incidents, releases.
- 12:04deploy · v4.28.1
- 09:41incident · edge 5xx
- 07:12rollback · v4.28.0
Grid· Table
@db0/widgetsSortable, filterable data grid that renders from any JSON source.
Log stream· Tail
@db0/widgetsLive log tail with regex highlighting and severity filters. ANSI-aware.
INFO deploy built commit=8a2f1
INFO edge cache warmed arn1=ok
WARN queue depth 148 > threshold 100
ERR checkout-api 503 upstream
Regions· Map
@db0/widgetsDeployment regions map with per-region latency and active traffic.
A dashboard is a file. A deploy is a commit.
Drop a TypeScript file in dashboards/, export a defineDashboard() result, and dashb0rd renders it — with typed data sources, auth rules and threshold-driven alerts.
- Preview URL per PR — review dashboards the same way you review code.
- Access is data — access: "team", "public" or a callable.
- Data sources are typed adapters — Vercel, Postgres, Stripe, Linear, your own.
// dashboards/ops.tsx
import { defineDashboard, Metric, Status, Timeline } from "@db0/widgets";
import { vercel, statuspage, postgres } from "@db0/sources";
export default defineDashboard({
slug: "ops",
title: "Ops — fleet health",
owner: "@platform",
access: "team",
widgets: [
Metric({
title: "Checkout p95",
source: vercel.metric("fn.duration.p95", { tag: "checkout" }),
unit: "ms",
threshold: { warn: 400, error: 800 },
}),
Status({
title: "Services",
source: statuspage.components(),
}),
Timeline({
title: "Deploys · incidents",
source: postgres.query(`SELECT ts, kind, label FROM events ORDER BY ts DESC LIMIT 25`),
}),
],
});Three steps. One git workflow. Zero yak-shaving.
- 01Install the CLI
pnpm add -D @db0/cli and run dashb0rd init. Your repo gets a dashboards/ folder and a GitHub App hook.
- 02Write a dashboard
A dashboard is one TypeScript file. Compose widgets, wire typed sources, commit the file.
- 03Open a PR
Every PR gets a live preview URL. Merge to main and the board goes live on dashb0rd Cloud or self-hosted.
# bootstrap dashb0rd in any Next.js repo
pnpm add -D @db0/cli
pnpm dashb0rd init
# add your first board
pnpm dashb0rd new ops
# review it in a PR
git checkout -b feat/ops-board && git commit -am "feat: ops board" && gh pr createFour dashboards most teams rebuild every year.
Internal ops board
Deploys, incidents, queue depth, error rate. One TS file, owned by platform, access-scoped to the team.
Public status page
Ship status.yourco.com as a PR. Markdown incident posts in the same repo, RSS + subscriber webhook included.
Weekly KPI board
MRR, churn, activation and magic numbers — pulled from Stripe + Postgres, versioned in the analytics repo.
Release war room
Launch-day dashboard per feature flag: rollout %, error delta, support tickets. Archived with the launch PR.
Opinionated where it matters. Boring where it should be.
Dashboards are typed. Widgets are typed. Data sources are typed. Autocomplete every field, catch regressions at build time.
Version, review, revert. Every PR opens a preview URL. Rollbacks are `git revert`, not a form in a SaaS UI.
Server Components by default, Cache Components per board, streamed widgets. Installs in any Next.js repo.
Dashboard renders reuse instances with graceful shutdown. 300s timeouts for the slowest report.
Typed adapters for Vercel, Postgres, Stripe, Linear, PostHog, Prometheus, GitHub and a generic HTTP source.
Ship to your own Next.js app with @db0/runtime, or point the CLI at dashb0rd Cloud. Same code either way.
Free to self-host. Paid when you want hosting off your plate.
Open core
The dashb0rd runtime and widgets, MIT-licensed. Drop into any Next.js repo.
- @db0/runtime · @db0/widgets · @db0/sources
- MIT licence, MIT-forever
- Public boards on your own domain
- GitHub App for PR previews
Cloud
Most popularHosted dashb0rd with managed previews, team auth, scheduled refresh and alerts.
- Everything in Open core
- Hosted previews (no Vercel project per board)
- Team auth (SSO, scoped API tokens)
- Scheduled refresh + alert webhooks
- Private board sharing links
Enterprise
Single-tenant deploy, audit log, SAML and SLA for teams that need a data vault.
- Everything in Cloud
- Single-tenant region (EU or US)
- SAML, SCIM, audit log export
- Private source adapters
- 99.95% uptime SLA