Skill Tracer
Skills › BMAD Method › bmad-ux › design-example-shadcn.md

design-example-shadcn.md

109 lines · skills/bmad-ux/assets/design-example-shadcn.md at bd70c64

Open on GitHub
1---
2name: Drift
3description: Focused task tracker for solo founders and small async teams. shadcn/ui on Next.js + Tailwind; this DESIGN.md specifies the brand-layer delta only.
4colors:
5 # Brand overrides on top of shadcn defaults. All unlisted tokens inherit
6 # from shadcn (background, foreground, muted, muted-foreground, popover,
7 # popover-foreground, card, card-foreground, border, input, ring, destructive).
8 primary: '#0F4C81'
9 primary-foreground: '#FFFFFF'
10 accent: '#F59E0B'
11 accent-foreground: '#1A1208'
12 primary-dark: '#5C8AC2'
13 primary-foreground-dark: '#0A1A2A'
14 accent-dark: '#FBC470'
15 accent-foreground-dark: '#1A1208'
16typography:
17 # Body, label, and muted inherit from shadcn (Geist Sans). Only display is overridden.
18 display:
19 fontFamily: 'Instrument Serif'
20 fontSize: 36px
21 fontWeight: '400'
22 lineHeight: '1.15'
23 letterSpacing: -0.01em
24 display-sm:
25 fontFamily: 'Instrument Serif'
26 fontSize: 24px
27 fontWeight: '400'
28 lineHeight: '1.2'
29rounded:
30 # Tighter than shadcn defaults — Drift reads sharper.
31 sm: 4px
32 md: 6px
33 lg: 8px
34spacing:
35 # shadcn / Tailwind defaults inherited; no overrides.
36components:
37 button-primary:
38 background: '{colors.primary}'
39 foreground: '{colors.primary-foreground}'
40 radius: '{rounded.md}'
41 focus-card:
42 background: '{colors.accent}'
43 foreground: '{colors.accent-foreground}'
44 radius: '{rounded.md}'
45 border: 'none'
46 command-palette-result-active:
47 background: '{colors.accent}'
48 foreground: '{colors.accent-foreground}'
49---
51## Brand & Style
53Drift is a focused task tracker for solo founders and small async teams. The product premise is that *work is a moving thing* — momentum matters more than perfectly groomed backlogs, and the right tool surfaces what you're working on *now* without making you administer a system to find it. The brand expression follows: a serif display moment in an otherwise sober sans-serif surface, a single warm accent that means *this is what's live*, and visual restraint everywhere else.
55Drift inherits shadcn/ui defaults wholesale. This DESIGN.md specifies only the brand-layer deltas — primary color, accent color, display typography, slightly tighter corners, and a handful of brand-specific components. The 80% of components that ship from shadcn (Button, Card, Dialog, Sheet, Command, Popover, Toast) inherit shadcn's visual specs as-is. Customizing those is *explicitly* against the brand discipline — shadcn's defaults are the contract.

Brand & Style

Drift is a focused task tracker for solo founders and small async teams. The product premise is that work is a moving thing — momentum matters more than perfectly groomed backlogs, and the right tool surfaces what you're working on now without making you administer a system to find it. The brand expression follows: a serif display moment in an otherwise sober sans-serif surface, a single warm accent that means this is what's live, and visual restraint everywhere else.

Drift inherits shadcn/ui defaults wholesale. This DESIGN.md specifies only the brand-layer deltas — primary color, accent color, display typography, slightly tighter corners, and a handful of brand-specific components. The 80% of components that ship from shadcn (Button, Card, Dialog, Sheet, Command, Popover, Toast) inherit shadcn's visual specs as-is. Customizing those is explicitly against the brand discipline — shadcn's defaults are the contract.

