A themeable design system for admin dashboards

Built with Next.js, Tailwind CSS v4, and shadcn/ui. Every color, radius and font is a CSS variable — retune the whole product from one file, or live-preview it with the controls below.

Live theme controls

This edits --brand-hue and --radius on :root in real time — no rebuild required.

265°
0.63rem

Color tokens

Every color in this system is a CSS variable defined once in globals.css and consumed through Tailwind's @theme mapping. Swap the OKLCH values there (or drag --brand-hue above) and every component below updates — nothing is hardcoded in component files. Click any swatch to copy its variable name.

Core surfaces

Status colors

Chart palette

Sidebar palette

Typography

Font family is the --font-sans variable set in layout.tsx (Geist by default). Swap the font import and every size below inherits it automatically.

Heading 1 — The quick brown fox

Heading 2 — The quick brown fox

Heading 3 — The quick brown fox

Heading 4 — The quick brown fox

Heading 5 — The quick brown fox

Body — Design systems bring order to complexity. This paragraph demonstrates the default body copy size and line height used throughout the dashboard, forms, and tables.

Muted / small — used for captions, helper text, and secondary metadata under form fields and table rows.

“Blockquote — good design is as little design as possible.”
const inlineCode = "font-mono, bg-muted";

Spacing & radius

Spacing follows Tailwind's default 4px scale. Radii are derived from the single --radius variable (see the live control above), so a client can tune roundness once instead of per-component.

1
0.25rem / 4px
2
0.5rem / 8px
3
0.75rem / 12px
4
1rem / 16px
6
1.5rem / 24px
8
2rem / 32px
10
2.5rem / 40px
12
3rem / 48px
16
4rem / 64px
20
5rem / 80px
24
6rem / 96px
sm
md
lg
xl
2xl
3xl

Buttons

Six variants, four text sizes, and icon-only sizes. All defined once in button.tsx with class-variance-authority — add a variant there and it's available everywhere.

Variants
Sizes
With icons
Icon-only
States

Form controls

Text inputs, selects, checkboxes, radios, switches, sliders and toggles — the primitives every settings page and create/edit form is built from.

Text input
Textarea
Select
Checkbox
Radio group
Switch
Slider
Toggle & toggle group
Sample form

Cards, badges, alerts & tables

The building blocks of every dashboard page: content cards, status badges, inline alerts, and data tables.

Badges
DefaultSecondaryOutlineSuccessWarningInfoDestructive
Alerts
Avatars
ASMRLW
Cards
Monthly revenue
vs. previous 30 days
+12.4%

$48,290

Across 1,204 orders this month.

Upgrade to Pro
Unlock advanced analytics and unlimited seats.
Table
InvoiceCustomerStatusAmount
INV-3021Aditi SharmaPaid$249.00
INV-3022Marco RossiPending$99.00
INV-3023Lin WeiOverdue$1,200.00
INV-3024Sara AhmedPaid$450.00

Overlays

Dialogs, sheets, popovers, tooltips and accordions — for confirmations, side panels, and progressive disclosure.

Dialog
Popover & tooltip
Accordion

Feedback

Progress bars, loading skeletons, and toast notifications for async states.

Progress
x
x
Skeleton
Separator

Section one

Section two

Toast

Charts

Recharts wrapped with the ChartContainer helper — series colors read from the chart-1…5 tokens so charts stay in sync with the rest of the theme.

Bar chart
Line chart