Agent skill
ui-ux-guidelines
Implementation details for accessible, performant interfaces. Use alongside vercel-design-guidelines for detailed technical guidance on interactions, animations, and forms.
Install this agent skill to your Project
npx add-skill https://github.com/tylergibbs1/codewarden/tree/main/skills/ui-ux-guidelines
SKILL.md
UI/UX Implementation Details
Note: For high-level design rules (hit targets, focus rings, contrast, etc.), defer to
vercel-design-guidelineswhich fetches live standards from Vercel. This skill provides implementation-specific details.
Interactions
Keyboard & Focus
- MUST: Full keyboard support per WAI-ARIA APG
- MUST: Manage focus (trap, move, return) per APG patterns
- MUST: Group focus with
:focus-withinwhere appropriate
Touch & Input
- MUST:
touch-action: manipulationto prevent double-tap zoom - MUST: Set
-webkit-tap-highlight-colorto match design - MUST: Mobile
<input>font-size ≥16px to prevent iOS zoom, or use:html<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover">
Form Behavior
- MUST: Hydration-safe inputs (no lost focus/value)
- NEVER: Block paste in
<input>/<textarea> - MUST: Enter submits text input; in
<textarea>, Cmd/Ctrl+Enter submits - MUST: Keep submit enabled until request starts; use idempotency key
- MUST: Allow submitting incomplete forms to surface validation
- MUST: Errors inline next to fields; on submit, focus first error
- MUST:
autocomplete+ meaningfulname; correcttypeandinputmode - SHOULD: Disable spellcheck for emails/codes/usernames
- SHOULD: Placeholders end with ellipsis and show example (e.g.,
sk-012345...) - MUST: Warn on unsaved changes before navigation
- MUST: Compatible with password managers & 2FA
- MUST: Trim values to handle text expansion trailing spaces
- MUST: No dead zones on checkboxes/radios; label+control share hit target
State & Navigation
- MUST: URL reflects state (filters/tabs/pagination). Prefer nuqs
- MUST: Back/Forward restores scroll
- MUST: Links use
<a>/<Link>(support Cmd/Ctrl/middle-click)
Feedback
- SHOULD: Optimistic UI with reconciliation; on failure show error or Undo
- MUST: Confirm destructive actions or provide Undo window
- MUST: Use polite
aria-livefor toasts/inline validation - SHOULD: Ellipsis for follow-ups ("Rename...") and loading ("Saving...")
Touch/Drag
- MUST: Delay first tooltip; subsequent peers no delay
- MUST:
overscroll-behavior: containin modals/drawers - MUST: During drag, disable text selection and set
inerton dragged element
Animation
- SHOULD: Prefer CSS > Web Animations API > JS libraries
- MUST: Animations are interruptible and input-driven (avoid autoplay)
- MUST: Correct
transform-origin(motion starts where it "physically" should)
Cross-Browser
- MUST: Apply CSS transforms to SVG children (
<g>), not parent<svg> - MUST: Set
transform-box: fill-boxandtransform-origin: centeron SVG - SHOULD: Use
translateZ(0)orwill-change: transformfor text anti-aliasing artifacts
Layout
- SHOULD: Optical alignment; adjust by +/-1px when perception beats geometry
- MUST: Deliberate alignment to grid/baseline/edges
- SHOULD: Balance icon/text lockups (stroke/weight/size/spacing/color)
- MUST: Verify mobile, laptop, ultra-wide (simulate at 50% zoom)
- MUST: Respect safe areas (
env(safe-area-inset-*)) - MUST: Avoid unwanted scrollbars; fix overflows
Content & Accessibility
- SHOULD: Inline help first; tooltips last resort
- MUST: Skeletons mirror final content (avoid layout shift)
- MUST:
<title>matches current context - MUST: No dead ends; always offer next step/recovery
- MUST: Design empty/sparse/dense/error states
- SHOULD: Curly quotes (" "); avoid widows/orphans
- MUST: Tabular numbers for comparisons (
font-variant-numeric: tabular-nums) - MUST: Redundant status cues (not color-only); icons have text labels
- MUST: Use ellipsis character
...(not...) - MUST:
scroll-margin-topon headings; include "Skip to content" link - MUST: Resilient to user-generated content (short/avg/very long)
- MUST: Locale-aware dates/times/numbers/currency
- MUST: Use non-breaking spaces:
10 MB,Cmd + K - MUST: Detect language via
Accept-Languageheader, NOT IP geolocation
Performance
- SHOULD: Test iOS Low Power Mode and macOS Safari
- MUST: Measure reliably (disable extensions that skew runtime)
- MUST: Track and minimize re-renders (React DevTools/React Scan)
- MUST: Profile with CPU/network throttling
- MUST: Batch layout reads/writes; avoid reflows/repaints
- MUST: Mutations complete in <500ms
- SHOULD: Prefer uncontrolled inputs; make controlled loops cheap
- MUST: Virtualize large lists (virtua) or
content-visibility: auto - MUST: Preload only above-the-fold images; lazy-load rest
- MUST: Prevent CLS from images (explicit dimensions)
- SHOULD:
<link rel="preconnect">for asset/CDN domains - SHOULD: Preload critical fonts; subset via
unicode-range - SHOULD: Move expensive work to Web Workers
Design
- SHOULD: Layered shadows (ambient + direct)
- SHOULD: Crisp edges via semi-transparent borders + shadows
- SHOULD: Nested radii: child <= parent; concentric
- SHOULD: Hue consistency: tint borders/shadows/text toward bg hue
- MUST: Accessible charts (color-blind-friendly palettes)
- MUST: Increase contrast on
:hover/:active/:focus - SHOULD: Set
<meta name="theme-color">to match page background - MUST: Set
color-scheme: darkon<html>in dark themes - MUST: On Windows, set explicit
background-colorandcoloron<select> - SHOULD: Avoid gradient banding (use masks when needed)
Common Violations
Blocking paste
// Bad
<input onPaste={(e) => e.preventDefault()} />
// Good
<input type="email" autoComplete="email" />
Non-semantic button
// Bad
<div onClick={handleClick}>Click me</div>
// Good
<button onClick={handleClick}>Click me</button>
Windows select dark mode
// Bad
<select><option>Option 1</option></select>
// Good
<select className="bg-white dark:bg-gray-900 text-black dark:text-white">
<option>Option 1</option>
</select>
References
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
ultracite
Enforce strict type safety, accessibility standards, and code quality for TypeScript/JavaScript projects using Biome's formatter and linter. Use when writing, reviewing, or fixing TS/JS/TSX/JSX code, checking for a11y issues, linting errors, type safety problems, or when the user mentions code quality, formatting, accessibility, or best practices.
vercel-deploy
Deploy applications and websites to Vercel. Use this skill when the user requests deployment actions such as "Deploy my app", "Deploy this to production", "Create a preview deployment", "Deploy and give me the link", or "Push this live". No authentication required - returns preview URL and claimable deployment link.
react-next-modern
Enforce modern React 19 and Next.js App Router patterns - server-first data fetching, minimal useEffect, Server Components, Server Actions, and form hooks. Use when reviewing React/Next.js code, migrating legacy patterns, or building new features with App Router.
react-best-practices
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
vercel-design-guidelines
Check web interfaces against Vercel's design guidelines. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", "check my site against best practices", or "apply Vercel design guidelines".
verl-rl-training
Provides guidance for training LLMs with reinforcement learning using verl (Volcano Engine RL). Use when implementing RLHF, GRPO, PPO, or other RL algorithms for LLM post-training at scale with flexible infrastructure backends.
Didn't find tool you were looking for?