Dashboard design
Skill fabioc-aloha/Alex_Skill_Mall/plugins/data-analytics/dashboard-design
Dashboard layout patterns, KPI card design, filter architecture, narrative flow through panels, and self-contained HTML generationFrom its SKILL.md
npx -y skills add fabioc-aloha/Alex_Skill_Mall --skill dashboard-designAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.4 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it
Dashboard Design
| Property | Value |
|---|---|
| Domain | Data Analytics |
| Category | Dashboard Architecture & Layout |
| Components | SKILL.md + dashboard-design.instructions.md + dashboard.prompt.md |
| Depends | data-visualization (chart content), data-analysis (KPIs and segments) |
Staleness Watch: See EXTERNAL-API-REGISTRY.md for source URLs and recheck cadence
Overview
Design dashboards that tell stories through layout. A dashboard is not a collection of charts -- it's a guided reading experience where position, size, and interaction design control what the viewer understands and in what order.
The cardinal rule: reading order = story order. KPIs answer "what?", charts answer "why?", tables answer "how much?", and drill-downs answer "show me more."
Module 1: Layout Patterns
| Pattern | Best For | Reading Flow | Use When |
|---|---|---|---|
| Inverted Pyramid | Executive dashboards | KPIs → hero chart → supporting → detail | Audience scans from top, drills as needed |
| Z-Pattern | Marketing / consumer | Top-left → top-right → bottom-left → end | Two primary metrics side-by-side |
| F-Pattern | Data-heavy analytics | Left column scanned top-down, right detail | Dense detail dashboards for analysts |
| Hub-and-Spoke | Exploration dashboards | Central question, surrounding perspectives | When multiple equally important views exist |
| Narrative Scroll | Data stories / reports | Top-to-bottom linear reading | Self-contained HTML stories with guided arc |
Reference Pattern: Inverted Pyramid (from population.html)
┌────────────────────────────────────────────────────┐
│ HEADER: Title + subtitle + badge │
├────────────────────────────────────────────────────┤
│ KPI ROW: 3-6 cards (auto-fit grid) │
├────────────────────────────────────────────────────┤
│ CONTROLS: Search + filter buttons │
├────────────────────────────────────────────────────┤
│ HERO CHART: Full-width, clickable │
├───────────────────────┬────────────────────────────┤
│ SUPPORTING CHART 1 │ SUPPORTING CHART 2 │
├───────────────────────┴────────────────────────────┤
│ DATA TABLE: Sortable, ranked, inline indicators │
├────────────────────────────────────────────────────┤
│ FOOTER: Data source + attribution + last updated │
└────────────────────────────────────────────────────┘
┌── DRILL-DOWN MODAL ──┐
│ Detail stats grid │
│ Horizontal bar │
│ Detail table │
└───────────────────────┘
Module 2: KPI Card Design
Each KPI card follows the metric + delta + context pattern:
| Element | Purpose | Example |
|---|---|---|
| Primary value | The headline number | "334M" |
| Label | What it measures | "Total Population" |
| Delta | Change indicator (arrow + %) | "↑ 2.1% YoY" |
| Sparkline | Trend miniature (optional) | Tiny 30-day line |
| Subtitle | Time range or source | "2024 Census estimate" |
| Icon/Emoji | Visual anchor | "👥" |
| Accent color | Category signal | Brand purple |
KPI Selection Rules
| Rule | Why |
|---|---|
| 3-6 KPIs maximum | More overwhelms; fewer under-informs |
| Each answers a different "what?" | Redundant KPIs waste prime real estate |
| Include at least one delta | Static numbers lack context |
| Lead with the most important | Top-left KPI gets the most attention |
| Color thresholds if applicable | Green/amber/red for status-driven metrics |
Module 3: Filter Architecture
| Filter Type | Placement | Behavior | Example |
|---|---|---|---|
| Global filter | Top, below KPIs | Affects all charts and table | Region buttons, date range |
| Chart filter | Inline on chart | Affects only parent chart | Sort toggle, limit slider |
| Cross-filter | Click on chart | Highlights related data elsewhere | Click bar → table highlights |
| Drill-through | Click on item | Opens detail modal or new view | Click state → city breakdown |
| Search | Top controls | Text filter across primary column | Search box for state names |
Filter Design Rules
- Global filters visible at all times (sticky if page scrolls)
- Active filter state clearly indicated (colored buttons, badges)
- "All" or "Reset" always available as first option
- Filter changes animate smoothly (transition: 300ms)
- Filter state reflected in chart titles or subtitles
Module 4: Narrative Flow
The dashboard tells a story through panel arrangement:
| Layer | Component | Answers | Time to Absorb |
|---|---|---|---|
| 1 | KPI cards | "What's the story?" | 2 seconds |
| 2 | Hero chart | "Show me the shape" | 10 seconds |
| 3 | Supporting charts | "What else?" | 15 seconds |
| 4 | Data table | "Give me the details" | As needed |
| 5 | Drill-down modal | "Tell me more about X" | On demand |
Progressive Disclosure
- Above the fold: KPIs + hero chart (must convey the main story without scrolling)
- Below the fold: Supporting views + table (deeper evidence)
- On demand: Drill-down modals, tooltips, expandable rows
Module 5: Self-Contained HTML Pattern
Every dashboard outputs as a single HTML file:
| Requirement | Implementation |
|---|---|
| Zero build step | Open in browser, no npm/webpack/build |
| Embedded data | JavaScript arrays/objects, not external API calls |
| Single CDN dependency | Chart.js 4.x via jsdelivr |
| Responsive | CSS grid with auto-fit, minmax, media queries |
| Themeable | CSS custom properties for colors, spacing, fonts |
| Accessible | Semantic HTML, ARIA labels, alt text on charts |
| Print-friendly | @media print styles for clean output |
CSS Custom Properties Template
:root {
--bg-primary: #0f0f23;
--bg-card: #1a1a2e;
--text-primary: #e8e8f0;
--text-secondary: #888;
--accent-1: #6366f1;
--accent-2: #3b82f6;
--accent-3: #10b981;
--accent-4: #f59e0b;
--accent-5: #ec4899;
--border-radius: 12px;
--shadow: 0 2px 8px rgba(0,0,0,0.3);
--transition: 0.3s ease;
}
Module 6: Platform Targets
| Platform | Output Format | Key Differences |
|---|---|---|
| HTML (primary) | Self-contained | Chart.js + Canvas, embedded data |
| Power BI | Report spec | DAX measures, M queries, visual config |
| Streamlit | Python app | Plotly charts, st.columns, st.metric |
| React | Component tree | Recharts/Nivo, state management, props |
Default to HTML unless the user specifies otherwise.
Module 7: Chart Grid Pattern (from visuals.html)
For dashboards that showcase multiple chart types or let users explore:
| Component | Purpose | Implementation |
|---|---|---|
| Category filter | Show charts by category | Button row with colored states |
| Card grid | Visual index of available charts | CSS grid, auto-fit, minmax(280px) |
| Mini preview | Quick visual (130px height canvas) | Chart.js render at small scale |
| Metadata badges | "Best for", "Data type" | Tags below chart preview |
| Modal detail | Full chart + metadata + examples | Fixed overlay, arrow key nav |
Module 8: Interaction Patterns
| Pattern | Trigger | Effect |
|---|---|---|
| Hover tooltip | Mouse over bar | Show exact value + label |
| Click drill-down | Click chart item | Open modal with detail view |
| Filter select | Click button | Filter all charts to selection |
| Sort toggle | Click column head | Re-sort table ascending/descending |
| Search highlight | Type in search | Fade non-matching, highlight match |
| Responsive collapse | Screen < 768px | Stack columns, hide secondary charts |
Module 9: 5-Visual Rule (VT BIT 5424)
Executive dashboards follow the 5-Visual Rule:
- 1 KPI row (3-6 metric cards)
- 1 hero chart (the main story)
- 2 supporting charts (different lenses on same data)
- 1 data table (detail on demand)
Maximum 5 visual elements above the fold. More than 5 creates cognitive overload for executive audiences. Analysts get more through drill-down, not more panels.
Anti-Patterns
| Anti-Pattern | Problem | Fix |
|---|---|---|
| Chart soup | Too many charts with no narrative connection | Apply 5-Visual Rule, add story arc |
| Dashboard as database | Every field shown "just in case" | Show only what answers the KPI questions |
| Inconsistent colors | Same category = different color across charts | Use semantic color map (region → color) |
| No drill-down escape | Modal/detail has no clear close/back | Always show close button + ESC handler |
| Tiny charts | Cramming 10 charts into one screen | Fewer, larger charts with drill paths |
| Static title | "Revenue Dashboard" | "Revenue grew 34% -- but growth is slowing" |