MCPInstall

data-dashboard

Build a dense, data-heavy screen - an analytics console or a trading terminal - with real charts drawn from tokens: candlestick, volume, depth, stacked area, waterfall, scatter, correlation matrix, donut, gauge, sparklines, heatmaps and order books. Use when the request is a dashboard, terminal, monitoring view, data console, or any screen whose job is to show many numbers at once. Covers the layout sequence, the SVG geometry, the accessibility contract per chart type, and the contrast traps that only appear in dark mode.

Installs
77
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/plugin87/ux-ui-agent-skills --skill data-dashboard
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads data-dashboard automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Skill: Data dashboard

Step 0: is the kit here? This skill reads files from the kit. Check once: ls ${CLAUDE_SKILL_DIR}/../../../tokens >/dev/null 2>&1 && echo KIT_OK || echo KIT_MISSING On KIT_MISSING only the skill folders were installed, which is what npx skills add does. Say so plainly, point the user at npx ux-ui-agent-skills init or the plugin install, and stop. Do not guess the contents of a file you could not open.

A dashboard is the hardest screen to keep honest: it is dense, it is mostly non-text, and almost every default makes it worse. This is the recipe that produced ${CLAUDE_SKILL_DIR}/../../../examples/showcase/ and ${CLAUDE_SKILL_DIR}/../../../examples/terminal/, both of which pass every gate in both themes.

1. Decide the brief before drawing anything

Answer these in one line each, or /grill-me them out of the user:

  • Who reads this, and what decision do they make from it? A revenue console for an operator and a trading desk for a dealer look nothing alike.
  • What is the one number that leads? A dashboard without a lead is a wall.
  • What is the update cadence? Hourly figures get a "last run" line. Live figures get a tape and a timestamp per row.
  • How dense is honest? A terminal earns 12 panels. A weekly report does not.

2. Layout sequence, not a grid of equal cards

Four equal stat cards is the single loudest tell that nobody designed this. Compose in bands, each a different shape:

BandContentWhy
1Hero metric at 3x body size + its own chart, spanning most of the widthThe eye lands once
2Two or three secondary figures, stacked or narrowQuiet by construction
3Three different chart shapes side by side (donut, ranked bars, sparklines)Variety reads as intent
4A table that really sorts, plus a feed or logDetail after summary
5A footer line that ends the pageA page must end on purpose

Use a 12-column grid with explicit spans (span 8 / span 4), collapsing to 6 then 1. Never repeat(auto-fit, …) for the primary bands - it produces exactly the equal-card wall you are avoiding.

3. The chart inventory

All of these are plain inline SVG with viewBox, sized by CSS, filled from --color-chart-*. No chart library, no runtime dependency.

ChartGeometryUse it for
Bar / column<rect> per bucket, rx for a soft cornerDiscrete periods
Candlestick<line> wick + <rect> body per period, class by up/downOHLC price
VolumeBars under the price chart, same x-scale, opacity:.45Conviction behind a move
Moving average<polyline> over the candles, 2px, round joinsTrend through noise
Line / sparkline<polyline>, pathLength="1" for a draw animationTrend in a cell
Area / stacked area<path> per band: forward along the top, reverse along the previous baseline, closeComposition over time
DepthTwo cumulative area paths mirrored around the midBook liquidity
WaterfallFloating <rect> per step + dashed connectors between levelsAttribution
Donut<circle> with stroke-dasharray and rotate() per segmentShare of a whole, 3-5 slices
Radial gaugeSame trick, stroke-linecap:round, 270-degree sweepOne value against a limit
Scatter / bubble<circle>, radius = third dimensionTwo measures plus weight
Correlation matrixHTML table, cell tint via color-mixPairwise relationships
HeatmapHTML table or <rect> grid, tint by valueCohorts, calendars
Order bookHTML table with a depth bar per rowBids and asks

Generate the geometry, do not hand-place it. Write a small deterministic script (a seeded walk) that emits the SVG elements, then paste the output in. Hand-typed coordinates drift and cannot be regenerated.

4. Domain correctness is part of craft

Gates cannot catch a chart that is drawn beautifully and means nothing. Check by hand:

  • A correlation matrix is symmetric and its diagonal is exactly 1. Random values in both triangles is an instant tell to anyone who reads one for a living.
  • A stacked area sums to the total; bands must not cross or leave gaps. The usual bug is reversing the baseline by index instead of by coordinate, which shows as dark wedges between bands.
  • A waterfall needs connectors, and the closing bar must equal opening plus the steps.
  • Depth rises away from the mid on both sides; it never falls.
  • A donut whose segments do not total the whole is a pie chart lying.

