A dashboard is a JSON document.
Every DVT dashboard — its theme, layout, panels, and visual properties — lives as a versioned JSON spec in DVT's database. Update it via API or MCP call. No deploy pipeline for a chart color change.
Dashboards as Data (DAD)
Live, not deployed
Dashboard specs are database records — update one via REST API or MCP and it's live instantly. DVT tracks every revision server-side. Export to git if you want GitOps; it's never required.
AI-authored
Claude can POST a valid spec to the DVT MCP server and the dashboard appears — no GUI clicks, no screenshots, no copy-pasting JSON by hand.
Fully customizable
Every visual property — down to the gap between an axis and its title — is a named, storable parameter in the spec. Nothing is locked by the tool.
Deterministic
Same spec → same pixels, every time. Validate a spec before saving it. Preview changes before applying them. AI agents get a preview loop before persisting.
A simple bar chart
The smallest meaningful spec: one panel, one query, a handful of visual properties.
{
"schemaVersion": 1,
"meta": { "title": "Monthly Revenue" },
"theme": {
"tokens": {
"semantic": {
"chart.series.1": "#5BBFBA",
"chart.axis.label.color": "#6b7280",
"chart.grid.line.color": "#f3f4f6"
}
}
},
"layout": {
"columns": 24,
"items": {
"lg": [{ "i": "rev", "x": 0, "y": 0, "w": 24, "h": 10 }]
}
},
"panels": [{
"id": "rev",
"type": "chart:bar",
"title": "Monthly Revenue",
"data": {
"sourceId": "warehouse-prod",
"query": "SELECT month, SUM(revenue) AS revenue FROM sales GROUP BY month"
},
"spec": {
"xAxis": { "type": "category", "name": "Month" },
"yAxis": { "type": "value", "name": "Revenue ($k)" },
"series": [{ "type": "bar", "dataKey": "revenue", "barMaxWidth": 48 }]
}
}]
} A multi-panel growth dashboard
KPI metrics across the top, a trend line and stacked bar in the main grid — all from one spec.
{
"schemaVersion": 1,
"meta": { "title": "Growth Dashboard" },
"layout": {
"columns": 24,
"items": {
"lg": [
{ "i": "kpi-arr", "x": 0, "y": 0, "w": 8, "h": 4 },
{ "i": "kpi-users", "x": 8, "y": 0, "w": 8, "h": 4 },
{ "i": "kpi-nrr", "x": 16, "y": 0, "w": 8, "h": 4 },
{ "i": "wau-trend", "x": 0, "y": 4, "w": 14, "h": 9 },
{ "i": "rev-mix", "x": 14, "y": 4, "w": 10, "h": 9 }
]
}
},
"panels": [
{
"id": "kpi-arr",
"type": "metric",
"title": "ARR",
"data": { "metricRef": "metric.arr.current" },
"spec": { "format": "currency", "comparison": "mom" }
},
{
"id": "wau-trend",
"type": "chart:line",
"title": "Weekly Active Users",
"data": { "metricRef": "metric.wau.weekly_series" },
"spec": {
"series": [{ "type": "line", "smooth": true, "areaStyle": {} }]
}
},
{
"id": "rev-mix",
"type": "chart:bar",
"title": "Revenue by Plan",
"spec": { "series": [{ "type": "bar", "stack": "plan" }] }
}
]
} AI-authored via MCP
Claude receives a natural-language prompt through the DVT MCP server, generates a valid spec, and applies it directly — no copy-paste, no GUI.
// Claude receives this prompt via the DVT MCP server:
// "Create a funnel dashboard showing signup → activation → paid
// conversion for the last 30 days. Use our brand colors."
// Claude calls dvt_dashboard_apply_spec with:
{
"schemaVersion": 1,
"meta": {
"title": "Signup Funnel — Last 30 days",
"createdBy": { "actorType": "agent", "actorId": "claude-opus-4" }
},
"layout": {
"columns": 24,
"items": {
"lg": [
{ "i": "funnel", "x": 0, "y": 0, "w": 12, "h": 12 },
{ "i": "cvr-trend", "x": 12, "y": 0, "w": 12, "h": 12 }
]
}
},
"panels": [
{
"id": "funnel",
"type": "chart:funnel",
"title": "Conversion Funnel",
"data": { "metricRef": "metric.funnel.signup_to_paid_30d" },
"spec": {
"steps": ["Signup", "Activated", "Trial", "Paid"],
"series": [{ "type": "funnel", "label": { "show": true } }]
}
},
{
"id": "cvr-trend",
"type": "chart:line",
"title": "Paid Conversion Rate (trailing 90d)",
"data": { "metricRef": "metric.cvr.paid_90d_series" },
"spec": {
"yAxis": { "type": "value", "axisLabel": { "formatter": "{value}%" } },
"series": [{ "type": "line", "smooth": true }]
}
}
]
} dvt_dashboard_apply_spec Open spec, published schema
The DVT spec format is Apache-2.0 licensed and will ship with a published JSON Schema — enabling validation, editor autocompletion, and AI self-correction without needing to query a running server. The spec travels with your data, not with DVT's infrastructure.
The schema is in active design. The examples above reflect the current working draft — field names and structure may shift before v1.
Follow the build →Follow the build
DVT is in founding research. Leave your email and we'll reach out when there's something to see — no newsletters, no noise.