ss-score
The ss-score skill quantifies a UI file's design quality on a 0-100 scale against StyleSeed's design language, providing weighted scores across six categories (color, typography, layout, elevation, states, motion) plus a prioritized list of violations to fix first. Use it to track and improve design system compliance when you need a measurable baseline rather than a prose review or a quick lint pass.
git clone --depth 1 https://github.com/bitjaru/styleseed /tmp/ss-score && cp -r /tmp/ss-score/engine/.claude/skills/ss-score ~/.claude/skills/ss-scoreSKILL.md
# Design Score `/ss-review` tells you *what's wrong*. `/ss-score` tells you *how good it is overall* and *what to fix first* — a single number plus a category breakdown, so you can track UI quality like you track test coverage. ## When NOT to use - For a quick pass/fail before committing → use `/ss-lint` - For a full prose audit with fixes → use `/ss-review` - For non-UI files (logic, config) — scoring is meaningless ## What to score Score the file (or each file in a directory) on **six weighted categories** that map to the design language. Total = 100. | Category | Weight | Reads from | |---|---|---| | **Color discipline** | 18 | DESIGN-LANGUAGE §1, §18, §72 + VISUAL-CRAFT §C4 | | **Hierarchy & typography** | 18 | §2, §3, §4, §16 + Font Size table + VISUAL-CRAFT §C2 | | **Layout & rhythm** | 14 | §13, §14, §15, §61 + VISUAL-CRAFT §C1 | | **Cards & elevation** | 12 | §7, §8, §12, §1 + VISUAL-CRAFT §C3 | | **States & a11y** | 18 | §11, §70, §71, §72 + VISUAL-CRAFT §C3 | | **Motion & interaction** | 8 | §24, §59 + `engine/motion` | | **Coherence** | 12 | VISUAL-CRAFT §C0 (one choice per axis) | ## How to score each category For each category, start at full marks and **subtract** for violations you find by reading the code. Be specific and evidence-based — cite the line. **Color discipline (20)** — deduct for: any `#000`/`text-black` (−4 each, cap −8); more than one accent hue used decoratively (−5); hardcoded hex where a semantic token exists (−2 each, cap −6); status conveyed by color alone (−4). **Hierarchy & typography (20)** — deduct for: number/unit not ~2:1 (−4); font sizes off the Font Size table / `text-[var(--…)]` for size (−5); everything the same weight, no clear primary (−5); cramped or wrong line-height on body (−3). **Layout & rhythm (15)** — deduct for: content on bare background, not in cards (−6); `px-4`/`px-8`/`mx-4` instead of `px-6`/`mx-6` (−3); same section type repeated in a row (−4); no `space-y-6` rhythm (−3). **Cards & elevation (15)** — deduct for: 1px borders doing separation work that tone+shadow should (−4); shadows over ~8% opacity / visibly heavy (−4); no card/background tone separation (−5). **States & a11y (20)** — deduct for: missing empty/loading/error state on a data surface (−5 each, cap −10); contrast below 4.5:1 body / 3:1 large (−6); touch target < 44px (−4); no visible focus / `outline:none` (−5); icon-only control without `aria-label` (−3). **Motion & interaction (8)** — deduct for: random/ad-hoc fades instead of a named seed/keyword (−3); motion that delays content or blocks an action (−4); no `prefers-reduced-motion` handling on custom motion (−3); scroll-linked/parallax (forbidden, §59) (−5). **Coherence (12)** — the "one choice per axis" laws (VISUAL-CRAFT §C0). Deduct for each axis that is *mixed* rather than unified across the file: mixed radius personalities, e.g. sharp panel + pill buttons (−5); two+ competing accent hues used for emphasis (−4); mixed shadow languages / light directions (−3); mixed icon families, fill modes, or stroke weights (−3); same radius on a nested element instead of `inner = outer − padding` (−2); inconsistent control heights for buttons/inputs (−2). This is the category that most predicts "looks AI-generated" — weight evidence of system-wide consistency, not per-component prettiness. Clamp each category at 0. Sum to a total. ## Output format ``` ## Design Score: 70 / 100 (src/app/Dashboard.tsx) ████████████████░░░░░░ C- Color discipline 13/18 ▓▓▓░ #000 headings (l.12,40); orange+blue+green accents (l.28-34) Hierarchy & typography 15/18 ▓▓▓▓ number/unit 1:1 on hero (l.18) Layout & rhythm 11/14 ▓▓▓░ two identical KPI rows (l.22-31) Cards & elevation 8/12 ▓▓░░ 1px borders doing separation (l.22) States & a11y 11/18 ▓▓░░ no empty/loading state; focus ring missing (l.55) Motion & interaction 6/8 ▓▓▓░ default fade, not a named seed Coherence 6/12 ▓▓░░ sharp cards (l.22) + pill buttons (l.48); 3 accent hues (§C0) ### Fix first (highest score gain) 1. Add empty + loading states to the orders list → +7 states (§71) 2. Unify radius (pick soft 8-12px) + collapse to one accent → +9 coherence+color (§C0, §2) 3. Drop the 1px borders, use tone + ≤8% shadow → +4 cards (§7) Re-score after: ~92 / 100. ``` Use letter bands: 90+ A · 80-89 B · 70-79 C · 60-69 D · <60 F. ## Rules - **Read the file** — score from real evidence (line numbers), never guess. - Order the "fix first" list by **score gain**, not by severity alone — the goal is the fastest path to a better number. - For a directory, print a one-line score per file, then the lowest-scoring file's full breakdown. - Don't auto-edit. `/ss-score` measures; `/ss-review` and `/ss-motion` fix. - The score is a guide, not a gate — a 78 that ships beats a 95 that doesn't.
Audit a component or page for accessibility issues and fix them
Audit screens for UX issues using Nielsen's heuristics and modern mobile UX best practices
Generate a new UI component following the StyleSeed design conventions
Generate UX microcopy (button labels, error messages, empty states, toasts) following a casual-but-polite voice and tone
Add appropriate user feedback states (loading, success, error, empty) to a component or page
Design user flows and navigation structure following proven UX patterns
Quick automated lint — detects common design system violations in seconds
Apply a named StyleSeed motion to a component — either one of the 5 personality seeds (Spring/Silk/Snap/Float/Pulse × entrance/exit/hover/press/layout) or a distinctive keyword move from the motion library (toggle-flip, toggle-curtain, reveal-blur, pop-in, shimmer, …). Translates vibe words into framer-motion code from one source of truth.