web-design-guidelines
Skill14 starsChanged 37 days agoMITView on GitHub
UI code review against Vercel's Web Interface Guidelines (100+ accessibility/performance/UX rules). Use for UI, a11y, or UX reviews of frontend code — not for backend or API design.
176 other projects use a version of this.
Adopted by
Most recently taken up by
- yuiseki/GeoAI-master-skillstheir own version, first seen Nov 8, 2026
- open-slide/open-slidetheir own version, first seen Nov 8, 2026
- arch3rPro/Skills-Spacetheir own version, first seen Nov 8, 2026
- alunadev/ald-skillstheir own version, first seen Nov 8, 2026
- Contentrain/studiotheir own version, first seen Nov 8, 2026
- eea/eea.agent.skillstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use canvas-procedural-animation, intelligent-routing and 9 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
LinHao-citySkillcanvas-procedural-animation
Use p5.js/canvas for local procedural character effects: particles, weather, squash/stretch, walk cycles, and environmental motion.
Also in 5 projects that use this
SKB3002Skillintelligent-routing
Automatic agent selection and intelligent task routing. Analyzes user requests and automatically selects the best specialist agent(s) without requiring explicit user mentions.
Also in 5 projects that use this
VercelSkillvercel-optimize
Use for Vercel cost and performance optimization on deployed projects, especially Next.js, SvelteKit, Nuxt, and limited Astro apps. Collect Vercel metrics, usage, project config, and code scan results first; investigate only metric-backed candidates; produce ranked recommendations grounded in verified files and version-aware Vercel/framework docs. Trigger for Vercel bill reduction, slow or expensive routes, caching opportunities, Function Invocations, Build Minutes, Fast Data Transfer, Core Web Vitals, Bot Management, Fluid compute, or cost breakdown requests.
Also in 15 projects that use this
thongdn-itSkillnuqs
nuqs (type-safe URL query state) best practices for Next.js applications. This skill should be used when writing, reviewing, or refactoring code that uses nuqs for URL state management. Triggers on tasks involving useQueryState, useQueryStates, search params, URL state, query parameters, nuqs parsers, or Next.js routing with state.
Also in 4 projects that use this
LinHao-citySkillpose-library-design
Design reusable 2D character pose libraries, action cycles, and expression states for data-driven animation.
Also in 4 projects that use this
stophobiaSkillsurprise-me
Create a delightful, unexpected "wow" experience for the user by dynamically discovering and creatively combining other enabled skills. Triggers when the user says "surprise me" or any request expressing a desire for an unexpected creative showcase. Also triggers when the user is bored, wants inspiration, or asks for "something interesting".
Also in 4 projects that use this
- +2 more from LinHao-city
Other versions176 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 176
- bytedance/deer-flow★ 85ksame name
- calesthio/OpenMontage★ 78ksame name
- OpenMontageInc/OpenMontage★ 78ksame name
- multica-ai/multica★ 55ksame name
- moeru-ai/airi★ 51ksame name
- vercel-labs/agent-skills★ 33ksame name
- awesome-dsh-plugin/awesome-dsh-plugin★ 24ksame name
- open-metadata/OpenMetadata★ 16ksame name
- trycompai/crm★ 12ksame name
- mengxi-ream/read-frog★ 10ksame name
166 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository44 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- adaptSkill
- animateSkill
- auditSkill
- bolderSkill
- brainstormSkill
- build-fixSkill
- business-panelSkill
- checkpointSkill
- clarifySkill
- colorizeSkill
- composition-patternsSkill
- confidence-checkSkill
- config-doctorSkill
- critiqueSkill
- delightSkill
- design-auditSkill
- devils-advocateSkill
- distillSkill
- eval-harnessSkill
- feature-plannerSkill
- fix-prSkill
- frontend-designSkill
- gap-analysisSkill
- grill-with-docsSkill
- hardenSkill
- impeccableSkill
- layoutSkill
- learnSkill
- optimizeSkill
- overdriveSkill
- polishSkill
- pytest-runnerSkill
- python-best-practicesSkill
- quieterSkill
- react-best-practicesSkill
- sc-helpSkill
- security-auditSkill
- shapeSkill
- tddSkill
- typesetSkill
- ui-ux-pro-maxSkill
- uv-packageSkill
- verifySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 6 are distinctive, and 14 are very specific to this project.
0
Common
Most of the 173 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
14
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 29
Do NOT use for: backend code, API design, database
- Very specific: line 46
Use <button> for actions, <a>/<Link> for navigation (no <div onClick>)
- Very specific: line 50
Prefer semantic HTML over ARIA (<button>, <a>, <label>, <table>)
- Very specific: line 58
Use :focus-visible over :focus (prevents focus ring on click)
- Very specific: line 59
Use :focus-within on compound controls for group focus
- Very specific: line 64
Use correct type (email, tel, url, number) and inputmode
- Very specific: line 65
Never block paste (onPaste + preventDefault)
- Very specific: line 72
Use autocomplete="off" on non-auth fields (prevent password manager trigger)
- Very specific: line 86
Use … instead of ...
- Very specific: line 87
Use curly quotes " " instead of straight "
- Very specific: line 109
Never read layout in render (getBoundingClientRect, offsetHeight, etc.)
- Distinctive: line 111
Prefer uncontrolled inputs.
- Very specific: line 112
Add <link rel="preconnect"> for CDN/asset domains
- Very specific: line 128
Use autoFocus carefully—desktop only, single primary input.
- Distinctive: line 134
Prefer flex/grid over JS measurement
- Very specific: line 152
Use suppressHydrationWarning only where truly needed
- Distinctive: line 166
Use second person; avoid first person
- Very specific: line 167
Use & over "and" when space-constrained
- Distinctive: line 203
Every section follows identical padding/spacing rhythm with no visual hierarchy
- Distinctive: line 206
No brand-specific design tokens — all values are framework defaults
“Common” is measured: kept by at least 6 in 10 of the 173 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Web Interface Guidelines
Review UI code according to Vercel Web Interface Guidelines.
When to Use
Use proactively when:
- UI code review requested
- Accessibility (a11y) check requested
- Design audit requested
- UX review requested
- Best practices check requested
Triggers: review UI, check accessibility, audit design, review UX, check best practices, UI review, accessibility check, design review, UX review, web guidelines, a11y check
Do NOT use for: backend code, API design, database
Usage
/web-design-guidelines src/components/Button.tsx
/web-design-guidelines "src/**/*.tsx"
/web-design-guidelines # prompt for fileReview Rules
Accessibility
- Icon-only buttons require
aria-label - Form controls require
<label>oraria-label - Interactive elements require keyboard handlers (
onKeyDown/onKeyUp) - Use
<button>for actions,<a>/<Link>for navigation (no<div onClick>) - Images require
alt(usealt=""for decorative) - Decorative icons require
aria-hidden="true" - Async updates (toasts, validation) require
aria-live="polite" - Prefer semantic HTML over ARIA (
<button>,<a>,<label>,<table>) - Maintain heading hierarchy
<h1>–<h6>; include skip link to main content - Anchor headings require
scroll-margin-top
Focus States
- Interactive elements require visible focus:
focus-visible:ring-*or equivalent - Using
outline-none/outline: nonerequires alternative focus indicator - Use
:focus-visibleover:focus(prevents focus ring on click) - Use
:focus-withinon compound controls for group focus
Forms
- Inputs require
autocompleteand meaningfulname - Use correct
type(email,tel,url,number) andinputmode - Never block paste (
onPaste+preventDefault) - Labels must be clickable (
htmlForor wrap control) - Disable spellcheck for email, code, username (
spellCheck={false}) - Checkbox/Radio: label + control = single hit target (no dead zone)
- Submit button active until request starts; show spinner during request
- Errors shown inline next to field; focus first error on submit
- Placeholders end with
…and show example pattern - Use
autocomplete="off"on non-auth fields (prevent password manager trigger) - Warn on navigation with unsaved changes (
beforeunloador router guard)
Animation
- Respect
prefers-reduced-motion(provide reduced version or disable) - Animate only
transform/opacity(compositor-friendly) - Forbid
transition: all—list properties explicitly - Set correct
transform-origin - SVG: transforms on
<g>wrapper,transform-box: fill-box; transform-origin: center - Animations must be interruptible—respond to user input during animation
Typography
- Use
…instead of... - Use curly quotes
""instead of straight" - Non-breaking spaces:
10 MB,⌘ K, brand names - Loading states end with
…:"Loading…","Saving…" - Numeric columns/comparisons:
font-variant-numeric: tabular-nums - Headings:
text-wrap: balanceortext-pretty(prevent widows)
Content Handling
- Text containers handle long content:
truncate,line-clamp-*, orbreak-words - Flex children need
min-w-0(allow text truncation) - Handle empty states—no broken UI for empty strings/arrays
- User-generated content: expect short, average, very long inputs
Images
<img>requires explicitwidthandheight(prevent CLS)- Below-fold images:
loading="lazy" - Above-fold critical images:
priorityorfetchpriority="high"
Performance
- Large lists (>50 items): virtualize (
virtua,content-visibility: auto) - Never read layout in render (
getBoundingClientRect,offsetHeight, etc.) - Batch DOM reads/writes; avoid interleaving
- Prefer uncontrolled inputs; controlled inputs must be cheap per keystroke
- Add
<link rel="preconnect">for CDN/asset domains - Critical fonts:
<link rel="preload" as="font">withfont-display: swap
Navigation & State
- URL reflects state—filters, tabs, pagination, expanded panels in query params
- Links use
<a>/<Link>(support Cmd/Ctrl+click, middle-click) - Deep-link all state UI (consider nuqs etc. to sync URL when using
useState) - Destructive actions require confirmation modal or undo window—no instant execution
Touch & Interaction
touch-action: manipulation(prevent double-tap zoom delay)- Set
-webkit-tap-highlight-colorintentionally - Modals/drawers/sheets:
overscroll-behavior: contain - During drag: disable text selection,
inerton dragged element - Use
autoFocuscarefully—desktop only, single primary input; avoid on mobile
Safe Areas & Layout
- Full-bleed layouts require
env(safe-area-inset-*)for notch - Prevent unwanted scrollbars:
overflow-x-hiddenon container, fix content overflow - Prefer flex/grid over JS measurement
Dark Mode & Theming
- Dark theme requires
color-scheme: darkon<html>(fixes scrollbar, inputs) <meta name="theme-color">matches page background- Native
<select>: explicitbackground-colorandcolor(Windows dark mode)
Locale & i18n
- Dates/times: use
Intl.DateTimeFormatinstead of hardcoded format - Numbers/currency: use
Intl.NumberFormatinstead of hardcoded format - Language detection:
Accept-Language/navigator.languagesinstead of IP
Hydration Safety
- Input with
valuerequiresonChange(or usedefaultValuefor uncontrolled) - Date/time rendering: prevent hydration mismatch (server vs client)
- Use
suppressHydrationWarningonly where truly needed
Hover & Interactive States
- Buttons/links require
hover:state (visual feedback) - Interactive states increase contrast: hover/active/focus more visible than rest
Content & Copy
- Active voice: "Install the CLI" not "The CLI will be installed"
- Title Case for headings/buttons (Chicago style)
- Numerals for counts: "8 deployments" not "eight"
- Specific button labels: "Save API Key" not "Continue"
- Error messages include fix/next step, not just problem
- Use second person; avoid first person
- Use
&over "and" when space-constrained
Anti-patterns - Must Flag
user-scalable=noormaximum-scale=1(disables zoom)onPastewithpreventDefaulttransition: alloutline-nonewithout focus-visible alternative- Inline
onClicknavigation without<a> <div>or<span>with click handler (must use<button>)- Images without dimensions
- Large array
.map()without virtualization - Form inputs without labels
- Icon buttons without
aria-label - Hardcoded date/number format (must use
Intl.*) autoFocuswithout clear justification
AI Slop Detection - Hard Reject
AI-generated UI that looks generic must be flagged and reworked. These patterns indicate low-effort AI output:
Visual Anti-patterns (flag any occurrence)
- Purple-to-blue gradient as primary accent with no brand justification
- 3-column icon grid layout (icon + heading + paragraph x3)
- Icons inside colored circles as section markers
- "Hero image + 3 feature cards" cookie-cutter layout
- Generic stock photo placeholders or AI-generated hero images
- Overly uniform border-radius on everything (all-8px syndrome)
- Gradient CTA buttons floating in white space
- Cookie-cutter testimonial carousel (avatar + quote + name)
- Decorative blobs/mesh gradients as background filler
- "Dashboard" UI with identical stat cards in a row
Hard Rejection Criteria (immediate rework required)
- Layout is indistinguishable from a SaaS landing page template
- Color palette matches default Tailwind purple/indigo/violet without customization
- Every section follows identical padding/spacing rhythm with no visual hierarchy
- Illustrations or icons are all from the same generic set without style adaptation
- Typography uses only one weight with no clear heading/body distinction
- No brand-specific design tokens — all values are framework defaults
- Page could belong to any product — zero domain-specific visual identity
Output Format
Group by file. Use file:line format (VS Code clickable). Concise findings.
## src/Button.tsx
src/Button.tsx:42 - icon button missing aria-label
src/Button.tsx:18 - input lacks label
src/Button.tsx:55 - animation missing prefers-reduced-motion
src/Button.tsx:67 - transition: all → list properties
## src/Modal.tsx
src/Modal.tsx:12 - missing overscroll-behavior: contain
src/Modal.tsx:34 - "..." → "…"
## src/Card.tsx
✓ passState issue + location. Skip explanation if fix is obvious. No preamble.
Related Skills
/react-best-practices- React/Next.js performance optimization/frontend-design- Frontend UI generation
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