Raw lines 51 to 56
57## Colors
59The Drift palette is two colors of brand-layer plus shadcn defaults for everything else.
61- **Primary Navy (`#0F4C81` light / `#5C8AC2` dark)** is the brand color. Used on primary buttons, active nav items, link underlines, and the "current week" indicator. Replaces shadcn's default `primary`.
62- **Focus Amber (`#F59E0B` light / `#FBC470` dark)** is the accent. Used exclusively to indicate the task or project currently in focus — the one you're working on *right now*. Never used for chrome, never used decoratively, never used for state badges. Amber means "live."
63- **All other tokens** (`background`, `foreground`, `muted`, `muted-foreground`, `border`, `input`, `ring`, `card`, `popover`, `destructive`) inherit from shadcn defaults. If the brand can't justify overriding a token, it doesn't override it.
65Avoid: chromatic flourishes, gradient surfaces, custom destructive colors (use shadcn's), more than two brand colors. The discipline is two-colors-and-stop.

Colors

The Drift palette is two colors of brand-layer plus shadcn defaults for everything else.

  • **Primary Navy (#0F4C81 light / #5C8AC2 dark)** is the brand color. Used on primary buttons, active nav items, link underlines, and the "current week" indicator. Replaces shadcn's default primary.
  • **Focus Amber (#F59E0B light / #FBC470 dark)** is the accent. Used exclusively to indicate the task or project currently in focus — the one you're working on right now. Never used for chrome, never used decoratively, never used for state badges. Amber means "live."
  • All other tokens (background, foreground, muted, muted-foreground, border, input, ring, card, popover, destructive) inherit from shadcn defaults. If the brand can't justify overriding a token, it doesn't override it.

Avoid: chromatic flourishes, gradient surfaces, custom destructive colors (use shadcn's), more than two brand colors. The discipline is two-colors-and-stop.

Raw lines 57 to 66
67## Typography
69Body / label / caption inherit shadcn's Geist Sans ramp. Only the `display` role is brand-overridden, set in **Instrument Serif** at 36px (24px small variant). The serif moment appears in:
71- Empty-state hero text on Today and project surfaces
72- Project titles in the project detail header
73- The "Welcome back, {name}" greeting at first session of the day
75Everything else stays in Geist Sans. The serif is a punctuation mark, not a default voice.

Typography

Body / label / caption inherit shadcn's Geist Sans ramp. Only the display role is brand-overridden, set in Instrument Serif at 36px (24px small variant). The serif moment appears in:

  • Empty-state hero text on Today and project surfaces
  • Project titles in the project detail header
  • The "Welcome back, {name}" greeting at first session of the day

Everything else stays in Geist Sans. The serif is a punctuation mark, not a default voice.

Raw lines 67 to 76
77## Layout & Spacing
79shadcn / Tailwind spacing scale inherited as-is (the 4-based scale: 4, 8, 12, 16, 20, 24, 32, 40, 48, 64). Maximum content width: `max-w-3xl` (768px) — Drift is not a wide-table product, and forcing one-column reading keeps the surface focused.
81Single-column layout. Sidebar nav on `lg` (1024px+); on smaller viewports, the sidebar becomes a sheet triggered from the top bar.

Layout & Spacing

shadcn / Tailwind spacing scale inherited as-is (the 4-based scale: 4, 8, 12, 16, 20, 24, 32, 40, 48, 64). Maximum content width: max-w-3xl (768px) — Drift is not a wide-table product, and forcing one-column reading keeps the surface focused.

Single-column layout. Sidebar nav on lg (1024px+); on smaller viewports, the sidebar becomes a sheet triggered from the top bar.

Raw lines 77 to 82
83## Elevation & Depth
85Inherited from shadcn — subtle shadow on hover/active states, no elevation as a visual hierarchy device. Drift adds nothing on top of this; brand discipline is "shadcn's shadows are correct."

Elevation & Depth

Inherited from shadcn — subtle shadow on hover/active states, no elevation as a visual hierarchy device. Drift adds nothing on top of this; brand discipline is "shadcn's shadows are correct."

Raw lines 83 to 86
87## Shapes
89Tighter than shadcn defaults: `rounded/sm` (4px) for inputs, `rounded/md` (6px) for cards and buttons, `rounded/lg` (8px) for dialogs and the command palette. The crispness reads "tool" rather than "consumer app." Pill shapes (`rounded/full`) appear only on status badges.

Shapes

Tighter than shadcn defaults: rounded/sm (4px) for inputs, rounded/md (6px) for cards and buttons, rounded/lg (8px) for dialogs and the command palette. The crispness reads "tool" rather than "consumer app." Pill shapes (rounded/full) appear only on status badges.

Raw lines 87 to 90
91## Components
93Drift uses the following shadcn components as-is, unchanged: `Button`, `Card`, `Dialog`, `Sheet`, `Popover`, `DropdownMenu`, `Toast`, `Tabs`, `Avatar`, `Separator`. The contract: don't customize these.
95Brand-layer-overridden components:
97- **Button (primary variant)** — `{colors.primary}` fill, `{colors.primary-foreground}` text, `{rounded.md}` corner. Other variants (secondary, outline, ghost, destructive) inherit shadcn defaults.
98- **Focus card** — Custom Drift component. The "this is what you're working on now" card on Today and project detail. `{colors.accent}` fill, no border, slightly elevated. Appears at most once per surface.
99- **Command palette result (active)** — Override on shadcn's `Command` component: the highlighted/keyboard-selected result row uses `{colors.accent}` instead of shadcn's default `accent` token. Reinforces "this is what will fire if you hit Enter."

Components

Drift uses the following shadcn components as-is, unchanged: Button, Card, Dialog, Sheet, Popover, DropdownMenu, Toast, Tabs, Avatar, Separator. The contract: don't customize these.

Brand-layer-overridden components:

  • Button (primary variant) — {colors.primary} fill, {colors.primary-foreground} text, {rounded.md} corner. Other variants (secondary, outline, ghost, destructive) inherit shadcn defaults.
  • Focus card — Custom Drift component. The "this is what you're working on now" card on Today and project detail. {colors.accent} fill, no border, slightly elevated. Appears at most once per surface.
  • Command palette result (active) — Override on shadcn's Command component: the highlighted/keyboard-selected result row uses {colors.accent} instead of shadcn's default accent token. Reinforces "this is what will fire if you hit Enter."
Raw lines 91 to 100
101## Do's and Don'ts
103| Do | Don't |
104|---|---|
105| Inherit shadcn defaults for everything not in the brand layer | Override shadcn's color tokens beyond `primary` and `accent` |
106| Use `{colors.accent}` only for "live / now / in-focus" | Use accent for state, chrome, or hover affordances |
107| `display` typography sparingly — empty states, hero greetings | Set body text in `display` to "make it pretty" |
108| Tighter corners than shadcn (4 / 6 / 8) | Use shadcn's default 6/8/12 (Drift reads sharper) |
109| Single-column layouts inside `max-w-3xl` | Wide multi-column tables (Drift is not a spreadsheet) |

Do's and Don'ts

DoDon't
Inherit shadcn defaults for everything not in the brand layerOverride shadcn's color tokens beyond primary and accent
Use {colors.accent} only for "live / now / in-focus"Use accent for state, chrome, or hover affordances
display typography sparingly — empty states, hero greetingsSet body text in display to "make it pretty"
Tighter corners than shadcn (4 / 6 / 8)Use shadcn's default 6/8/12 (Drift reads sharper)
Single-column layouts inside max-w-3xlWide multi-column tables (Drift is not a spreadsheet)
Raw lines 101 to 109