5. Accessibility contract, per chart

  • Every SVG gets role="img" plus either aria-label or <title>+<desc> referenced by aria-labelledby. Say what the chart shows, not that it is a chart: "Range 182.06 to 200.10, closing at 187.84" beats "price chart".
  • Never encode meaning in colour alone. Green with a + and an arrow; red with a -. Up and down also carry a word in the table cell.
  • Tables get <caption> (use .sr-only when the panel header already says it), scope="col" / scope="row", and aria-sort only if clicking really sorts.
  • Sortable headers, range tabs and theme toggles all declare state - so they must change it on a real click. verify_interactive.mjs clicks them and checks.

6. The traps that only appear when you measure

Every one of these was found on a screen that looked finished. The first group a gate caught; the ones marked "no gate sees it" were caught by opening the screenshot and looking, which is why that step is not optional:

  • A chart palette is not a text palette. White initials on --color-chart-4 measured 2.65:1 in dark. Chart colours are tuned for large filled shapes.
  • Success green as text on a raised surface measured 4.43:1 - four hundredths short of AA. Put the colour on the icon and the sign; keep the text neutral.
  • axe must not run mid-transition. Disable transitions before flipping the theme, or contrast is sampled while colours are still moving.
  • Dense tables do not fit a phone. Drop the column a phone can lose - the sparkline, the derived value - in a media query, and say so in a comment. Do not shrink type below the scale.
  • Stagger comes from a token: calc(var(--duration-fast) * 0.6 * n), never a typed millisecond.
  • A grid row stretches its items. Two fields side by side where only one has a hint: the hint-less control grows to match the taller column and the two inputs end up different heights. Set align-content: start on the field and an explicit block-size on the control. Measure the heights in the render - the difference is obvious in a screenshot and invisible in the markup.
  • The same stretch hits whole panels, and no gate sees it. A row is as tall as its tallest panel, and the short one packs its content to the top and ends in a bordered void - a heatmap panel with 130px of nothing under the caption, a right column that stops two panels short of the map beside it. Every panel in a row has to say which it is: one child absorbs the slack (grid-template-rows:auto minmax(0,1fr), and that child's own tracks go minmax(<min>,1fr) so its rows grow too), or the rows share it out (align-content:space-between), or the short column earns another panel. Screenshot the row and look at the bottom edge of each panel; this never shows up in the markup.
  • auto-fit silently drops a column, and no gate sees it. Three gauges in a panel about 340px wide with minmax(min(100%,7rem),1fr) resolved to two tracks and orphaned the third beside an empty cell. When the count is fixed and meaningful, write repeat(3,minmax(0,1fr)) and give narrow widths their own rule.
  • A category chart needs its categories on the page, and no gate sees it. A Pareto of five defect types whose names live only in the aria-label is a row of anonymous bars to everyone looking at it. Put the labels under the bars - lay the plot out on an even pitch inside its viewBox so a matching grid of labels lines up without a second coordinate system.
  • An .sr-only needs a positioned ancestor. Inside a scroller it otherwise resolves against the initial containing block, lands outside the viewport, and inflates the document's scroll width by hundreds of pixels.
  • A zero-area element that only has area while it animates reads as content lost under prefers-reduced-motion. Give a radar sweep a wedge, not a 1px line.
  • Never reuse a class name across layout and colour. .c4 as both a four-column span and the fourth chart colour painted an entire panel pink.

7. The loop

node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs measure_render.mjs <file> && node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs measure_render.mjs --dark <file>
node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs verify_states.mjs <file>  && node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs axe_audit.mjs --dark <file>
node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs verify_responsive.mjs <file> --scale=1.25
node ${CLAUDE_SKILL_DIR}/../../../scripts/gate.mjs verify_interactive.mjs <file>
DS_REQUIRE_BROWSER=1 node ${CLAUDE_SKILL_DIR}/../../../scripts/slop_tells.mjs --strict <file> && DS_REQUIRE_BROWSER=1 node ${CLAUDE_SKILL_DIR}/../../../scripts/taste_audit.mjs --strict <file>

Then screenshot it and look, in both themes, at 1600 and 390 wide. The gates will pass a chart that is drawn wrong. A correlation matrix that is not symmetric is 16/16 green and still embarrassing.

Worked references, both gate-verified: ${CLAUDE_SKILL_DIR}/../../../examples/showcase/index.html (revenue console) and ${CLAUDE_SKILL_DIR}/../../../examples/terminal/index.html (trading desk, ten chart types).

FAQ

What does the data-dashboard skill do?

Build a dense, data-heavy screen - an analytics console or a trading terminal - with real charts drawn from tokens: candlestick, volume, depth, stacked area, waterfall, scatter, correlation matrix, donut, gauge, sparklines, heatmaps and order books. Use when the request is a dashboard, terminal, monitoring view, data console, or any screen whose job is to show many numbers at once. Covers the layout sequence, the SVG geometry, the accessibility contract per chart type, and the contrast traps that only appear in dark mode.

How do I install data-dashboard?

Run npx skills add https://github.com/plugin87/ux-ui-agent-skills --skill data-dashboard in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/data-dashboard/ (personal) or .claude/skills/data-dashboard/ (project).

Which AI agents can use data-dashboard?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is data-dashboard safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains data-dashboard?

It is published by plugin87 in plugin87/ux-ui-agent-skills. It has 77 recorded installs.

More from plugin87/ux-ui-agent-skills

View all →

image-to-code

plugin87/ux-ui-agent-skills

Turn a reference image, screenshot, or mockup into token-driven, accessible code. Infer the design system from the reference (palette, type scale, spacing, radius, layout archetype), map it to the 3-tier tokens, rebuild it, then verify with the kit's gates. Use when the user provides a design/screenshot and wants matching UI code.

Media & Creative725 installs

design-review

plugin87/ux-ui-agent-skills

Review or audit a design/UI across 6 weighted dimensions with Nielsen's 10 heuristics and a prioritized findings table. Use when the user wants a design critique, quality score, heuristic evaluation, or audit of an existing screen, page, or product before/after build.

a11y-audit

plugin87/ux-ui-agent-skills

Audit a UI or design against WCAG 2.2 AA/AAA and ARIA patterns, returning criterion-referenced findings with severity and specific fixes. Use when the user wants an accessibility check, contrast verification, keyboard/screen-reader review, or wants to confirm a component meets POUR.

Frontend & Design557 installs

design-tokens

plugin87/ux-ui-agent-skills

Generate, extend, or audit design tokens in DTCG format with the 3-tier architecture (primitive → semantic → component). Use when the user wants a color palette, type scale, spacing/shadow/radius/motion tokens, multi-brand theming, or wants to validate token files. Covers colors, typography, spacing, shadows, borders, breakpoints, motion, gradients, opacity, blur, sizing, states, theming.

Frontend & Design546 installs

redesign

plugin87/ux-ui-agent-skills

Upgrade an existing website or app to premium quality without breaking functionality. Audit the current design, identify generic/AI tells, then apply taste and system rules surgically. Use when the user wants to improve, modernize, polish, or "make better" an existing UI/codebase.

Frontend & Design542 installs

apply-aesthetic

plugin87/ux-ui-agent-skills

Apply a visual direction, an archetype (high-end agency, editorial minimal, brutalist, soft-SaaS, dark-tech) or one of 2,144 named design systems (apple, linear-app, stripe, vercel, notion, material, shadcn, spotify, tesla…), by resolving it into the token system. Use when the user wants a specific look/vibe/brand feel, or asks to make a design feel premium/expensive/non-generic.

Frontend & Design539 installs

Popular data & databases skills

View category →

Postgres best practices maintained by Supabase, for Postgres running anywhere. Load this skill BEFORE writing or changing anything that lives in a Postgres database: creating or altering tables and columns (including choosing column types), schema design, migrations and declarative schema files, RLS policies and the tests that verify them, indexes, triggers, database functions, queues and scheduled jobs (pgcron, pgmq), vector/semantic search (pgvector), and restoring dumps (pgrestore) or importing data. Also load it when diagnosing slow queries, high CPU, timeouts, EXPLAIN plans, connection exhaustion, locking, bloat, or rows visible to the wrong user or tenant. This is not just a performance guide — schema, migration, security, and SQL authoring tasks need these rules too, even for a one-column change or a single query.

OfficialData & Databases462.2K installs

prisma-client-api

prisma/skills

Prisma Client API reference covering model queries, filters, operators, and client methods. Use when writing database queries, using CRUD operations, filtering data, or configuring Prisma Client. Triggers on "prisma query", "findMany", "create", "update", "delete", "$transaction".

OfficialData & Databases393.5K installs

Deprecated compatibility name for prisma-orm-setup. Use only when a user or existing integration explicitly invokes prisma-database-setup; otherwise select prisma-orm-setup.

OfficialData & Databases392.3K installs

prisma-cli

prisma/skills

Prisma ORM 7 CLI reference for existing Prisma 7 applications or explicitly selected Prisma 7 workflows. Covers prisma init, generate, migrate, db, dev, studio, and mcp. For setup, connection repair, or Prisma 8, use prisma-orm-setup; not the Prisma Platform CLI.

OfficialData & Databases390.8K installs

prisma-postgres

prisma/skills

Deprecated compatibility name for prisma-postgres-setup. Use only when a user or existing integration explicitly invokes prisma-postgres; otherwise select prisma-postgres-setup.

OfficialData & Databases384.4K installs

Required reference for Prisma ORM 7 SQL driver adapter work. Use when implementing or modifying adapters, adding database drivers, or touching SqlDriverAdapter, Transaction, savepoint, result mapping, or DriverAdapterError behavior. Covers current transaction lifecycle, optional savepoint hooks, original database-error preservation, and verification.

OfficialData & Databases378.9K installs