agentsclimarketplace

Audit uiux design system

Skill kensaurus/cursor-kenji/skills/audit-uiux-design-system

πŸ¦–Curated Cursor AI agent skills, slash commands, MCP configs, subagents & rules for full-stack dev β€” React 19, Next.js 15, Supabase, Tailwind v4, TypeScript

Install
npx -y skills add kensaurus/cursor-kenji --skill audit-uiux-design-system

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

  • 6 stars6 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

Audit visual UI coherency, design token compliance, and component modularity against a design system for any project. Auto-detects CSS framework (Tailwind v3/v4, CSS Modules, Styled Components), component library (shadcn, Radix, MUI, Chakra), and icon library. Uses browser MCP tools for live visual verification, Firecrawl for current design system best practices, and Context7 for component library documentation. Use when reviewing design consistency, checking component modularity, auditing color/typography/spacing tokens, checking dark mode compliance, or when the user mentions design drift, UI inconsistency, design system compliance, visual coherency, token violations, or component architecture review. This skill focuses on VISUAL UI only β€” for UX evaluation (heuristics, content, interaction patterns, user flows), use the audit-ux skill instead.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

16.6 KB, as published. Nobody here has run it

UI Design System Audit Skill

Visual design system coherency audit: tokens, components, visual consistency, dark mode, animations, and WCAG visual compliance.

Before ANY browser interaction, read the browser-anti-stall skill and apply its rules to every step. That skill is protocol-browser-anti-stall.

CRITICAL: Anti-Template, Anti-AI-Generated Design

Every UI recommendation MUST result in output that looks hand-crafted by a senior designer, not generated by a template or AI. Before implementing or recommending ANY visual change:

  1. Research real products β€” Search Firecrawl for award-winning sites in the product's domain (Awwwards, Muzli, SiteInspire). Study what makes them feel human and curated.
  2. Break the grid intentionally β€” Uniform spacing, identical card sizes, and perfectly symmetric layouts are AI tells. Introduce deliberate visual rhythm: vary section padding, use asymmetric hero layouts, offset elements with purpose.
  3. Microinteraction budget β€” Every interactive element needs a response. Not the same response. Buttons get press feedback (scale, shadow shift). Links get underline animations. Cards get subtle lift. Hover, focus, active, and disabled MUST all feel distinct.
  4. Personality tokens β€” The design system must define personality, not just colors. What's the brand's visual "voice"? Sharp corners = precision. Rounded = friendly. Monospace accents = technical. Serif headings = editorial. This must be intentional.
  5. Forbid these AI tells:
  • Identical padding on every section
  • Generic gradient backgrounds with no brand logic
  • Icon-title-description cards in a 3-column grid as the default layout for everything
  • "Lorem ipsum" placeholder patterns in empty states
  • Perfectly uniform border-radius on all elements
  • Stock illustration style (undraw, absurd-design) without brand adaptation

Step 0: Auto-Detect Design System

0a. Detect CSS Framework

Read package.json and config files:

SignalTechnology
tailwindcss v3 + tailwind.config.*Tailwind CSS v3
tailwindcss v4 + @theme in CSSTailwind CSS v4
*.module.css filesCSS Modules
styled-components or @emotion/styledCSS-in-JS
@chakra-ui/reactChakra UI
@mui/materialMaterial UI
@mantine/coreMantine

0b. Detect Component Library

Glob: **/components/ui/*.tsx β†’ shadcn/ui
Glob: **/components/ui/*.vue β†’ Vue component lib
Glob: **/components/ui/*.svelte β†’ Svelte component lib
Grep: "from '@radix-ui" glob "*.{ts,tsx}" output_mode "count"
Grep: "from 'lucide-react" glob "*.{ts,tsx}" output_mode "count"
Grep: "from '@heroicons" glob "*.{ts,tsx}" output_mode "count"
Grep: "from 'react-icons" glob "*.{ts,tsx}" output_mode "count"

0c. Find Design Tokens

Glob: **/tailwind.config.*
Glob: **/app/globals.css
Glob: **/styles/tokens.*
Glob: **/theme.*
Grep: "--primary|--secondary|--accent|--muted" glob "*.css"

Read token source to extract: colors, spacing, typography, radii, shadows.

