Loading...
Loading...
[Frontend] Review UI code for web interface design compliance covering WCAG 2.2/3.0 accessibility, responsive design, performance, usability, and modern best practices. Use when asked to 'review my UI', 'check accessibility', 'audit design', 'review UX', 'check responsive design', or 'check my site against best practices'. Actions: review, check, audit, analyze, validate. Topics: accessibility, WCAG, ARIA, semantic HTML, focus states, forms, animation, typography, content handling, images, performance, Core Web Vitals, navigation, touch interaction, responsive design, mobile-first, dark mode, internationalization, hydration.
npx skill4agent add duc01226/easyplatform web-design-guidelines| Step | Action | Key Notes |
|---|---|---|
| 1 | Read specified files | Or prompt user for files/pattern |
| 2 | Check against all rules | Accessibility, responsive, performance, usability |
| 3 | Output findings | Terse |
| 4 | Skip explanations | Unless fix is non-obvious |
file:line"If you can use a native HTML element with built-in semantics, use it instead of ARIA."
<button><a><Link><div onClick><span onClick><header><main><nav><footer><aside><section><article><h1><h6><label>forhtmlFor<table><ul><ol><a href="#main">Skip to content</a>"No ARIA is better than bad ARIA" – Sites with ARIA average 41% more errors than those without.
aria-label<button aria-label="Close">aria-hidden="true"aria-live="polite"assertivearia-expanded="false"aria-expanded="true"aria-hidden="true"aria-invalid="true"aria-required="true"required<img>altalt=""altaria-describedbyoutline: noneoutline-none:focus-visible:focusfocus-visible:ring-*:focus-withinonKeyDownonKeyUptabindextabindex="-1"tabindex="0"<label>forhtmlForid<label><fieldset><legend>typeemailtelurlnumberpasswordsearchdateinputmodenumerictelemailurldecimalnameautocompletenameemailtelstreet-addresspostal-codecc-numberautocomplete="off"spellCheckspellCheck={false}onPastepreventDefault()aria-invalid="true"aria-describedbybeforeunload"Search…""e.g., john@example.com"@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}prefers-reduced-motiontransformopacitywidthheighttopleftmarginpaddingfont-sizetransition: alltransition: transform 200ms, opacity 200mstransform-origin<g>transform-box: fill-box; transform-origin: centerremem%px<html>line-height: 1.5line-height: 1.2-1.35max-width: 65ch…...""''"'10 MB⌘ K"Loading…""Saving…"font-variant-numeric: tabular-numstext-wrap: balancetext-wrap: prettyfont-display: swap<link rel="preload" as="font" crossorigin>truncatetext-overflow: ellipsisline-clamp-*-webkit-line-clampbreak-wordsword-break: break-wordmin-w-0min-width: 0&<img>widthheightaspect-ratioloading="lazy"fetchpriority="high"prioritydecoding="async"srcsetsizes<link rel="preload"><link rel="preconnect">scroll-margin-topgetBoundingClientRectoffsetHeightoffsetWidthscrollTopvirtuareact-window@tanstack/virtualcontent-visibility: autouseStatenuqsnext-usequerystate<a><Link><button>touch-action: manipulation-webkit-tap-highlight-coloroverscroll-behavior: containuser-select: noneinertautoFocusautoFocusenv(safe-area-inset-*)padding-bottom: env(safe-area-inset-bottom)overflow-x: hiddenclamp()color-scheme: dark<html><meta name="theme-color"><select>background-colorcolorprefers-color-schemeIntl.DateTimeFormatIntl.NumberFormatIntl.RelativeTimeFormatAccept-Languagenavigator.languagesmargin-inline-startmargin-leftdir="rtl"<html>valueonChangedefaultValuesuppressHydrationWarningwindowlocalStoragehover:disabledcursor: not-allowedaria-disabled="true"| Pattern | Issue |
|---|---|
| Disables zoom — accessibility violation |
| Blocks paste — UX hostile |
| Performance issue — list properties |
| Removes focus indicator — accessibility violation |
| Should be |
| Causes layout shift (CLS) |
| Missing alt text — accessibility violation |
Form inputs without | Missing label — accessibility violation |
Icon buttons without | Screen reader can't identify action |
| Hardcoded date/number formats | Should use |
| May cause issues on mobile |
Large arrays with | Performance issue for 50+ items |
| Disrupts natural tab order |
| Color-only indicators | Fails colorblind users |
| Placeholder as label | Label disappears on input |
file:line## src/components/Button.tsx
src/components/Button.tsx:42 - icon button missing aria-label
src/components/Button.tsx:18 - input lacks associated label
src/components/Button.tsx:55 - animation missing prefers-reduced-motion check
src/components/Button.tsx:67 - transition: all → list specific properties
src/components/Button.tsx:89 - div with onClick → use <button>
## src/components/Modal.tsx
src/components/Modal.tsx:12 - missing overscroll-behavior: contain
src/components/Modal.tsx:34 - "..." → use "…" (proper ellipsis)
src/components/Modal.tsx:78 - no focus trap for modal dialog
## src/components/Card.tsx
✓ No issues found
## Summary
- 8 accessibility issues
- 3 performance issues
- 2 UX issues
- Priority: Fix accessibility issues first (WCAG compliance)