Installs just this skill. Get the whole plugin for auto-invocation.
โก How it fires
How this skill gets triggered: by you, by Claude, or both.
Fires itselfClaude auto-loads it when your prompt matches the work.
You can call itInvoke it directly when you want it.
Slash command/ss-review
๐๏ธ Context preview
The summary Claude sees to decide when to auto-load this skill.
Review UI code for design system compliance, accessibility, and best practices
๐ Stats
Stars819
Forks73
LanguageTypeScript
LicenseMIT
๐ฆ Ships with styleseed
</> SKILL.md
ss-review.SKILL.md
---name: ss-review
description: Review UI code for design system compliance, accessibility, and best practices
argument-hint: "[file-path]"
allowed-tools: Read, Grep, Glob
---# UI Design Review
First resolve the effective rule set from `PRODUCT-PRINCIPLES.md`, `RULESETS.md` or the compiled
grammar, `ADAPTERS.md`, domain/page, optional `PRESETS.md` profile, and `STYLESEED.md`. Review
task fitness and grammar coherence before framework conventions. For non-web artifacts, replace
React/Tailwind-only checks with the active adapter's render/export checks.
## When NOT to use
- For accessibility-only issues โ use `/ss-a11y`
- For Nielsen UX heuristics โ use `/ss-audit`
- For a quick automated check โ use `/ss-lint`
- For non-UI code (data fetching, business rules)
Review the file: **$ARGUMENTS**
## Checklist
### 1. Design Token Compliance
- [ ] No hardcoded hex colors (use semantic tokens: `text-foreground`, `bg-brand`, etc.)
- [ ] No hardcoded px spacing in Tailwind (use `p-6` not `p-[24px]`)
- [ ] Shadows use CSS variables (`shadow-[var(--shadow-card)]`)
- [ ] Border radius follows the scale (`rounded-md`, `rounded-lg`, `rounded-2xl`)
### 2. Component Conventions
- [ ] Named export (not default export for components)
- [ ] No wrapper components that only add a className
### 3. Accessibility (a11y)
- [ ] Touch targets >= 44x44px for interactive elements
- [ ] `focus-visible` styles on all interactive elements
- [ ] Proper `aria-*` attributes where needed
- [ ] Color contrast meets WCAG AA (4.5:1 for text, 3:1 for large text)
- [ ] Animations respect `prefers-reduced-motion`
- [ ] Images have `alt` text
- [ ] Form inputs have associated labels
### 4. Mobile Best Practices
- [ ] No horizontal overflow
- [ ] Touch-friendly spacing between interactive elements
- [ ] Safe area insets handled for notched devices
- [ ] Text sizes >= 12px for readability
- [ ] Scrollable containers have `-webkit-overflow-scrolling: touch`
### 5. Performance
- [ ] No unnecessary re-renders (stable references, memoization where needed)
- [ ] Images are lazy-loaded
- [ ] Heavy components are code-split
### 6. Typography
- [ ] Uses the Pretendard/Inter font stack
- [ ] Font sizes from the 14-step scale (10-48px, see CLAUDE.md)
- [ ] Proper font weights (400, 500, 600, 700)
- [ ] Display text (36-48px): `leading-none` + `tracking-[-0.02em]`
- [ ] Heading text (18-24px): `leading-snug` + `tracking-[-0.01em]`
- [ ] Body text (14-17px): `leading-normal` (no custom tracking)
- [ ] Caption uppercase (10-13px): `tracking-[0.05em]` or `tracking-wide`
- [ ] No `line-height: 1.5` on display/heading text (too loose)
### 7. Spacing Consistency
- [ ] All spacing values are multiples of 6px (p-1.5, p-3, p-6, etc.)
- [ ] No arbitrary spacing (p-5=20px, gap-3.5=14px are violations)
- [ ] Uses `size-*` shorthand instead of `w-* h-*`
- [ ] Uses `ms-*/me-*` instead of `ml-*/mr-*` (logical properties)
- [ ] Motion transitions use design tokens (`duration-[var(--duration-fast)]`)
### 8. Coherence (VISUAL-CRAFT.md ยงC0 โ the "one choice per axis" laws)
> The biggest reason a UI reads as "AI-generated" isn't ugly parts โ it's *mixed*
> parts. Check that each axis below uses ONE value system-wide; flag a mix as a real
> issue, not a nitpick.
- [ ] **One radius personality** โ sharp (0-4px) OR soft (8-12px) OR pill, applied to every card/button/input/modal. No mixing (e.g. a `rounded-none` panel with `rounded-full` buttons).
- [ ] **One identifiable primary action** plus only the selected grammar's stable semantic,
categorical, or brand roles โ no competing decorative emphasis hues.
- [ ] **No emoji as UI icons** (๐๐งบโญ as list/nav/status/category markers) โ they inject many uncontrolled hues; use one line-icon set in `currentColor`.
- [ ] **Status color = severity, not decoration** โ a normal/OK/"๋ณดํต" state is neutral grey (not colored); color marks only the minority of rows that need attention; same value โ same color.
- [ ] **No decorative hues** โ favorite stars, category dots, avatars use the accent or grey, not a new color each.
- [ ] **One shadow language** โ same light direction, same scale/tint; not some black + some tinted, some up-lit + some down-lit.
- [ ] **One icon family / fill mode / stroke weight** across the file.
- [ ] **Nested-radius law** โ an element inside a rounded container uses `inner = outer โ padding`, not the same radius (which bulges).
- [ ] **Consistent control heights** โ buttons, inputs, selects share a height set (e.g. 40px).
- [ ] Errors/states never rely on color alone (icon + text too).
## Output Format
Provide:
1. **Score**: Pass / Needs Improvement / Fail
2. **Issues**: List each violation with file:line reference
3. **Fixes**: Concrete code changes for each issue