0d. Discover Forbidden Patterns

Grep: "NEVER|FORBIDDEN|DO NOT" glob "**/*README*" -i

0e. Record Discovery

DESIGN SYSTEM DISCOVERY:
- CSS framework: [Tailwind v3/v4 / CSS Modules / Styled Components / etc.]
- Component library: [shadcn/ui / Radix / MUI / Chakra / custom]
- Icon library: [Lucide / Heroicons / react-icons / mixed]
- Token source: [file path]
- Colors defined: [count]
- Typography scale: [list]
- Spacing base: [4px / 8px / etc.]
- Border radius: [list]
- Shadow levels: [list]
- Dark mode: [YES β€” class/media / NO]
- Forbidden patterns: [list from README]

Step 1: Research Design System Best Practices

1a. Context7 β€” Component Library Docs

context7:resolve-library-id
{
 "libraryName": "<DETECTED_COMPONENT_LIBRARY>",
 "query": "component variants accessibility patterns"
}

Then fetch docs with the resolved ID. Also fetch CSS framework docs.

1b. Firecrawl β€” Design System Standards

firecrawl:firecrawl_search
{
 "query": "<COMPONENT_LIBRARY> design system audit token compliance best practices [current year]",
 "limit": 5,
 "sources": [{ "type": "web" }]
}

Additional queries:

TopicQuery
Token compliancedesign token audit <CSS_FRAMEWORK> consistency
Component patterns<FRAMEWORK> component modularity composition patterns
Dark mode<CSS_FRAMEWORK> dark mode implementation best practices

Scrape the best result for detailed guidance.

1c. Firecrawl β€” Award-Winning Reference Sites

Research real products in the same domain to establish a visual benchmark:

firecrawl:firecrawl_search
{
 "query": "<PRODUCT_TYPE> website design award Awwwards Muzli [current year]",
 "limit": 5,
 "sources": [{ "type": "web" }]
}
firecrawl:firecrawl_search
{
 "query": "<PRODUCT_TYPE> SaaS UI design inspiration unique not generic [current year]",
 "limit": 5,
 "sources": [{ "type": "web" }]
}

Scrape 2-3 standout sites. Extract:

  • How they break typical grid patterns
  • Signature microinteractions (hover, scroll, transition)
  • Typography personality (serif/sans mix, weight contrast, size jumps)
  • Color usage patterns (accent frequency, gradient logic, muted vs saturated)
  • What makes them NOT look like a template

Step 2: Token Compliance Audit

2a. Color Tokens

RuleStandardHow to Check
Semantic namingprimary, secondary, destructive, muted, accentNo raw hex/rgb in components
CSS variableshsl(var(--primary)) or oklch()All colors reference variables
Foreground pairsEvery bg color has *-foregroundText contrast maintained
Dark modeAll tokens have dark variant.dark class or @media
Status colorssuccess, warning, error, info definedConsistent across alerts, badges, toasts

Find violations:

Grep: "(#[0-9a-fA-F]{3,8}|rgb\(|rgba\(|hsl\([^v])" glob "*.tsx"
Grep: "\[(#|rgb|hsl)" glob "*.tsx"

2b. Typography Tokens

RuleStandard
Font familiesMax 2-3 families in theme
Size scaleConsistent (text-sm, text-base, text-lg)
Weight scaleLimited set (font-normal, font-medium, font-semibold, font-bold)
Heading hierarchyh1 > h2 > h3 in visual weight AND DOM order
No arbitrary sizesNo text-[14px] when text-sm exists
Grep: "text-\[" glob "*.tsx"
Grep: "font-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)" glob "*.tsx" output_mode "count"

2c. Spacing Tokens

RuleStandard
Base unit4px grid (Tailwind default)
Consistent gapsSame spacing for same contexts
No arbitrary valuesNo p-[13px] when p-3 exists
Grep: "(p|m|gap|space)-\[" glob "*.tsx"

2d. Borders, Radii, Shadows

Grep: "rounded-\[" glob "*.tsx"
Grep: "shadow-" glob "*.tsx" output_mode "count"

Step 3: Component Modularity Audit

3a. Component Health

RuleStandard
Single responsibilityOne component = one purpose
ComposableSmall pieces compose into larger ones
ReusableSame UI = same component everywhere
Consistent propsvariant, size, disabled, className across all
Variants patterncva() or similar for style variants

