From skillry-frontend-web-design
Use when you need to audit UI consistency, spacing, color, typography, states, accessibility basics, and responsive behavior.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skillry-frontend-web-design:17-ui-consistency-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit UI consistency across spacing, color, typography, interactive states, accessibility basics, and responsive behavior — with every finding anchored to the project's own design tokens and component system rather than personal taste. The output is a minimal-diff punch list: each issue names the offending file and line, the bad value, and the exact token or utility class that should replace it...
Audit UI consistency across spacing, color, typography, interactive states, accessibility basics, and responsive behavior — with every finding anchored to the project's own design tokens and component system rather than personal taste. The output is a minimal-diff punch list: each issue names the offending file and line, the bad value, and the exact token or utility class that should replace it, so a developer can fix it without a second round of clarification. The review is static and visual only; it never refactors component APIs or invents a new design language.
web-design-review or responsive-layout-review first, then run consistency.design-system-review for token architecture and duplicate primitives, accessibility-audit for a full WCAG pass, visual-polish-pass for final pixel finish.tailwind.config.{js,ts}, CSS custom properties in :root, a tokens.json, or a theme provider. Record the scale base (4px or 8px), the named color roles, and the bounded type steps. Review against this source of truth, not personal taste.style={{ }} overrides and arbitrary Tailwind values such as p-[13px] or gap-[7px]. Check that related elements (a label and its field) sit tighter than unrelated sections, and that gutters in a grid are uniform.#3b82f6 that equals colors.primary is a violation. Verify text contrast meets WCAG 2.1 AA: 4.5:1 for body text and 3:1 for large text (>=24px regular or >=18.66px bold), plus 3:1 for UI component boundaries and focus indicators.font-size values off the scale, mixed font-weight at the same hierarchy level, and inconsistent line-height between similar text blocks.:hover, :focus-visible, :active, and :disabled. Data-bound surfaces additionally need loading, empty, and error states. A button with hover but no disabled or focus-visible state is incomplete.alt; form inputs need an associated <label> or aria-label; clickable behavior belongs on <button>/<a>, not <div onClick>. Decorative icons need aria-hidden="true".outline: none) over isolated nits.Spacing and layout:
p-[13px] or mt-[22px].style={{ }} overrides that hardcode spacing outside the scale.Color and contrast:
Typography:
font-weight at the same hierarchy level without a documented reason.line-height is consistent within body text and within headings.States and accessibility:
:hover, :focus-visible, :active, and :disabled.<img> has alt; inputs have a <label> or aria-label; clickable behavior is on <button>/<a>.# --- color tokens ---
# hardcoded hex/rgb in components (should be tokens)
rg -n '#[0-9a-fA-F]{3,8}\b|rgba?\(' src/components src/app 2>/dev/null
# raw Tailwind color utilities used in place of semantic tokens
rg -n 'bg-(red|blue|green|gray|slate|zinc)-[0-9]{3}|text-(gray|slate)-[0-9]{3}' src
# rank the most-used literal colors (near-duplicate detection)
rg -oN '#[0-9a-fA-F]{6}' src | sort | uniq -c | sort -rn | head -20
# --- spacing ---
# arbitrary Tailwind spacing values off the scale
rg -n '\b[pm][trblxy]?-\[[0-9]+px\]|gap-\[[0-9]+px\]' src
# inline style overrides that bypass the system
rg -n 'style=\{\{' src
# --- typography ---
# count distinct font sizes (drift signal — expect <= ~6)
rg -oN 'text-(xs|sm|base|lg|xl|2xl|3xl|4xl|5xl)|font-size:\s*[0-9.]+(px|rem)' src | sort -u | wc -l
# distinct font-weights in use (expect a small, intentional set)
rg -oN 'font-(thin|light|normal|medium|semibold|bold|extrabold)|font-weight:\s*[0-9]+' src | sort | uniq -c
# --- states ---
# interactive elements vs how many declare hover/focus-visible
rg -c 'hover:|focus-visible:' src
rg -n '<button|<a |role="button"' src | wc -l
# focus removed without a focus-visible replacement (keyboard blocker)
rg -n 'outline:\s*none|outline-none' src | rg -v 'focus-visible'
# --- accessibility ---
# clickable divs that should be buttons
rg -n '<div[^>]*onClick' src
# images missing alt (quick a11y sweep)
rg -n '<img(?![^>]*\balt=)' src
# --- radius / shadow drift ---
# distinct border-radius values in use (expect <= 3)
rg -oN 'rounded-(sm|md|lg|xl|2xl|full|none)|border-radius:\s*[0-9.]+(px|rem)' src | sort | uniq -c
# distinct shadow utilities (elevation should be a small, ordered set)
rg -oN 'shadow-(sm|md|lg|xl|2xl|none|inner)' src | sort | uniq -c
# --- responsive / theme ---
# fixed pixel widths that may overflow on small screens
rg -n 'w-\[[0-9]{3,}px\]|width:\s*[0-9]{3,}px' src
# inputs with sub-16px font that trigger mobile auto-zoom
rg -n 'text-(xs|sm)\b' src/components | rg -i 'input|select|textarea'
# theme coverage: is dark mode a token swap or duplicated CSS?
rg -n 'dark:|prefers-color-scheme|data-theme' src | head
colors.primary exists in the config but components write bg-blue-600 directly, so a palette change silently misses them.cursor: pointer and an onClick but no visible hover or focus change — the affordance signal is absent.outline: none applied globally with no :focus-visible replacement, leaving keyboard users with no visible focus position.<h3> are font-semibold (600), others font-medium (500), with no rule, so the hierarchy reads inconsistently.cursor: not-allowed, so users click it repeatedly.padding: 22px instead of the scale's 24px, repeated with small variations across components until the grid feels chaotic.#6b7280 in one component and #64748b in another for the same muted text — visually similar, technically inconsistent, and impossible to theme.rounded-sm, cards at rounded-md, modals at rounded-xl, and pills at rounded-full with no documented hierarchy, so the product reads as assembled from unrelated kits.Return a structured report with:
severity | component/file:line | issue | recommended token/value.Lead with systemic issues (a missing token, a repeated bad pattern, a global outline: none) over one-off nits.
Done means spacing, color, typography, interactive states, responsive behavior, and accessibility basics were each checked against the project's own system; every finding carries a severity and a concrete token/value fix with file:line; systemic issues are prioritized over isolated nits; accessibility blockers are called out separately from cosmetic drift; and the report ends with the three highest-leverage changes.
npx claudepluginhub fluxonlab/skillry --plugin skillry-frontend-web-designCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.