web-interface-guidelines
v0.1.0Vercel's comprehensive UI guidelines for building accessible, performant web interfaces. Use this skill when reviewing or building UI components for complian...
Security Scan
Capability signals
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
OpenClaw
Benign
high confidencePurpose & Capability
Name/description promise UI guidelines and the SKILL.md contains only web UI best-practice rules (accessibility, performance, animations, visual stability). There are no unrelated requirements (no credentials, binaries, or config paths).
Instruction Scope
SKILL.md is purely prescriptive guidance (lists rules and anti-patterns). It does not instruct the agent to read files, run commands, call external endpoints, or access environment/configuration outside the skill's domain.
Install Mechanism
No install spec and no code files — instruction-only skills are lowest-risk because nothing is written to disk or executed.
Credentials
The skill declares no environment variables, secrets, or config paths; the guidance content does not reference any hidden credentials.
Persistence & Privilege
Skill is not always-enabled and is user-invocable; autonomous invocation is allowed (platform default) but is not combined with any broad privileges or sensitive access here.
Assessment
This skill is essentially a static checklist for building stable, accessible web UI and appears internally consistent and low risk. However, the package metadata has no homepage or clear source attribution — if you need authoritative/legal compliance, verify these rules against Vercel's official documentation or your organization's standards before relying on them. Because it's instruction-only, installing it won't add binaries or request credentials, but always review guidance for applicability to your codebase and testing tools.Like a lobster shell, security has layers — review code before you run it.
latest
Web Interface Guidelines
Review UI code for compliance with Vercel's web interface standards.
Quick Reference - Visual Stability
| Issue | Rule |
|---|---|
| Images without dimensions | <img> needs explicit width and height (prevents CLS) |
| Font loading flash | Critical fonts: <link rel="preload" as="font"> with font-display: swap |
| Large lists | Virtualize lists >50 items (content-visibility: auto) |
| Layout reads in render | No getBoundingClientRect, offsetHeight in render path |
Full Rules
Images
<img>needs explicitwidthandheight(prevents CLS)- Below-fold images:
loading="lazy" - Above-fold critical images:
priorityorfetchpriority="high"
Performance
- Large lists (>50 items): virtualize (
virtua,content-visibility: auto) - No layout reads in render (
getBoundingClientRect,offsetHeight,offsetWidth,scrollTop) - Batch DOM reads/writes; avoid interleaving
- Add
<link rel="preconnect">for CDN/asset domains - Critical fonts:
<link rel="preload" as="font">withfont-display: swap
Accessibility
- Icon-only buttons need
aria-label - Form controls need
<label>oraria-label - Interactive elements need keyboard handlers (
onKeyDown/onKeyUp) <button>for actions,<a>/<Link>for navigation (not<div onClick>)- Images need
alt(oralt=""if decorative)
Focus States
- Interactive elements need visible focus:
focus-visible:ring-*or equivalent - Never
outline-none/outline: nonewithout focus replacement - Use
:focus-visibleover:focus(avoid focus ring on click)
Animation
- Honor
prefers-reduced-motion(provide reduced variant or disable) - Animate
transform/opacityonly (compositor-friendly) - Never
transition: all—list properties explicitly
Forms
- Inputs need
autocompleteand meaningfulname - Use correct
type(email,tel,url,number) andinputmode - Never block paste (
onPaste+preventDefault) - Labels clickable (
htmlForor wrapping control)
Content Handling
- Text containers handle long content:
truncate,line-clamp-*, orbreak-words - Flex children need
min-w-0to allow text truncation - Handle empty states—don't render broken UI for empty strings/arrays
Anti-patterns (flag these)
user-scalable=noormaximum-scale=1disabling zoomtransition: alloutline-nonewithout focus-visible replacement- Images without dimensions
- Large arrays
.map()without virtualization - Form inputs without labels
- Icon buttons without
aria-label
Comments
Loading comments...