3b. Find Duplicate Components

Grep: "<button " glob "*.tsx" β€” raw buttons outside ui/ (should use Button)
Grep: "<input " glob "*.tsx" β€” raw inputs (should use Input)
Grep: "<select " glob "*.tsx" β€” raw selects
Grep: "<a " glob "*.tsx" β€” raw anchors (should use Link)

Exclude components/ui/* β€” those are legitimate primitives.

3c. Check Component Consistency

Grep: "function (Button|Input|Modal|Dialog|Card)" glob "*.tsx" output_mode "files_with_matches"

Multiple files defining the same component name = duplication.

3d. Mixed Icon Libraries

Grep: "from .lucide-react" glob "*.tsx" output_mode "count"
Grep: "from .@heroicons" glob "*.tsx" output_mode "count"
Grep: "from .react-icons" glob "*.tsx" output_mode "count"

Multiple icon libraries = inconsistency. Flag it.


Step 4: Live Visual Verification (Browser MCP)

4a. Navigate and Capture

browser_navigate β†’ http://localhost:<PORT>/<ROUTE>
browser_wait_for β†’ { time: 2 }
browser_snapshot β†’ verify content rendered
browser_take_screenshot β†’ visual evidence
browser_console_messages β†’ check for errors

4b. Per-Page Checks

CheckHow
Token complianceScreenshot β€” inconsistent colors, spacing
Component reuseSnapshot β€” shared primitives used?
Console errorsbrowser_console_messages β€” hydration, missing CSS vars
Layout shiftSnapshot before/after interaction
Dark modeToggle dark mode, re-screenshot, compare

4c. Responsive Check

Test at three viewports:

  • Desktop (1280px)
  • Tablet (768px)
  • Mobile (375px)

Capture screenshots at each.

4d. Visual Accessibility

CheckHow
Color contrast4.5:1 text, 3:1 large text/UI β€” inspect via screenshot
Focus ringsTab through elements, verify visible focus indicator
Semantic HTML`Grep: "<nav>
Alt text`Grep: "<(img

Step 5: Microinteractions and User Feedback

5a. Microinteraction Coverage Audit

Every interactive element MUST provide tactile feedback. Check each:

ElementExpected FeedbackAI-Tell if Missing
ButtonsHover: color shift + subtle shadow change. Active: scale(0.98) press. Loading: spinner replaces label or inline indicatorFlat, no state change β€” feels dead
LinksHover: underline animation or color transition, not instant swapInstant color jump with no transition
Cards (clickable)Hover: lift (translateY + shadow increase). Not just color changeColor change only, or no hover at all
InputsFocus: ring animation or border color transition. Not just outline swapBrowser default outline, no custom focus
Toggles/switchesState transition animated, not instant. Haptic feel via easingInstant snap between states
Dropdowns/menusOpen/close with slide or fade, not instant appear/disappearInstant pop, no transition
Toasts/notificationsEnter with slide + fade, exit with fade. Auto-dismiss with progressInstant appear/disappear
Modals/dialogsBackdrop fade + content scale/slide. Exit reverses. Not instantInstant appear, jarring
TabsActive indicator slides to new tab, not instant jumpInstant color swap
TooltipsSlight delay (200-300ms), fade in. Don't flicker on mouse movementInstant, flickers, no delay

Find in code:

Grep: "transition-all|transition-colors|transition-opacity|transition-transform" glob "*.tsx" output_mode "count"
Grep: "hover:|group-hover:|focus-visible:" glob "*.tsx" output_mode "count"
Grep: "animate-|animation-|@keyframes|framer-motion|motion\." glob "*.tsx" output_mode "count"
Grep: "scale-|translate-|rotate-" glob "*.tsx" output_mode "count"

5b. Interaction State Completeness

For every interactive component, verify ALL states exist. Missing states = AI-generated feel:

States checklist per component:
β–‘ Default (resting)
β–‘ Hover (mouse over)
β–‘ Focus-visible (keyboard navigation)
β–‘ Active/pressed (during click)
β–‘ Disabled (grayed, not clickable, cursor-not-allowed)
β–‘ Loading (async action in progress)
β–‘ Error (validation failed, destructive context)
β–‘ Success (completed action)

Find missing states:

Grep: "focus-visible:|focus:" glob "*.tsx" output_mode "count"
Grep: "active:|pressed" glob "*.tsx" output_mode "count"
Grep: "disabled:|cursor-not-allowed|opacity-50" glob "*.tsx" output_mode "count"

5c. Visual Rhythm and Personality Audit

Check that the design has intentional variety, not uniform repetition:

PatternCurated FeelTemplate Feel
Section spacingVaries by content type (hero: generous, form: tight, CTA: spacious)Same py-16 on every section
Typography contrastLarge jumps between heading and body (e.g., 48px β†’ 16px). Mix weightsIncremental scale, same weight everywhere
Color accent usageAccent used sparingly for emphasis, not on every elementPrimary color on every button, link, icon
Layout variationDifferent layouts per section (text-left/image-right, full-width, sidebar)Same 3-column card grid repeated
Border radiusIntentional variation (pills for tags, rounded for cards, sharp for data tables)Same rounded-lg on everything
Shadow depthMultiple shadow levels for elevation hierarchySame shadow on everything, or no shadows
WhitespaceAsymmetric margins create visual flow and reading rhythmPerfectly symmetric, mechanical spacing

Step 6: Animation and Dark Mode

Animations

RuleStandard
Duration scale150ms (micro), 200ms (hover), 300ms (enter), 500ms (complex) β€” NOT all the same
Easingease-out for enter, ease-in for exit, ease-in-out for state changes β€” NOT all ease-in-out
Reduced motionmotion-safe: prefix or prefers-reduced-motion
No layout shiftTransitions don't cause CLS
Stagger effectList items, card grids animate in with stagger delay, not all at once
Grep: "duration-[0-9]+" glob "*.tsx" output_mode "count"
Grep: "transition-" glob "*.tsx" output_mode "count"
Grep: "prefers-reduced-motion|motion-safe|motion-reduce" glob "*.tsx"
Grep: "stagger|delay-\[|animation-delay" glob "*.tsx" output_mode "count"

Dark Mode

RuleStandard
All tokens switchCSS variables change in dark mode
No hardcoded colorsNo bg-white, text-black β€” use semantic tokens
Borders visibleIn both modes
ContrastWCAG in BOTH light and dark
Not an afterthoughtDark mode should feel designed, not inverted. Shadows become glows, borders become subtle
Grep: "(bg-white|bg-black|text-white|text-black)" glob "*.tsx" output_mode "count"

Output Template

## UI Design System Audit Report

**Date:** [date]
**Framework:** [detected]
**CSS:** [Tailwind v3/v4 / CSS Modules / etc.]
**Component library:** [shadcn / Radix / MUI / custom]
**Pages Audited:** [count]
**Issues Found:** [count]

---

### Design Token Compliance

| Token Category | Defined | Violations | Status |
|----------------|---------|------------|--------|
| Colors | [count] | [count] raw hex/rgb | [pass/warn/fail] |
| Typography | [count] | [count] arbitrary sizes | [pass/warn/fail] |
| Spacing | [count] | [count] arbitrary values | [pass/warn/fail] |
| Radii | [count] | [count] arbitrary radii | [pass/warn/fail] |
| Shadows | [count] | [count] inconsistent | [pass/warn/fail] |

---

### Component Health

| Component | Used In | Variants | Issues |
|-----------|---------|----------|--------|
| Button | [N] files | [N] | [notes] |
| Input | [N] files | [N] | [notes] |
| Card | [N] files | [N] | [notes] |

---

### Duplicate / Redundant Components

| Pattern | Locations | Recommendation |
|---------|-----------|----------------|
| Raw `<button>` | [files] | Use `<Button>` from `components/ui` |
| Custom modal | [file] | Use `<Dialog>` from `components/ui` |

---

### Visual Accessibility

| Criteria | Status | Issues |
|----------|--------|--------|
| Color contrast | [pass/warn/fail] | [details] |
| Focus indicators | [pass/warn/fail] | [details] |
| Alt text | [pass/warn/fail] | [details] |
| Semantic HTML | [pass/warn/fail] | [details] |

---

## Further reading

- [Microinteraction Coverage and more](references/details.md)

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.