Dashboard Design

SkillMonitoring & ops

Visual design and layout for Grafana dashboards — panel hierarchy, type selection, color/threshold design, and iterative screenshot-based refinement.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Dashboard Design skill

What this skill tells your AI

The instructions your AI receives, as published by ionfury/homelab in .claude/skills/dashboard-design/SKILL.md and read by ahel’s review.

Design judgment for Grafana dashboards — what to build and how it should look. For authoring mechanics (MCP workflow, JSON templates, ConfigMap), see the grafana-dashboards skill. For alert and ServiceMonitor authoring, see monitoring-authoring.


Design Workflow

Define purpose → Layout hierarchy → Select panel types → Apply color/thresholds
     → Push via MCP → Screenshot review → Iterate → Hand off to grafana-dashboards

Step 1: Define Dashboard Purpose

One dashboard = one question it answers. Examples:

  • "Is the platform healthy right now?" → Platform Home
  • "Why is latency elevated?" → Service-level signals
  • "How full is storage?" → Storage capacity

If you can't state the question in one sentence, split into multiple dashboards.


Step 2: Layout Hierarchy

Structure rows top-to-bottom by audience urgency (Z-pattern reading flow):

Row PositionContentPanel Type
Hero (top)Availability, error rate, SLO statusStat (w:6, 3-4 panels)
SupportingLatency/throughput trends, saturationTimeseries (w:12 or w:24)
DetailPer-resource breakdown, logs correlationTable, Bar Gauge
Debug (bottom)Raw counters, cardinality, internal statsCollapsed rows

Grid widths (24-column grid):

  • 4 stats per row: w:6 at x: 0, 6, 12, 18
  • 3 panels per row: w:8 at x: 0, 8, 16
  • 6 compact stats: w:4 at x: 0, 4, 8, 12, 16, 20
  • Full-width: w:24

Step 3: Panel Type Selection

Data PatternUseWhy
Single current valueStatInstant read + threshold color
Trend over timeTimeseriesShows rate/pattern changes
% of bounded rangeGaugeCircular fill = intuitive utilization
Multiple resourcesTableScannable multi-row comparison
Categorical compareBar GaugeSide-by-side without time axis
Binary state (0/1)Stat + value mappingMaps 0→"DOWN"/red, 1→"UP"/green

Stat panels dominate this codebase (54 stat : 42 timeseries : 18 gauge). Default to stat for KPIs, timeseries for anything with meaningful time shape.


Step 4: Color & Threshold Design

Two threshold modes — pick based on which direction is bad:

More-is-worse (errors, utilization, latency):

"steps": [
  { "color": "green", "value": null },
  { "color": "yellow", "value": 70 },
  { "color": "red", "value": 90 }
]

Less-is-worse (availability %, SLO compliance):

"steps": [
  { "color": "red", "value": null },
  { "color": "yellow", "value": 50 },
  { "color": "green", "value": 90 }
]

Binary (on/off, present/absent):

"mappings": [{ "type": "value", "options": {
  "0": { "text": "DOWN", "color": "red" },
  "1": { "text": "UP", "color": "green" }
}}]

Domain thresholds from this codebase:

SignalYellowRed
DB connections %6080
Storage/PVC %7095
CPU/GPU temp (°C)7585
Backup age (s)86400172800

Step 5: Visual Review Loop

Use MCP get_panel_image for quick panel review during authoring:

MCP: get_panel_image  dashboardUid: "uid"  panelId: 1  width: 800  height: 400

Use Playwright for full-dashboard layout review (spacing, row flow, color consistency):

1. kubectl port-forward svc/grafana 3000:80 -n monitoring
2. Navigate to http://localhost:3000/d/<uid>
3. browser_take_screenshot → inspect layout, color, readability
4. Fix issues, push via MCP update_dashboard, re-screenshot

Check for: crowded rows, inconsistent threshold colors, missing panel titles, axes without units, buried golden signals.


Anti-Patterns

MistakeImpactFix
Golden signals buried below foldMissed during incidentsMove availability/error rate to hero row
All panels same size/weightNo hierarchy, eye wandersHero stats larger; detail rows compact
>6 panels per rowUnreadable on standard displaysMax 4 normal stats, 6 compact
Missing threshold stepsNo visual status signalEvery stat and gauge needs thresholds
Decorative panels (icons, banners)Noise, no decision valueRemove anything that doesn't drive action
One dashboard for everythingCognitive overloadSplit by audience/question
Static thresholds for traffic-sensitive metricsAlert fatigueNote context in panel description

Keywords

visual design, dashboard layout, panel hierarchy, information architecture, panel type selection, color semantics, thresholds, Z-pattern, golden signals, SLO, screenshot review, iterative design, Playwright, visual feedback, information density, stat panel, timeseries, gauge, table, bar gauge, value mapping, color conventions, grid layout

Signals

GitHub stars
25
Forks
3
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
dashboard-design
Source
github.com/ionfury/homelab