dashboard-ui-build

Build dense single-screen tool dashboards with sortable tables and expand-in-place detail panels.

Updated Aug 21, 2026
One-click install
npx skills add https://github.com/TylerSimons1127/vibe --skill dashboard-ui-build-tylersimons1127
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: dashboard-ui-build
Source: https://github.com/TylerSimons1127/vibe/tree/main/skills/dashboard-ui-build
Command: npx skills add https://github.com/TylerSimons1127/vibe --skill dashboard-ui-build-tylersimons1127

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Stakeholders repeatedly reject internal tool UIs that look like marketing landing pages — hero headlines, full-height color bands, marquees, and scroll animations. This Skill enforces the correct composition for tool consoles: a compact top bar, a tight summary stat row, and a dense sortable table filling the screen, modeled on Linear and Stripe Dashboard rather than an Apple launch page. ## Core Features & Use Cases - Single-screen dashboard composition: 100vh flex-column shell with overflow:hidden, sticky table headers, zebra rows, sortable columns, and expand-in-place row detail via grid-template-rows: 0fr → 1fr transitions. - Runtime preferences system: a reusable prefs.ts / usePrefs.ts / popover pattern driving theme, accent, font, density, and format options through CSS custom properties and one update(key, value) call. - Pitfall library from real sessions: fixes for expandable <tr> rendered outside <tbody>, keyboard handlers hijacking focused inputs, dead CSS after refactors, decision buttons that only toast instead of mutating visible status, and collapsed rows that are too tall. - Use Case: A stakeholder sends a scrolling showcase mockup for a lead-audit tool and asks for a working console. Use this Skill to delete the hero/bands/footer, compress into topbar + 5-stat row + dense table with 15+ visible rows, and wire Keep/Dispute decisions to real status state. ## Quick Start Use the dashboard-ui-build skill to turn this landing-page mockup into a single-screen dense dashboard with a sortable leads table and expand-in-place row detail.

Frequently Asked Questions about dashboard-ui-build

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I build a dashboard that doesn't look like a landing page?▼

Delete the hero, color bands, marquee, footer, and scroll animations while keeping the palette and typography. Compose the screen as a compact top bar, a tight 5-stat summary row, and a dense sortable table filling the rest of a 100vh no-scroll shell, modeled on Linear or Stripe Dashboard.

How to make table rows dense enough for a data grid UI?▼

Target 40-48px row height with cell padding around 5px 14px and 12-13px font sizes. Kill two-line cells by hiding description lines in collapsed rows, shrink pills and status chips, and verify 15+ rows are visible on a laptop screen without scrolling.

Why does my expandable table row detail not render in React?▼

An expandable `<tr>` rendered outside `<tbody>` renders nothing — the browser drops it from the table model silently. Render the data row and its detail row together inside `<tbody>`, wrapped in one Fragment, and animate the detail with a `grid-template-rows: 0fr → 1fr` wrapper.

How do I add a theme and density preferences menu to a React tool UI?▼

Create a typed Prefs interface with DEFAULT_PREFS, loadPrefs/savePrefs using localStorage, and applyPrefs that sets CSS custom properties and data attributes on document.documentElement. A usePrefs hook applies and saves on change, so every visual switch reduces to one update(key, value) call.

Why does my keyboard navigation break when typing in a textarea?▼

A global keydown listener for ArrowRight, Enter, or Escape hijacks typing when an input or textarea is focused. Guard the handler by checking e.target for INPUT, TEXTAREA, or isContentEditable and returning early, while handling Escape before the guard so it still closes the view.

When should a feature be a full-screen page instead of a modal overlay?▼

Use an early-return state swap at the top of the root component — `if (active) return <FeaturePage onClose={...} />` — when the feature needs its own dedicated full-screen page with a Back button. Reserve modal overlays only for panels that sit on top of the dashboard.