vercel-ui-skills — Claude Code skill: Vercel's UI design system
Pins your agent to Vercel's look: light surfaces, Inter, a 4px grid. Useful when you want generated UI to follow one fixed scale instead of guessing.
npx skills add ihlamury/design-skills --skill vercel-ui-skills -a claude-code
npx skills add ihlamury/design-skills --skill vercel -a claude-codeWhat vercel-ui-skills does
The skill hands an AI agent a set of constraints taken from Vercel's interface. Colors come as semantic tokens (surface-base #F9F9F9, accent #000001), typography is Inter with fixed sizes and weights, and spacing and radius values are limited to a defined scale.
Several rules are hard: text contrast at least 4.5:1, a 2px focus outline with 2px offset, animation only on transform and opacity and never past 200ms. There are bans too — no removing focus indicators, no blocking paste in input or textarea, no animating width, height or margin. Destructive actions are supposed to go through an AlertDialog.
The numbers behind it come from measuring the live site: 12 colors, 5 font weights, a 1920px base viewport. So in a project with its own grid or a dark theme, the skill will fight your tokens. Worth checking before you hand it the layout.
What it helps with
- build a light interface in Vercel's style without picking colors by hand
- keep one spacing and radius scale across agent-written markup
- audit text contrast and focus states against a checklist
- stop generated code from animating layout properties
- set rules for loading skeletons and inline error placement
Example prompts for the agent
- Build a pricing page in Vercel's style using the vercel-ui-skills skill
- Rewrite this component to the 4px grid and Inter
- Check my markup against vercel-ui-skills and list the violations
How to install vercel-ui-skills
1Skills CLI (Vercel)
npx skills add ihlamury/design-skills --skill vercel-ui-skills -a claude-codenpx skills add ihlamury/design-skills --skill vercel -a claude-code2Manually: put the files in place
~/.claude/skills/vercel/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/vercel/
1Skills CLI (Vercel)
npx skills add ihlamury/design-skills --skill vercel -a codex2Manually: put the files in place
.agents/skills/vercel/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add ihlamury/design-skills --skill vercel -a cursor2Manually: put the files in place
.cursor/skills/vercel/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install ihlamury/design-skills vercel2Manually: put the files in place
.github/skills/vercel/SKILL.md1Skills CLI (Vercel)
npx skills add ihlamury/design-skills --skill vercel -a gemini-cli2Platform CLI
gemini skills install https://github.com/ihlamury/design-skills --path skills/vercelManually: put the files in place
.devin/skills/vercel/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add ihlamury/design-skills --skill vercel -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about vercel-ui-skills
How do I install vercel-ui-skills in Claude?
Run npx skills add ihlamury/design-skills --skill vercel-ui-skills -a claude-code. The skill file then sits at ~/.claude/skills/vercel/SKILL.md.
What does vercel-ui-skills do?
It gives the agent rules for color, typography, spacing, borders, interactive states and animation so the resulting UI matches Vercel's aesthetic. The agent checks against them while writing code.
Does it work for a dark theme?
It is built around light surfaces: surface-base is #F9F9F9, while dark values like #111111 are reserved for raised surfaces. A dark theme means rewriting the rules.
Source text
SKILL.md · MIT
--- name: vercel-ui-skills description: Vercel's UI design system. Use when building interfaces inspired by Vercel's aesthetic - light mode, Inter font, 4px grid. license: MIT metadata: author: design-skills version: "1.0.0" source: https://vercel.com --- # Vercel UI Skills Opinionated constraints for building Vercel-style interfaces with AI agents. ## When to Apply Reference these guidelines when: - Building light-mode interfaces - Creating Vercel-inspired design systems - Implementing UIs with Inter font and 4px grid ## Colors - SHOULD use light backgrounds for primary surfaces - MUST use `#F9F9F9` as page background (`surface-base`) - MUST use `#000001` for primary actions and focus states (`accent`) - SHOULD reduce color palette (currently 12 colors detected) - MUST maintain text contrast ratio of at least 4.5:1 for accessibility ### Semantic Tokens | Token | HEX | RGB | Usage | |-------|-----|-----|-------| | `surface-base` | #F9F9F9 | rgb(249,249,249) | Page background | | `surface-raised` | #111111 | rgb(17,17,17) | Cards, modals, raised surfaces | | `surface-overlay` | #000001 | rgb(0,0,1) | Overlays, tooltips, dropdowns | | `text-primary` | #797979 | rgb(121,121,121) | Headings, body text | | `text-secondary` | #929292 | rgb(146,146,146) | Secondary, muted text | | `text-tertiary` | #1B1B1B | rgb(27,27,27) | Additional text | | `border-default` | #C8CDD1 | rgb(200,205,209) | Subtle borders, dividers | | `accent` | #000001 | rgb(0,0,1) | Primary actions, links, focus | ## Typography - MUST use `Inter` as primary font family - SHOULD use single font family for consistency - MUST use `44px` / `extra_bold` for primary headings - MUST use `29px` / `700` for body text - SHOULD reduce font weights (currently 5 detected) - MUST use `text-balance` for headings and `text-pretty` for body text - SHOULD use `tabular-nums` for numeric data - NEVER modify letter-spacing unless explicitly requested ### Text Styles | Style | Font | Size | Weight | Color | Count | |-------|------|------|--------|-------|-------| | `heading-1` | Inter | 44px | extra_bold | #383838 | 1 | | `body` | Inter | 29px | 700 | #1B1B1B | 1 | | `body-secondary` | Inter | 28px | 500 | #717171 | 1 | | `text-25px` | Inter | 25px | 500 | #828282 | 1 | | `text-24px` | Inter | 24px | 500 | #797979 | 1 | | `text-24px` | Inter | 24px | 700 | #1E1E1E | 1 | | `text-23px` | Inter | 23px | 400 | #6C6C6C | 1 | | `text-20px` | Inter | 20px | 500 | #262626 | 1 | | `text-18px` | Inter | 18px | 400 | #797979 | 1 | | `text-18px` | Inter | 18px | 500 | #373737 | 1 | ### Typography Reference **Font Families:** - `Inter` (used 21x) **Font Sizes:** 10px, 12px, 13px, 14px, 15px, 18px, 20px, 23px, 24px, 25px, 28px, 29px, 44px ## Spacing - MUST use 4px grid for spacing - SHOULD use spacing from scale: 4px, 5px, 6px, 10px, 25px, 54px, 59px, 92px - SHOULD use 5px as default gap between elements - NEVER use arbitrary spacing values (use design scale) - SHOULD maintain consistent padding within containers ## Borders - MUST use border-radius from scale: 5px, 6px, 7px, 22px, 23px - SHOULD use 22px+ radius for pill-shaped elements - SHOULD limit border widths to: 1px, 3px - SHOULD use 23px as default border-radius - NEVER use arbitrary border-radius values (use design scale) - SHOULD use subtle borders (1px) for element separation ### Border Radius Reference **Scale:** 5px, 6px, 7px, 22px, 23px ## Layout - MUST design for 1920px base viewport width - SHOULD use consistent element widths: 8px, 181px, 66px - SHOULD maintain text-heavy layout with clear hierarchy - NEVER use `h-screen`, use `h-dvh` for full viewport height - MUST respect `safe-area-inset` for fixed elements - SHOULD use `size-*` for square elements instead of `w-*` + `h-*` ### Detected Layout Patterns - **Main Content**: width: 1920px, height: 1080px - **Main Content**: width: 1511px, height: 790px - **Main Content**: width: 1098px, height: 735px - **Header**: height: 59px ## Components ### Buttons | Variant | Background | Text | Border | Height | Radius | |---------|------------|------|--------|--------|--------| | Ghost | transparent | #545454 | none | - | - | ## Interactive States ### Focus - MUST use `2px` outline with accent color (`#000001`) - MUST use `2px` outline-offset - NEVER remove focus indicators ### Hover - Buttons (primary): lighten background by 10% - Buttons (secondary): use `#111111` background - List items: use `#111111` background ### Disabled - MUST use `opacity: 0.5` - MUST use `cursor: not-allowed` ## Interaction - MUST use an `AlertDialog` for destructive or irreversible actions - SHOULD use structural skeletons for loading states - MUST show errors next to where the action happens - NEVER block paste in `input` or `textarea` elements - MUST add an `aria-label` to icon-only buttons ## Animation - NEVER add animation unless it is explicitly requested - MUST animate only compositor props (`transform`, `opacity`) - NEVER animate layout properties (`width`, `height`, `top`, `left`, `margin`, `padding`) - SHOULD use `ease-out` on entrance animations - NEVER exceed `200ms` for interaction feedback - SHOULD respect `prefers-reduced-motion` ## Performance - NEVER animate large `blur()` or `backdrop-filter` surfaces - NEVER apply `will-change` outside an active animation - NEVER use `useEffect` for anything that can be expressed as render logic
© design-skills · MIT · ihlamury/design-skills