data/skills/build-dashboard/SKILL.md
Build an interactive HTML dashboard with charts, filters, and tables
npx skillsauth add grailautomation/claude-plugins build-dashboardInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
If you see unfamiliar placeholders or need to check which tools are connected, see CONNECTORS.md.
Build a self-contained interactive HTML dashboard with charts, filters, tables, and professional styling. Opens directly in a browser -- no server or dependencies required.
/data:build-dashboard <description of dashboard> [data source]
Determine:
If data warehouse is connected:
If data is pasted or uploaded:
If working from a description without data:
Follow a standard dashboard layout pattern:
┌──────────────────────────────────────────────────┐
│ Dashboard Title [Filters ▼] │
├────────────┬────────────┬────────────┬───────────┤
│ KPI Card │ KPI Card │ KPI Card │ KPI Card │
├────────────┴────────────┼────────────┴───────────┤
│ │ │
│ Primary Chart │ Secondary Chart │
│ (largest area) │ │
│ │ │
├─────────────────────────┴────────────────────────┤
│ │
│ Detail Table (sortable, scrollable) │
│ │
└──────────────────────────────────────────────────┘
Adapt the layout to the content:
Generate a single self-contained HTML file that includes:
Structure (HTML):
Styling (CSS):
Interactivity (JavaScript):
Data (embedded JSON):
Use Chart.js for all charts. Common dashboard chart patterns:
Filters:
// All filters update a central filter state
// Charts and tables re-render when filters change
function applyFilters() {
const filtered = data.filter(row => matchesFilters(row));
updateKPIs(filtered);
updateCharts(filtered);
updateTable(filtered);
}
Table sorting:
Tooltips:
sales_dashboard.html)The generated HTML file follows this structure:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>[Dashboard Title]</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]" integrity="sha384-jb8JQMbMoBUzgWatfe6COACi2ljcDdZQ2OxczGA3bGNeWe+6DChMTBJemed7ZnvJ" crossorigin="anonymous"></script>
<style>
/* Professional dashboard CSS */
</style>
</head>
<body>
<div class="dashboard">
<header><!-- Title and filters --></header>
<section class="kpis"><!-- KPI cards --></section>
<section class="charts"><!-- Chart containers --></section>
<section class="details"><!-- Data table --></section>
</div>
<script>
const DATA = [/* embedded JSON data */];
// Dashboard initialization and interactivity
</script>
</body>
</html>
/data:build-dashboard Monthly sales dashboard with revenue trend, top products, and regional breakdown. Data is in the orders table.
/data:build-dashboard Here's our support ticket data [pastes CSV]. Build a dashboard showing volume by priority, response time trends, and resolution rates.
/data:build-dashboard Create a template executive dashboard for a SaaS company showing MRR, churn, new customers, and NPS. Use sample data.
development
Parse and analyze Workato recipe JSON exports. Use when the user asks about a Workato recipe's logic, data flow, field mappings, error handling, or control flow. Also use when the user references a .recipe.json file or asks to debug a Workato integration.
databases
Review implementation plans as a staff software engineer. Use when the user asks for staff engineer feedback, senior engineering review, plan review, architecture review, implementation-plan critique, approval before proceeding, risk review, or feedback on a proposed technical plan.
tools
Use when the user invokes $spec-kit:tasks or /spec-kit:tasks, or asks to generate dependency-ordered tasks from the plan and repo context.
testing
Use when the user invokes $spec-kit:specify or /spec-kit:specify, or asks to create a brownfield-aware feature specification from a natural language description.