Agent Skillswinstonkoh87/Athena-Public › dashboard-builder

dashboard-builder

GitHub

构建自包含的交互式HTML仪表盘,集成图表、筛选器和表格。无需服务器或依赖,生成单文件即可在浏览器打开,适用于KPI概览、监控快照及客户交付,支持离线运行与数据嵌入。

examples/skills/coding/dashboard-builder/SKILL.md winstonkoh87/Athena-Public

Trigger Scenarios

需要创建包含KPI卡片和图表的交互式数据报告 将查询结果转换为可分享的独立HTML文件 构建无需部署的监控快照或仪表板

Install

npx skills add winstonkoh87/Athena-Public --skill dashboard-builder -g -y
More Options

Non-standard path

npx skills add https://github.com/winstonkoh87/Athena-Public/tree/main/examples/skills/coding/dashboard-builder -g -y

Use without installing

npx skills use winstonkoh87/Athena-Public@dashboard-builder

指定 Agent (Claude Code)

npx skills add winstonkoh87/Athena-Public --skill dashboard-builder -a claude-code -g -y

安装 repo 全部 skill

npx skills add winstonkoh87/Athena-Public --all -g -y

预览 repo 内 skill

npx skills add winstonkoh87/Athena-Public --list

SKILL.md

Frontmatter
{
    "name": "dashboard-builder",
    "vibe": "Data without visualization is just noise.",
    "model": "default",
    "source": "anthropics\/knowledge-work-plugins — data\/skills\/build-dashboard (2026-05-24)",
    "auto-invoke": false,
    "description": "Build self-contained interactive HTML dashboards with charts, filters, and tables. Generates a single browser-openable file — no server or dependencies required.",
    "stolen_date": "2026-05-24",
    "argument_hint": "<description> [data source]",
    "context_trigger": "dashboard, visualization, KPI, chart, analytics view, build dashboard, data dashboard, monitoring, metrics view"
}

Dashboard Builder — Interactive HTML Dashboards

Stolen from: Anthropic Data Plugin — build-dashboard (2026-05-24) Adaptation: Stripped enterprise connectors, added Athena-specific data patterns.

When to Use

  • Creating executive overview with KPI cards
  • Turning query results into a shareable self-contained report
  • Building a monitoring snapshot
  • Needing multiple charts with filters in one browser-openable file
  • Client deliverables requiring interactive data presentation

Workflow

1. Understand Requirements

Determine:

  • Purpose: Executive overview, operational monitoring, deep-dive analysis, team reporting
  • Audience: Who will use this dashboard?
  • Key metrics: What numbers matter most?
  • Dimensions: What should users be able to filter or slice by?
  • Data source: Live query, pasted data, CSV file, or sample data

2. Gather Data

If data is available → Parse, clean, embed as JSON in the HTML file. If working from description → Create realistic sample dataset. Note it uses sample data. Provide swap instructions.

3. Design Layout

Follow standard dashboard layout:

┌──────────────────────────────────────────────────┐
│  Dashboard Title                    [Filters ▼]  │
├────────────┬────────────┬────────────┬───────────┤
│  KPI Card  │  KPI Card  │  KPI Card  │ KPI Card  │
├────────────┴────────────┼────────────┴───────────┤
│                         │                        │
│    Primary Chart        │   Secondary Chart      │
│    (largest area)       │                        │
│                         │                        │
├─────────────────────────┴────────────────────────┤
│                                                  │
│    Detail Table (sortable, scrollable)           │
│                                                  │
└──────────────────────────────────────────────────┘

Adapt to content:

  • 2-4 KPI cards at top for headline numbers
  • 1-3 charts in middle for trends and breakdowns
  • Optional detail table at bottom for drill-down
  • Filters in header or sidebar depending on complexity

4. Build HTML Dashboard

Single self-contained HTML file:

Structure: Semantic HTML5, responsive grid (CSS Grid/Flexbox), filter controls, KPI cards, chart containers, sortable data table.

Styling: Professional dark/light scheme, card-based layout with subtle shadows, consistent typography (system fonts), responsive, print-friendly.

Interactivity: Chart.js for charts, filter dropdowns updating all views simultaneously, sortable columns, hover tooltips, number formatting.

Data: All data embedded as JavaScript variables. No external fetches. Works completely offline.

5. Chart Types

Chart Use For
Line Time series trends
Bar Category comparisons
Doughnut Composition (<6 categories)
Stacked bar Composition over time
Mixed (bar + line) Volume with rate overlay

6. Base Template

