Skillshub web-design-guidelines
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", "check my site against best practices", or "web interface guidelines".
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/CloudAI-X/claude-workflow-v2/web-design-guidelines" ~/.claude/skills/comeonoliver-skillshub-web-design-guidelines && rm -rf "$T"
manifest:
skills/CloudAI-X/claude-workflow-v2/web-design-guidelines/SKILL.mdsource content
Web Interface Guidelines
When to Load
- Trigger: UI audit, accessibility checks, responsive design review, UX best practices evaluation
- Skip: Backend-only work with no UI components
Self-contained guidelines for reviewing web interfaces. Apply these rules when auditing UI code.
Output Format
Report findings as:
file:line — [RULE_ID] description
Example:
src/Button.tsx:12 — [A11Y-01] Missing aria-label on icon button
1. Accessibility (A11Y)
A11Y-01: Semantic HTML
- Use
for actions,<button>
for navigation,<a>
for data entry<input> - Never use
or<div onClick>
for interactive elements<span onClick> - Use
,<nav>
,<main>
,<aside>
,<header>
for landmarks<footer>
A11Y-02: ARIA Labels
- All interactive elements need accessible names
- Icon-only buttons MUST have
aria-label - Form inputs MUST have associated
or<label>aria-label - Images need
text (decorative images:alt
)alt=""
A11Y-03: Keyboard Navigation
- All interactive elements must be reachable via Tab
- Custom components need proper
,role
, and key handlerstabIndex - Focus must be visible (never
without replacement)outline: none - Modal/dialog must trap focus and return focus on close
A11Y-04: Color & Contrast
- Text contrast ratio: 4.5:1 minimum (3:1 for large text)
- Never use color alone to convey meaning (add icons, text, patterns)
- Ensure UI is usable at 200% zoom
A11Y-05: Screen Readers
- Dynamic content changes need
regionsaria-live - Loading states need
aria-busy="true" - Error messages linked to inputs via
aria-describedby
2. Performance (PERF)
PERF-01: Image Optimization
- Use
or responsive images withnext/imagesrcset - Specify
andwidth
to prevent layout shiftheight - Lazy load below-fold images:
loading="lazy" - Use WebP/AVIF with fallback
PERF-02: Bundle Size
- No full library imports:
notimport { Button } from 'lib'import lib - Tree-shake CSS: use CSS modules or Tailwind purge
- Lazy load routes and heavy components:
or dynamic importsReact.lazy()
PERF-03: Rendering
- Avoid layout thrashing: don't read then write DOM in loops
- Use
sparingly (only for known animations)will-change - Prefer CSS animations over JS animations
- Use
andtransform
for 60fps animations (compositor-only)opacity
PERF-04: Core Web Vitals
- LCP < 2.5s: Optimize largest image/text, preload critical resources
- FID/INP < 200ms: No long tasks on main thread, defer non-critical JS
- CLS < 0.1: Set dimensions on images/embeds, no injected content above fold
3. Responsive Design (RD)
RD-01: Mobile First
- Base styles for mobile, then
for larger screens@media (min-width) - Touch targets minimum 44x44px
- No horizontal scroll on any viewport
RD-02: Fluid Layout
- Use
/rem
for typography, notempx - Use
for fluid typography:clamp()font-size: clamp(1rem, 2.5vw, 2rem) - Flex/Grid over fixed widths
- Max content width:
for readabilitymax-width: 65ch
RD-03: Breakpoints
- Don't target devices, target content breakpoints
- Common: 640px (sm), 768px (md), 1024px (lg), 1280px (xl)
- Test at 320px, 375px, 768px, 1024px, 1440px, 1920px
4. Component Patterns (CP)
CP-01: Forms
- Show validation errors inline, next to the field
- Use
,type="email"
,type="tel"
for mobile keyboardsinputmode="numeric" - Disable submit button during submission (prevent double-submit)
- Preserve form state on error (don't clear fields)
CP-02: Loading States
- Show skeleton screens over spinners for content areas
- Indicate progress for long operations (progress bar > spinner)
- Disable interactive elements during loading
- Set
on loading containersaria-busy="true"
CP-03: Error States
- Always show actionable error messages ("Try again" button, not just "Error")
- Don't show technical errors to users (log internally, show friendly message)
- Error boundaries for React component trees
- Retry logic for network failures
CP-04: Empty States
- Never show blank pages — provide helpful empty states
- Include call-to-action: "No items yet. Create your first item."
- Use illustrations sparingly (they add bundle weight)
CP-05: Modals & Dialogs
- Use
element or proper<dialog>role="dialog" - Trap focus within modal
- Close on Escape key and backdrop click
- Return focus to trigger element on close
- Prevent body scroll while open
5. CSS Practices (CSS)
CSS-01: Specificity
- Prefer class selectors over ID or element selectors
- Avoid
(use specificity or cascade layers)!important - Use CSS custom properties for theming
- One direction for spacing: prefer
overmargin-bottommargin-top
CSS-02: Layout
- Use Flexbox for 1D layout, Grid for 2D layout
- Avoid
for layout (use for overlays only)position: absolute - Use
over margins between flex/grid childrengap - Use
(notmin-height: 100dvh
) for full-height layouts100vh
CSS-03: Dark Mode
- Use
media queryprefers-color-scheme - Define all colors as CSS custom properties
- Test both modes — check contrast in both
- Don't just invert colors — design intentionally for dark mode
6. Security (SEC)
SEC-01: Content Security
- Never use
without sanitizationdangerouslySetInnerHTML - Sanitize user-generated content before rendering
- Use
on external links withrel="noopener noreferrer"target="_blank"
SEC-02: Forms & Input
- CSRF protection on all forms
- Rate limit form submissions
- Validate on both client AND server
7. Internationalization (I18N)
I18N-01: Text
- Don't hardcode strings — use i18n library or constants
- Support RTL layouts: use
(logical properties
overmargin-inline-start
)margin-left - Don't truncate text — designs must accommodate 40% text expansion
- Use
attribute onlang
tag<html>
Review Checklist
When auditing a file, check in this order (CRITICAL first):
- CRITICAL: A11Y-01, A11Y-02, SEC-01 — Semantic HTML, ARIA, XSS prevention
- HIGH: PERF-04, A11Y-03, CP-01 — Core Web Vitals, keyboard, forms
- MEDIUM: RD-01, CSS-02, CP-02, CP-03 — Responsive, layout, loading/errors
- LOW: CSS-03, I18N-01, CP-04 — Dark mode, i18n, empty states