agentsclimarketplace

Dashboard layout

Skill param087/saas-ui-skills/skills/dashboard-layout

Production-grade SaaS UI skills for AI coding agents (React + Tailwind + shadcn/ui) — Codex, Claude Code, Cursor, OpenCode. One npx command to install.

Install
npx -y skills add param087/saas-ui-skills --skill dashboard-layout

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 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.

What its author says it does

Copied from the file, not written here

Use when building a dashboard or overview page — stat/KPI cards, chart placement, responsive grids, and a scannable hierarchy. Covers metric cards with deltas, where charts go, and loading/empty states for data.

SKILL.md

3.7 KB, as published. Nobody here has run it

Dashboard Layout

Overview

A dashboard answers "how are things?" at a glance. Lead with a row of KPI cards, follow with charts and recent activity, and let the grid reflow responsively. Prioritize scannability: the most important number should be the largest, top-left, where eyes land first.

When to use

  • Building an app's home/overview page.
  • Showing KPIs, trends, and recent activity together.
  • A dashboard feels cluttered or has no clear hierarchy.

KPI cards with deltas

A metric is more useful with a trend. Show the value big, the change small and colored, and never rely on color alone — pair it with an arrow/sign:

function StatCard({ label, value, delta }: { label: string; value: string; delta: number }) {
  const up = delta >= 0;
  return (
    <Card>
      <CardHeader className="pb-2">
        <CardDescription>{label}</CardDescription>
        <CardTitle className="text-3xl tabular-nums">{value}</CardTitle>
      </CardHeader>
      <CardContent>
        <p className={cn("flex items-center gap-1 text-xs", up ? "text-emerald-600" : "text-destructive")}>
          {up ? <ArrowUp className="h-3 w-3" aria-hidden /> : <ArrowDown className="h-3 w-3" aria-hidden />}
          {Math.abs(delta)}% <span className="text-muted-foreground">vs last month</span>
        </p>
      </CardContent>
    </Card>
  );
}

Responsive grid

<div className="space-y-6">
  {/* KPI row: 1 → 2 → 4 columns */}
  <div className="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
    <StatCard label="MRR" value="$24,580" delta={12.5} />
    <StatCard label="Active users" value="1,429" delta={4.2} />
    <StatCard label="Churn" value="2.1%" delta={-0.4} />
    <StatCard label="Signups" value="312" delta={18.0} />
  </div>

  {/* Main chart + side panel */}
  <div className="grid grid-cols-1 gap-4 lg:grid-cols-3">
    <Card className="lg:col-span-2"><CardHeader><CardTitle>Revenue</CardTitle></CardHeader>
      <CardContent className="h-72"><RevenueChart /></CardContent>
    </Card>
    <Card><CardHeader><CardTitle>Recent activity</CardTitle></CardHeader>
      <CardContent><ActivityFeed /></CardContent>
    </Card>
  </div>
</div>

Charts

  • Use a React chart lib (Recharts, or shadcn's Chart wrapper) — give the container a fixed height (h-72) so it doesn't collapse.
  • Pull series colors from theme tokens (hsl(var(--primary))) so charts match light/dark.
  • Label axes; format numbers/currency; keep it to one idea per chart.
  • Provide a loading skeleton sized to the chart and an empty state ("No data for this range").

Hierarchy & scannability

  • Most important metric: largest, top-left.
  • Group related cards; use whitespace, not borders, to separate sections.
  • Add a time-range selector that drives all widgets.
  • Keep it to what's actionable — a dashboard is not a data dump.

Pitfalls

  • Bare numbers, no trend/context — a KPI without a delta or comparison.
  • Color-only deltas — add an arrow/sign for colorblind users.
  • Charts with no fixed height — they collapse or jump on load.
  • No loading/empty states — see empty-and-loading-states.
  • Everything the same size — no hierarchy means nothing stands out.
  • Hard-coded chart colors that break in dark mode — use tokens.

Hand-off

The overview that sits in responsive-layout, reuses empty-and-loading-states for data, links to data-tables for detail and billing-and-pricing for usage/upgrade.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.