Help us improve
Share bugs, ideas, or general feedback.
From ux
Generates a data-dense dashboard with bento grids, monospace tabular metrics, sparkline patterns, and semantic state colors. Runs a discovery protocol to capture data shape, audience, and stack before producing the layout.
npx claudepluginhub laith0003/ux-skill --plugin uxHow this command is triggered — by the user, by Claude, or both
Slash command
/ux:ux-dashboardThis command is limited to the following tools:
The summary Claude sees in its command listing — used to decide when to auto-load this command
# /ux-dashboard You are running the `/ux-dashboard` command from the `ux` plugin. The job is to produce a dashboard that respects data density and operator attention — not a marketing site with charts pasted on. Anti-card-overuse, monospace tabular numbers, semantic state colors, sparing motion. ## When to use Triggers: "build a dashboard", "design the admin panel", "make a metrics page", "operator console", "analytics view", "KPI board", "monitoring screen". If the user wants a marketing landing page with stats, route to `/ux-design` instead. ## Process ### 0. Discovery protocol (MAND...
/dashboard-layoutGenerates production-ready HTML/CSS dashboards with sidebar navigation, KPI cards, chart areas, data tables, and filters. Supports analytics, operational, executive, admin, and monitoring layouts with dark mode.
/panel-dashboardsGenerates interactive dashboard and web app code using Panel and Param from a natural language description. Includes Parameterized classes, widgets, callbacks, responsive layout, and run instructions.
/dashboardGenerates JSON configuration for a monitoring dashboard visualizing project metrics: build health, code velocity, quality, performance, and dependencies.
/metrics-dashboard-designerGenerates metrics dashboard HTML with North Star Metric, AARRR framework, 5 role-specific dashboards, alerts, data infrastructure plan, and 90-day roadmap.
/initInitializes guided UI design for dashboards, apps, and tools. Assesses intent, proposes styles with rationale, builds components, and offers to save patterns.
Share bugs, ideas, or general feedback.
You are running the /ux-dashboard command from the ux plugin. The job is to produce a dashboard that respects data density and operator attention — not a marketing site with charts pasted on. Anti-card-overuse, monospace tabular numbers, semantic state colors, sparing motion.
Triggers: "build a dashboard", "design the admin panel", "make a metrics page", "operator console", "analytics view", "KPI board", "monitoring screen". If the user wants a marketing landing page with stats, route to /ux-design instead.
Before anything else, read references/process/discovery-protocol.md and run its intake. For dashboards, highest-leverage fields: brand identity, references (admired dashboards), audience (operator / analyst / exec — different density needs), key metrics + data shape, style direction, voice for state messages, stack, must-have widgets (intelligent-list / command-input / live-status / wide-stream / contextual-focus), avoid-list, and the wow moment. Group into 2–3 messages. Push back on "anything's fine".
Required:
If anything's missing, ask once: "One line — data shape, key metrics, audience (operator/analyst/exec), stack?"
Read before dispatching:
references/styles/anti-slop.md — the ban listreferences/styles/arsenal.md — pick dashboard-relevant patternsDashboard-relevant arsenal patterns (pick 3-5):
Call frontend-engineer via Task. Pass:
references/styles/anti-slop.mdDispatch motion-engineer in parallel for live indicators and state transitions. Dispatch copy-writer in parallel for empty states, error messages, and metric labels.
─── dashboard brief ───
Data shape: <summary>
Metrics: <3-7 key metrics>
Audience: <operator | analyst | exec>
Stack: <stack>
Dials: DESIGN_VARIANCE=<n>, MOTION_INTENSITY=<n>, VISUAL_DENSITY=<n>
Patterns: <3-5 arsenal patterns>
─── generated ───
<code from sub-agent — verbatim>
─── layout logic ───
Grouping: <how widgets are grouped — by border-t / divide-y / negative space>
KPI row: <pattern used — hairline-separated / asymmetric bento / focus widget>
Live count: <number of breathing/live indicators in initial viewport — must be ≤2>
─── self-review ───
Bans avoided: <list>
Patterns used: <list>
Accessibility: <color-not-only confirmed for all chart series>
─── next ───
Recommended: /ux-component (build a missing widget)
Other moves: /ux-polish (cosmetic pass)
/ux-a11y (color-not-only audit for charts)
/ux-motion (verify live indicators don't fight attention)
/ux-next (let me decide)
Write to .ux/last-dashboard.json:
{
"command": "ux-dashboard",
"timestamp": "<ISO8601>",
"data_shape": "<summary>",
"metrics": ["<key metrics>"],
"audience": "<operator|analyst|exec>",
"stack": "<stack>",
"dials": { "variance": <n>, "motion": <n>, "density": <n> },
"patterns": ["<arsenal patterns>"],
"live_indicator_count": <n>,
"output_file": "<path if saved>"
}
font-mono with tabular figures (font-variant-numeric: tabular-nums). Non-negotiable.transform and opacity only.border-t), or divide-y. Don't card-wrap everything.#000). Use Zinc-950, Charcoal, Off-Black.rounded-lg shadow border. Reject. Use hairlines and grouping.tabular-nums.| Error condition | Recovery |
|---|---|
| Data shape missing | Ask for entities + relationships + metrics in one combined question |
| Audience unclear (operator / analyst / exec) | Ask once; density and motion defaults depend on it |
| User answers "all of them" for audience | Push back — density and motion calls depend on a single primary audience; pick one |
| Key metrics list exceeds 7 numbers | Force a triage to the 3-7 that dominate; surface the rest as secondary |
| Sub-agent returns 3-equal-card KPI row | Reject and redo with hairline-separated or asymmetric bento |
| Sub-agent returns proportional digits in metrics | Reject; force tabular-nums |
For path issues: see references/process/discovery-protocol.md for state file location (.ux/ in project root). Report bugs at https://github.com/Laith0003/ux-skill/issues.
After /ux-dashboard:
/ux-component — build a missing widget/ux-polish — cosmetic pass on the dashboard/ux-a11y — color-not-only audit for charts, contrast for tabular data/ux-motion — verify live indicators don't fight attention/ux-next — let the conductor pickBefore generating any output, the LLM running this command MUST shell to the v2 Python engine to ground the work in structured data. This is not optional — running without the preamble means generating from training-data defaults (the slop signal).
test -f .ux/last-discovery.json && cat .ux/last-discovery.json
If the file doesn't exist, run /ux-discover first. Do NOT proceed without a complete 10-field brief.
python3 -m engine.cli.main --no-pretty recommend \
--brief-file=.ux/last-discovery.json > .ux/last-recommendation.json 2>/dev/null \
|| echo "engine not installed — falling back to v1 prose-only mode"
Inspect the recommendation:
cat .ux/last-recommendation.json | python3 -c "
import json, sys
r = json.load(sys.stdin)
print('STYLE: ', (r.get('style') or {}).get('name'))
print('PALETTE: ', (r.get('palette') or {}).get('name'))
print('TYPE: ', (r.get('type_pair') or {}).get('name'))
print('MOTION: ', [m['id'] for m in r.get('motion', [])[:5]])
print('COMPS: ', [c['id'] for c in r.get('components', [])[:6]])
print('BRANDS: ', [b['id'] for b in r.get('brand_exemplars', [])[:5]])
print('GUARDRAILS:', len(r.get('guardrails', [])), 'anti-pattern rules active')
"
The engine's picks are not suggestions — they're constraints:
style.tokens are the design vocabulary you generate frompalette.colors are the only color tokens usedtype_pair is the only typography (display + body + mono)guardrails are checked-against during generation — do NOT emit code that matches any anti-pattern regexbrand_exemplars are the visual reference for tasteFilter components from the recommendation for dashboard-specific patterns (category: Data Display, Charts & Viz). Build a dashboard grid using the picked palette in dark mode (force mode=dark if not already set in the recommendation). Dispatch frontend-engineer with chart-types.json picks scoped to the data the user described.
Brand anchor. If .ux/brand.json exists (a client brand extracted via /ux-design Step 1.5 or from a reference URL/screenshot), pass --brand-file .ux/brand.json to the Step 2 recommend call AND paste .ux/brand.md into the frontend-engineer prompt as a HARD ANCHOR. Dark mode still holds for dashboards, but the brand primary — not the house pick — is the accent on every state color, the logo sits in the chrome, and type matches the logo style; the dashboard must clear the brand-fidelity floor. See references/process/brand-extraction.md.
python3 -m engine.cli.main --no-pretty lint <output-paths> --threshold high
Exit code non-zero means a high+ finding landed in your output. Fix before declaring done.
If python3 -m engine.cli.main is not on PATH (user hasn't installed v2 yet), fall back to v1 prose-only behavior using references/foundations/*.md as the source of taste. The output quality will be lower but the command still works.