Third-party skill — reviews UI code for Vercel Web Interface Guidelines compliance (accessibility, focus, forms, animation, performance, copy). Use when auditing interfaces, reviewing UI PRs, or when the user mentions Vercel guidelines, web interface guidelines, or /thirdparty-web-interface-guidelines.
Installation
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Third-party skill — reviews UI code for Vercel Web Interface Guidelines compliance (accessibility, focus, forms, animation, performance, copy). Use when auditing interfaces, reviewing UI PRs, or when the user mentions Vercel guidelines, web interface guidelines, or /thirdparty-web-interface-guidelines.
Review target files for compliance. Read files, check against rules below. Output concise but comprehensive—sacrifice grammar for brevity. High signal-to-noise.
When the user provides specific files or patterns, review those. Otherwise ask which files to review.
Rules
Accessibility
Icon-only buttons need aria-label
Form controls need <label> or aria-label
Interactive elements need keyboard handlers (onKeyDown/onKeyUp)
<button> for actions, <a>/<Link> for navigation (not <div onClick>)
Images need alt (or alt="" if decorative)
Decorative icons need aria-hidden="true"
Async updates (toasts, validation) need aria-live="polite"
Use semantic HTML (<button>, <a>, <label>, <table>) before ARIA
Headings hierarchical <h1>–<h6>; include skip link for main content
scroll-margin-top on heading anchors
Focus States
Interactive elements need visible focus: focus-visible:ring-* or equivalent
Never outline-none / outline: none without focus replacement
Use :focus-visible over :focus (avoid focus ring on click)
Group focus with :focus-within for compound controls
Forms
Inputs need autocomplete and meaningful name
Use correct type (email, tel, url, number) and inputmode
Never block paste (onPaste + preventDefault)
Labels clickable (htmlFor or wrapping control)
Disable spellcheck on emails, codes, usernames (spellCheck={false})
Checkboxes/radios: label + control share single hit target (no dead zones)
Submit button stays enabled until request starts; spinner during request
Errors inline next to fields; focus first error on submit
Placeholders end with … and show example pattern
autocomplete="off" on non-auth fields to avoid password manager triggers
Warn before navigation with unsaved changes (beforeunload or router guard)
Animation
Honor prefers-reduced-motion (provide reduced variant or disable)
Animate transform/opacity only (compositor-friendly)
Never transition: all—list properties explicitly
Set correct transform-origin
SVG: transforms on <g> wrapper with transform-box: fill-box; transform-origin: center
Animations interruptible—respond to user input mid-animation