agent-skills/_shared-skills/my-frontend-design/SKILL.md
Build and review frontend with accessibility, design constraints, and Vercel guidelines
npx skillsauth add nathankoerschner/dotfiles my-frontend-designInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A comprehensive frontend skill that combines accessibility review, opinionated UI constraints, and Vercel Web Interface Guidelines compliance.
$ARGUMENTS provided): Review specified files against all guidelines| Check | WCAG | What to look for |
|-------|------|------------------|
| Images without alt | 1.1.1 | <img> without alt attribute |
| Icon-only buttons | 4.1.2 | <button> with only SVG/icon, no aria-label |
| Form inputs without labels | 1.3.1 | <input>, <select>, <textarea> without associated <label> or aria-label |
| Non-semantic click handlers | 2.1.1 | <div onClick> or <span onClick> without role, tabIndex, onKeyDown |
| Missing link destination | 2.1.1 | <a> without href using only onClick |
| Check | WCAG | What to look for |
|-------|------|------------------|
| Focus outline removed | 2.4.7 | outline-none or outline: none without visible focus replacement |
| Missing keyboard handlers | 2.1.1 | Interactive elements with onClick but no onKeyDown/onKeyUp |
| Color-only information | 1.4.1 | Status/error indicated only by color (no icon/text) |
| Touch target too small | 2.5.5 | Clickable elements smaller than 44x44px |
| Check | WCAG | What to look for |
|-------|------|------------------|
| Heading hierarchy | 1.3.1 | Skipped heading levels (h1 -> h3) |
| Positive tabIndex | 2.4.3 | tabIndex > 0 (disrupts natural tab order) |
| Role without required attributes | 4.1.2 | role="button" without tabIndex="0" |
motion/react (formerly framer-motion) when JavaScript animation is requiredtw-animate-css for entrance and micro-animations in Tailwind CSScn utility (clsx + tailwind-merge) for class logicBase UI, React Aria, Radix)Base UI for new primitives if compatible with the stackaria-label to icon-only buttonsAlertDialog for destructive or irreversible actionsh-screen, use h-dvhsafe-area-inset for fixed elementsinput or textarea elementstransform, opacity)width, height, top, left, margin, padding)background, color) except for small, local UI (text, icons)ease-out on entrance200ms for interaction feedbackprefers-reduced-motiontext-balance for headings and text-pretty for body/paragraphstabular-nums for datatruncate or line-clamp for dense UIletter-spacing (tracking-*) unless explicitly requestedz-index scale (no arbitrary z-*)size-* for square elements instead of w-* + h-*blur() or backdrop-filter surfaceswill-change outside an active animationuseEffect for anything that can be expressed as render logicaria-label<label> or aria-labelonKeyDown/onKeyUp)<button> for actions, <a>/<Link> for navigation (not <div onClick>)alt (or alt="" if decorative)aria-hidden="true"aria-live="polite"<button>, <a>, <label>, <table>) before ARIA<h1>-<h6>; include skip link for main contentscroll-margin-top on heading anchorsfocus-visible:ring-* or equivalentoutline-none / outline: none without focus replacement:focus-visible over :focus (avoid focus ring on click):focus-within for compound controlsautocomplete and meaningful nametype (email, tel, url, number) and inputmodeonPaste + preventDefault)htmlFor or wrapping control)spellCheck={false})... and show example patternautocomplete="off" on non-auth fields to avoid password manager triggersbeforeunload or router guard)prefers-reduced-motion (provide reduced variant or disable)transform/opacity only (compositor-friendly)transition: all-list properties explicitlytransform-origin<g> wrapper with transform-box: fill-box; transform-origin: center... not ..." " not straight "10 MB, Cmd K, brand names...: "Loading...", "Saving..."font-variant-numeric: tabular-nums for number columns/comparisonstext-wrap: balance or text-pretty on headings (prevents widows)truncate, line-clamp-*, or break-wordsmin-w-0 to allow text truncation<img> needs explicit width and height (prevents CLS)loading="lazy"priority or fetchpriority="high"virtua, content-visibility: auto)getBoundingClientRect, offsetHeight, offsetWidth, scrollTop)<link rel="preconnect"> for CDN/asset domains<link rel="preload" as="font"> with font-display: swap<a>/<Link> (Cmd/Ctrl+click, middle-click support)useState, consider URL sync via nuqs or similar)touch-action: manipulation (prevents double-tap zoom delay)-webkit-tap-highlight-color set intentionallyoverscroll-behavior: contain in modals/drawers/sheetsinert on dragged elementsautoFocus sparingly-desktop only, single primary input; avoid on mobileenv(safe-area-inset-*) for notchesoverflow-x-hidden on containers, fix content overflowcolor-scheme: dark on <html> for dark themes (fixes scrollbar, inputs)<meta name="theme-color"> matches page background<select>: explicit background-color and color (Windows dark mode)Intl.DateTimeFormat not hardcoded formatsIntl.NumberFormat not hardcoded formatsAccept-Language / navigator.languages, not IPvalue need onChange (or use defaultValue for uncontrolled)suppressHydrationWarning only where truly neededhover: state (visual feedback)& over "and" where space-constraineduser-scalable=no or maximum-scale=1 disabling zoomonPaste with preventDefaulttransition: alloutline-none without focus-visible replacementonClick navigation without <a><div> or <span> with click handlers (should be <button>).map() without virtualizationaria-labelIntl.*)autoFocus without clear justificationWhen reviewing files, output:
=====================================
MY FRONTEND DESIGN REVIEW: [filename]
=====================================
CRITICAL (X issues)
-------------------
[A11Y] Line 24: Button missing accessible name
<button><CloseIcon /></button>
Fix: Add aria-label="Close"
WCAG: 4.1.2
[UI-SKILL] Line 42: Using h-screen
Fix: Replace with h-dvh
SERIOUS (X issues)
------------------
[WIG] Line 55: transition: all
Fix: List properties explicitly
=====================================
SUMMARY: X critical, X serious, X moderate
Score: XX/100
=====================================
development
Deep, rigorous multi-model code review for PRs, branches, diffs, commits, or pre-merge checks. Use this when the user explicitly asks for a deep review, thorough review, rigorous review, pre-merge check, PR review, branch review, or wants maximum confidence. Do not use for quick/casual reviews; use quick-review instead. Treat AI output as a first draft: run independent Pi subagents on Claude Opus, GPT-5.5 extra-high reasoning, and Gemini; validate and synthesize severity-ranked findings before fixes.
development
Review UI code for Vercel Web Interface Guidelines compliance
development
Opinionated constraints for building better interfaces with agents.
databases
Connect to Snowflake via SnowSQL