name: frontend-design description: Create distinctive, production-grade frontend interfaces with high design quality. Use when asked to build web components, pages, artifacts, posters, or applications (websites, landing pages, dashboards, React components, HTML/CSS layouts), when styling/beautifying any web UI, when applying a color/font theme to slides/docs/HTML, or when reviewing UI against Vercel Web Interface Guidelines (accessibility, UX audit, design review). Generates creative polished code, applies pre-built themes, and avoids generic AI aesthetics. license: Complete terms in LICENSE.txt allowed-tools: Read, Glob, Grep, Write, Edit, Bash, WebFetch
This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
Project Design Source of Truth (check FIRST)
Before committing to any aesthetic direction, check for a DESIGN.md at the project root:
[ -f DESIGN.md ] && echo "DESIGN.md present — it is the source of truth" || echo "no DESIGN.md — free creative direction"
When DESIGN.md is present, it is the normative design system — not a suggestion. It uses
the google-labs-code/design.md format (YAML
token frontmatter + prose). You MUST:
- Parse the tokens (
colors,typography,spacing,rounded,components) and use those exact values — do NOT invent palette or typography the file already defines. - Honor the prose sections (Overview, Colors, Typography, Layout, Shapes, Components) for how to apply tokens, and treat Do's and Don'ts as hard guardrails.
- Generate consumable tokens from it rather than hand-writing CSS:
npx @google/design.md export --format tailwind DESIGN.md(Tailwind v3 JSON) or--format dtcg. For Tailwind v4@theme, mirror the YAML token values directly into the@themeblock. - Validate your output's contrast/refs against the system:
npx @google/design.md lint DESIGN.md.
In this mode, the "BOLD aesthetic direction" guidance below is constrained by the design system — express creativity in layout, composition, motion, and detail, NOT by overriding the defined tokens.
When no DESIGN.md exists, proceed with the full creative-direction flow below. (If the work
is establishing a project's first design system, consider emitting a DESIGN.md so future frontend
work has a source of truth — /plan:design produces one automatically.)
Design Thinking
Before coding, understand the context and commit to a BOLD aesthetic direction:
- Purpose: What problem does this interface solve? Who uses it?
- Tone: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
- Constraints: Technical requirements (framework, performance, accessibility).
- Differentiation: What makes this UNFORGETTABLE? What's the one thing someone will remember?
CRITICAL: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
Operating Modes
This skill is not just a generator — it is a diagnostic. Three modes:
- Create (default) — building new UI. Read the Aesthetics Guidelines + Canon of Slop first, then produce work that avoids every listed pattern.
- Audit — the user shares existing UI/copy. If the project has a
DESIGN.md(see § Project Design Source of Truth), audit against it FIRST — deviations from the committed token system areSTRUCTURALfindings and outrank generic slop. Then run the Canon of Slop (references/anti-slop-canon.md) + microcopy sins (references/microcopy.md). Call out every pattern by name, then suggest the specific replacement. - Spot-fix — the user points at one element. Diagnose it, explain why it's slop, rewrite it.
Always name the sin before fixing it. "This is a purple-gradient hero (#7c3aed→#2563eb), the default AI palette" builds more trust than "let's improve the colors."
Severity (audit/spot-fix)
Rank every finding, then fix structural first — never polish a broken foundation:
| Token | Meaning |
|---|---|
STRUCTURAL |
Requires redesign/rewrite. Fundamental. |
SURFACE |
Easy fix — wrong font, color, or word. |
COSMETIC |
Minor polish pass. |
Rationalizations (do not accept these from yourself)
| Rationalization | Reality |
|---|---|
| "Users are used to this kind of UI anyway" | Familiarity with mediocrity isn't a license to propagate it. |
| "It's faster to use the default AI-generated look/copy" | Fast slop is still slop. Quality needs considered editing. |
| "This doesn't need to be unique, it just needs to work" | Distinctiveness IS part of working — it builds trust and memorability. |
File Output
All generated HTML, CSS, and standalone frontend files MUST be written to docs/diagrams/ in the
current working directory. NEVER write to /tmp, project root, or any other location.
mkdir -p docs/diagrams
# Write to: docs/diagrams/my-diagram.html
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
- Production-grade and functional
- Visually striking and memorable
- Cohesive with a clear aesthetic point-of-view
- Meticulously refined in every detail
Raster imagery (hero shots, textures, mockup photos, social cards). When a design needs a
real raster asset that CSS/SVG can't produce, generate it with the ai-media-gen skill
(scripts/bin/ai-media image …, Vercel AI Gateway) and match the prompt to your chosen palette
and aesthetic direction (style + dominant token colors). Logos remain svgl's job; vector
diagrams remain visual-explainer's. See the ai-media-gen skill for usage.
Frontend Aesthetics Guidelines
Focus on:
- Typography: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
- Color & Theme: Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
- Motion: Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Use Motion library for React when available. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
- Spatial Composition: Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
- Backgrounds & Visual Details: Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
The Canon of Slop (NEVER)
These are the highest-signal markers of the 2024–2026 AI-generated design monoculture. NEVER ship them. Name the pattern when you spot it.
| Pattern | Signature | Do instead |
|---|---|---|
| Purple gradient hero | #7c3aed → #2563eb on white |
Real color theory for the context |
| Default "modern" sans | Inter / Roboto / DM Sans / Space Grotesk | Distinctive pairing (display + quiet body) |
| Glassmorphism cards | backdrop-blur, bg-white/10 |
Intentional depth via shadow tiers + meaningful borders |
| Rounded everything | border-radius: 24px+ on all |
Vary radius by role; let elements have edges |
| Emoji-as-icons in headers | "✨ Supercharge 🚀" | Real icon set (Phosphor) or none |
| Three-column feature grid | icon + label + 1 line ×3 | Let content shape the layout |
| Dark mode = black + purple | #0f0f0f + #8b5cf6 |
A considered dark palette + accent |
| "Get started for free" CTA | generic primary button | A label that says what happens |
The full 16-pattern canon, font alternatives by context, and non-state UX interaction
anti-patterns live in references/anti-slop-canon.md — read it
in audit mode or when you need a specific replacement.
Precedence: when a project DESIGN.md defines tokens (see § Project Design Source of Truth),
it WINS over these defaults — even if it picks a font this canon would otherwise flag. The canon
governs free creative direction; a committed design system governs constrained direction.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
IMPORTANT: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
Aesthetic Decisions → Code
| Design Decision | CSS/Tailwind Implementation |
|---|---|
| Asymmetric layout | grid-cols-[2fr_1fr], col-span-2, offset margins (ml-[15%]) |
| Overlap elements | relative/absolute positioning, negative margins (-mt-8), z-10/z-20 layering |
| Dramatic whitespace | py-32, gap-24, min-h-[80vh] for sections |
| Controlled density | grid-cols-3 gap-2, tight leading-tight, compact p-2 |
| Diagonal flow | skew-y-3 on section dividers, clip-path: polygon(...) |
| Grid-breaking element | One child with col-span-full -mx-8 breaking out of the grid |
| Layered depth | Stacked box-shadow (shadow-xl shadow-primary/10), backdrop blur, gradient overlays |
| Noise texture | bg-[url('/noise.svg')] opacity-5 mix-blend-overlay on a pseudo-element |
| Grain overlay | before:content-[''] before:absolute before:inset-0 before:bg-noise before:opacity-[0.03] |
| Typography contrast | Display font at text-7xl font-black tracking-tighter vs body at text-base font-light tracking-wide |
Quick Recipes
Hero with depth:
.hero {
@apply relative min-h-[90vh] flex items-center;
background: radial-gradient(ellipse at 30% 50%, hsl(var(--primary) / 0.15), transparent 70%);
}
.hero::before {
@apply content-[''] absolute inset-0 bg-[url('/noise.svg')] opacity-5 mix-blend-overlay pointer-events-none;
}
Staggered reveal on scroll:
<div className="space-y-6">
{items.map((item, i) => (
<div
key={item.id}
className="animate-in fade-in slide-in-from-bottom-4"
style={{ animationDelay: `${i * 80}ms`, animationFillMode: "both" }}
/>
))}
</div>
Implementation Checklist by Direction
Minimalist:
- Max 2 font weights, 1 accent color
- Generous whitespace (
gap-16+ between sections) - No shadows, no gradients, no borders -- rely on spacing alone
- Typography does ALL the heavy lifting (size contrast, weight contrast)
Maximalist:
- 3+ layered backgrounds (gradient + noise + blur)
- Multiple animation entry points (stagger, parallax, hover)
- Bold color blocking -- no neutral zones
- Intentional visual overload -- every element earns its complexity
Dark luxury:
-
bg-zinc-950or darker, accent in gold/warm tones - Subtle grain texture overlay at 3-5% opacity
-
backdrop-blur-xlon glass cards - Thin borders (
border border-white/5) for depth without weight
Editorial:
- Dominant serif display font (
Playfair Display,Fraunces,DM Serif) - Asymmetric 2-column layout with oversized images
- Pull quotes and drop caps
- High contrast black/white with one editorial accent color
Pre-Built Themes
10 ready-to-apply professional themes are available in references/themes/. Each defines a complete
color palette + font pairing. Show assets/theme-showcase.pdf to the user for visual selection,
then read the chosen theme file and apply it.
Available themes: Ocean Depths, Sunset Boulevard, Forest Canopy, Modern Minimalist, Golden Hour, Arctic Frost, Desert Rose, Tech Innovation, Botanical Garden, Midnight Galaxy.
To generate a custom theme on-the-fly: extract colors/tone from user description and create a new
theme spec in the same format as references/themes/*.md.
CSS Microinteractions (motion-and-transitions)
For UI state changes — modals, dropdowns, panels, badges, page slides, icon swaps, number pop-ins,
card resizes — load the motion-and-transitions skill. It ships nine copy-ready CSS snippets (from
transitions.dev) with a unified curve language (out-quint for ambient,
spring-overshoot for attention) and mandatory prefers-reduced-motion guards. This is the first
stop for any "make X open/close smoothly" request before reaching for GSAP or WebGL.
When to use: Any UI component that transitions between two states — open/closed, visible/hidden, active/idle. Does not require React; works in plain HTML + CSS.
How to load: Skill({ skill: "motion-and-transitions" })
Motion & Animation Components (Motion Core)
For designs needing interactive animations, 3D effects, text reveals, scroll-driven motion, or
physics-based interactions, read references/motion-core.md. This provides React porting patterns
for 36 production-ready animation components spanning:
- Text animations: Split reveals, scramble effects, weight waves, text loops
- 3D/WebGL effects: Glass refraction, god rays, globes, fluid simulation, dithering
- Interaction: Magnetic cursor, macOS dock, image trails, interactive grids
- Layout animation: FLIP grids, card stacks, slideshows, marquees
- Atmosphere: Halo, lava lamp, neural noise, plasma, glitter cloth
When to suggest: Hero sections needing interactive depth, scroll-driven reveals, hover effects with physics, image galleries with 3D transitions, navigation with micro-interactions, or any design where motion would elevate the aesthetic beyond static CSS. Pair with Radiant shaders for layered depth.
Stack: React Three Fiber (@react-three/fiber) for WebGL, GSAP (@gsap/react) for DOM
animations. Shaders are framework-agnostic GLSL — copy verbatim from reference.
Generative Shader Effects (Radiant)
For designs needing animated backgrounds, hero effects, or visual depth beyond static CSS, read
references/radiant-shaders.md. This provides access to 91 production-ready, zero-dependency shader
effects (Canvas 2D + WebGL) embeddable via iframe.
When to suggest: Hero sections, full-viewport backgrounds, dark-themed interfaces, or any design where generative motion would elevate the aesthetic. Especially effective with the Mono, Blue, or Arctic color schemes for tech/corporate contexts.
A React/Next.js wrapper component is available at ~/.claude/recon/radiant-react-wrapper/ — copy
into the target project and use <RadiantShader html={...} colorScheme="blue" loading="lazy" />.
Brand Logos (svgl)
When your design references brands, services, or tools by name (Stripe, GitHub, Vercel, AWS, etc.),
use real SVG logos from svgl.app instead of emojis, text placeholders, or guessed SVG paths. Read
the svgl skill (~/.claude/skills/svgl/SKILL.md) for the full API reference, theme variant
selection (light/dark), and embedding patterns. Key points:
- Search the API for the correct logo URL:
https://api.svgl.app?search={brand} - Pick the right variant: dark background = dark route, light background = light route
- Embed via
<img>:<img src="https://svgl.app/library/stripe.svg" alt="Stripe" width="32" height="32" /> - Fall back gracefully: if a brand isn't in svgl, use Phosphor Icons or a styled text placeholder
- Never use emojis as brand placeholders
UI Icons (Phosphor)
For UI iconography (navigation, buttons, status indicators, forms), use Phosphor Icons as the
default library. Read the phosphor-icons skill (~/.claude/skills/phosphor-icons/SKILL.md) for
the full API. Key points:
- React:
import { HouseIcon } from "@phosphor-icons/react"— props:size,weight,color - HTML:
<i class="ph ph-house"></i>via CDN stylesheet - 6 weights: thin, light, regular, bold, fill, duotone — pick one per UI region
- Brand logos go through svgl.app (above), not Phosphor
Related Skills
When building frontend interfaces, also consider these complementary skills:
svgl— SVG brand logos from svgl.app. Use for brand iconography (Stripe, GitHub, Vercel, AWS logos).phosphor-icons— Phosphor icon library for UI iconography. Use for navigation, actions, and status indicators.geist-design— Vercel Geist design system. Use for design tokens, typography, and component patterns.algorithmic-art— Generative and algorithmic art patterns. Use for creative backgrounds, data visualizations, and decorative elements.
Skill boundaries (do not duplicate)
state-handlingowns loading / empty / error STATE patterns. The non-state UX interaction anti-patterns (modals, wizards, hamburger-on-desktop, toast spam, hover-only) live in this skill'sreferences/anti-slop-canon.md; for state behavior, defer tostate-handling.leo-writing-voiceowns general prose voice (Teams / Slack / email / chat replies). This skill'sreferences/microcopy.mdcovers UI microcopy ONLY — error messages, CTA labels, empty-state text, form labels. For human-facing prose, loadleo-writing-voiceinstead.
Validation
To check UI code against Vercel's Web Interface Guidelines, fetch:
https://raw.githubusercontent.com/vercel-labs/web-interface-guidelines/main/command.md
Apply all rules from the fetched content and report findings as file:line violations.