<!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/chart.js@4.5.1" integrity="sha384-jb8JQMbMoBUzgWatfe6COACi2ljcDdZQ2OxczGA3bGNeWe+6DChMTBJemed7ZnvJ" crossorigin="anonymous"></script>
    <style>
        /* --- Design System --- */
        :root {
            --bg: #0f1117; --surface: #1a1d2e; --border: #2a2d3e;
            --text: #e4e4e7; --text-muted: #71717a;
            --accent: #6366f1; --accent-hover: #818cf8;
            --success: #22c55e; --warning: #eab308; --danger: #ef4444;
            --radius: 12px; --shadow: 0 4px 24px rgba(0,0,0,.3);
        }
        * { margin:0; padding:0; box-sizing:border-box; }
        body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
               background: var(--bg); color: var(--text); line-height: 1.5; }
        .dashboard { max-width: 1400px; margin: 0 auto; padding: 24px; }
        .kpi-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; margin-bottom: 24px; }
        .kpi-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; }
        .kpi-label { font-size: 0.875rem; color: var(--text-muted); margin-bottom: 4px; }
        .kpi-value { font-size: 2rem; font-weight: 700; }
        .kpi-change { font-size: 0.875rem; margin-top: 4px; }
        .kpi-change.positive { color: var(--success); }
        .kpi-change.negative { color: var(--danger); }
        .chart-row { display: grid; grid-template-columns: 2fr 1fr; gap: 16px; margin-bottom: 24px; }
        .chart-card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; }
        .chart-card h3 { font-size: 1rem; margin-bottom: 12px; color: var(--text-muted); }
        table { width: 100%; border-collapse: collapse; }
        th, td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--border); }
        th { color: var(--text-muted); font-size: 0.8rem; text-transform: uppercase; cursor: pointer; }
        th:hover { color: var(--accent); }
        .filters { display: flex; gap: 12px; align-items: center; }
        select { background: var(--surface); color: var(--text); border: 1px solid var(--border);
                 border-radius: 8px; padding: 8px 12px; font-size: 0.875rem; }
        footer { text-align: center; color: var(--text-muted); font-size: 0.8rem; margin-top: 32px; }
        @media (max-width: 768px) { .chart-row { grid-template-columns: 1fr; } }
    </style>
</head>
<body>
    <div class="dashboard">
        <header style="display:flex; justify-content:space-between; align-items:center; margin-bottom:24px;">
            <h1>Dashboard Title</h1>
            <div class="filters"><!-- Filter controls --></div>
        </header>
        <section class="kpi-row"><!-- KPI cards --></section>
        <section class="chart-row"><!-- Chart containers --></section>
        <section class="chart-card"><!-- Data table --></section>
        <footer>Data as of: <span id="data-date"></span></footer>
    </div>
    <script>
        const DATA = []; // Embedded data
        class Dashboard {
            constructor(data) { this.rawData = data; this.filteredData = data; this.charts = {}; this.init(); }
            init() { this.setupFilters(); this.renderKPIs(); this.renderCharts(); this.renderTable(); }
            applyFilters() { /* Filter + re-render all views */ }
            setupFilters() {}
            renderKPIs() {}
            renderCharts() {}
            updateCharts() {}
            renderTable() {}
        }
        const dashboard = new Dashboard(DATA);
    </script>
</body>
</html>

7. Save and Open

  1. Save as descriptive name (e.g., sales_dashboard.html)
  2. Open in user's default browser
  3. Confirm it renders correctly
  4. Provide instructions for updating data or customizing

References

Version History

  • e624e2d Current 2026-07-19 08:46

Same Skill Collection

examples/protocols/diagnostics/DIA-SKILL.md
examples/skills/business/brand-foundations/SKILL.md
examples/skills/business/client-pricing/SKILL.md
examples/skills/business/distribution-physics/SKILL.md
examples/skills/business/marketing-swarm/SKILL.md
examples/skills/business/seo-auditor/SKILL.md
examples/skills/business/sovereign-economics-engine/SKILL.md
examples/skills/coding/agentic-code-orchestrator/SKILL.md
examples/skills/coding/atomic-execution/SKILL.md
examples/skills/coding/diagnostic-refactor/SKILL.md
examples/skills/coding/git-worktree-swarm/SKILL.md
examples/skills/coding/micro-commit/SKILL.md
examples/skills/coding/spec-driven-dev/SKILL.md
examples/skills/coding/visual-verify-ui/SKILL.md
examples/skills/decision/bionic-decision-engine/SKILL.md
examples/skills/decision/decision-journal/SKILL.md
examples/skills/decision/mcda-solver/SKILL.md
examples/skills/decision/trading-risk-gate/SKILL.md
examples/skills/decision/zenith-execution/SKILL.md
examples/skills/quality/bionic-safety-net/SKILL.md
examples/skills/quality/circuit-breaker/SKILL.md
examples/skills/quality/consiglieri-protocol/SKILL.md
examples/skills/quality/power-inversion/SKILL.md
examples/skills/quality/red-team-review/SKILL.md
examples/skills/quality/web-launch-gate/SKILL.md
examples/skills/research/data-analysis/SKILL.md
examples/skills/research/deep-research-loop/SKILL.md
examples/skills/research/semantic-search/SKILL.md
examples/skills/research/statistical-analysis/SKILL.md
examples/skills/research/synthetic-parallel-reasoning/SKILL.md
examples/skills/social-physics-filter/SKILL.md
examples/skills/structural-trading-gate/SKILL.md
examples/skills/therapeutic-ifs/SKILL.md
examples/skills/workflow/academic-delivery/SKILL.md
examples/skills/workflow/context-compactor/SKILL.md
examples/skills/workflow/daemon-loop/SKILL.md
examples/skills/workflow/skill-compiler/SKILL.md
examples/skills/workflow/trade-journal-analyzer/SKILL.md

Metadata

Files
0
Version
e624e2d
Hash
7d94a1f2
Indexed
2026-07-19 08:46

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-20 13:43
浙ICP备14020137号-1 $Carte des visiteurs$