Agent skill
design-guide
Ensures modern, professional UI design by providing principles for spacing, typography, colors, shadows, and interactive states. Use when building any UI component or interface with Next.js/React, Nuxt/Vue, shadcn UI, or Tailwind CSS to ensure consistent, clean, minimal design.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/design-guide-caraseli02-moldovadirect
SKILL.md
Design Guide
This skill ensures every UI you build looks modern and professional by following proven design principles. Reference this skill whenever building any UI component.
Core Design Principles
1. Clean and Minimal Layout
- Use generous white space throughout the interface
- Avoid cluttered designs - less is more
- Let content breathe with proper spacing
- Create visual hierarchy through spacing rather than decoration
- Remove unnecessary elements and decorations
2. Neutral Color Palette
- Base colors: Use grays and off-whites (not pure white) as the foundation
- Accent color: Choose ONE accent color and use it sparingly for emphasis
- Avoid: Generic purple/blue gradients - they look dated and unprofessional
- Example palette:
- Background:
bg-zinc-50orbg-slate-50orbg-gray-50 - Text primary:
text-zinc-900ortext-gray-900 - Text secondary:
text-zinc-600ortext-gray-600 - Borders:
border-zinc-200orborder-gray-200 - Accent: One brand color used only for CTAs and important elements
- Background:
- Bad practice: Rainbow gradients everywhere, every element a different color
3. Spacing System (8px Grid)
Use consistent spacing based on an 8px grid system. In Tailwind CSS, this maps to:
gap-2orp-2= 8pxgap-4orp-4= 16pxgap-6orp-6= 24pxgap-8orp-8= 32pxgap-12orp-12= 48pxgap-16orp-16= 64px
Guidelines:
- Use these values consistently throughout your design
- Smaller spacing (8-16px) for related elements within a component
- Medium spacing (24-32px) for sections within a component
- Larger spacing (48-64px) for major layout sections and between components
- Bad practice: Inconsistent spacing (3px here, 17px there, 23px somewhere else)
4. Typography
- Clear hierarchy: Establish distinct heading levels with size and weight
- Readable sizes: Minimum 16px (
text-base) for body text - never smaller - Font limit: Use maximum 2 different fonts (one for headings, one for body)
- Line height: Ensure comfortable reading with
leading-relaxedorleading-normal - Example hierarchy:
- H1:
text-3xl font-boldortext-4xl font-bold - H2:
text-2xl font-semibold - H3:
text-xl font-semibold - Body:
text-base(16px minimum) - Small:
text-sm text-zinc-600
- H1:
- Bad practice: Tiny unreadable text below 16px for body content
5. Shadows
- Use subtle shadows, not heavy or overdone effects
- Light shadow:
shadow-smfor slight elevation - Medium shadow:
shadowfor cards and elevated elements - Avoid:
shadow-2xl, dark shadows, or heavy drop shadows - Cards should use either clean borders OR subtle shadows, not both
- Bad practice: Heavy, dark shadows that look dated
6. Rounded Corners
- Apply rounded corners thoughtfully - not everything needs to be rounded
- Typical values:
- Buttons:
rounded-md(6px) orrounded-lg(8px) - Cards:
rounded-lg(8px) orrounded-xl(12px) - Small elements:
rounded(4px) - Inputs:
rounded-md(6px)
- Buttons:
- Maintain consistency across similar element types
- Some elements (like data tables or certain layouts) look better without rounding
7. Interactive States
Always define clear states for all interactive elements:
- Hover: Subtle color change or slight elevation
- Active/Pressed: Slightly darker or more emphasis
- Disabled: Reduced opacity (
opacity-50) and no hover effects - Focus: Clear focus ring for accessibility (
focus:ring-2 focus:ring-offset-2) - Use smooth transitions:
transition-colors duration-150ortransition-all duration-200
Bad practice: Missing hover states, no disabled states, no focus indicators
8. Mobile-First Thinking
- Design for mobile viewport first, then enhance for larger screens
- Use responsive utilities:
sm:,md:,lg:,xl:,2xl: - Ensure touch targets are minimum 44x44px for mobile
- Test all interactive elements work well on mobile
- Stack vertically on mobile, use grid/flex on desktop
Component Guidelines
Buttons (Good Example)
// Primary button - proper implementation
<button className="
bg-zinc-900 text-white
px-4 py-2
rounded-lg
shadow-sm
hover:bg-zinc-800
active:bg-zinc-950
disabled:opacity-50 disabled:cursor-not-allowed
focus:ring-2 focus:ring-offset-2 focus:ring-zinc-900
transition-colors duration-150
">
Click me
</button>
// Secondary button
<button className="
bg-white text-zinc-900
border border-zinc-300
px-4 py-2
rounded-lg
hover:bg-zinc-50
active:bg-zinc-100
disabled:opacity-50 disabled:cursor-not-allowed
transition-colors duration-150
">
Secondary
</button>
Key elements:
- Subtle shadow (
shadow-sm) - Proper padding:
px-4 py-2minimum - Clear hover state with smooth transition
- NO gradients
- Disabled state defined
- Focus state for accessibility
Bad practice: Heavy gradients, no hover state, insufficient padding, tiny text
Cards (Good Example)
// Option 1: Clean borders
<div className="
bg-white
border border-zinc-200
rounded-lg
p-6
">
Card content
</div>
// Option 2: Subtle shadow (not both!)
<div className="
bg-white
shadow
rounded-lg
p-6
">
Card content
</div>
Key elements:
- Use borders OR shadows, not both
- Adequate padding:
p-6orp-8 - Rounded corners:
rounded-lgorrounded-xl - White or off-white background
- Generous spacing between content
Bad practice: Both heavy borders AND heavy shadows, cramped content, no padding
Forms (Good Example)
<div className="space-y-4">
<div>
<label className="block text-sm font-medium text-zinc-900 mb-2">
Email
</label>
<input
type="email"
className="
w-full px-3 py-2
border border-zinc-300 rounded-md
focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 focus:border-blue-500
disabled:bg-zinc-100 disabled:text-zinc-400
transition-colors
"
placeholder="[email protected]"
/>
</div>
<div>
<label className="block text-sm font-medium text-zinc-900 mb-2">
Password
</label>
<input
type="password"
className="
w-full px-3 py-2
border border-zinc-300 rounded-md
focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 focus:border-blue-500
"
/>
{error && (
<p className="mt-2 text-sm text-red-600">
{error}
</p>
)}
</div>
</div>
Key elements:
- Clear labels with proper contrast and spacing
- Adequate input padding:
px-3 py-2minimum - Focus states with ring for accessibility
- Clear error states with proper color and spacing
- Disabled states styled appropriately
- Good spacing between fields (
space-y-4)
Bad practice: No labels, cramped inputs, unclear error states, inconsistent spacing, missing focus indicators
Navigation
// Desktop navigation
<nav className="flex items-center gap-6">
<a href="/" className="
text-zinc-600 hover:text-zinc-900
transition-colors
">
Home
</a>
<a href="/about" className="
text-zinc-900 font-medium
">
About
</a>
</nav>
// Mobile navigation (hamburger menu)
<nav className="flex flex-col gap-4 p-4">
<a href="/" className="
text-zinc-900 py-2
hover:text-zinc-600
">
Home
</a>
</nav>
Key elements:
- Clean, minimal design
- Clear active state indication
- Adequate spacing:
gap-4orgap-6 - Mobile: Hamburger menu for space efficiency
- Smooth transitions on hover
shadcn UI Integration
When using shadcn UI components:
- Components already follow most of these principles
- Customize the color scheme in
tailwind.config.jsto match your neutral palette - Adjust spacing if needed to align with 8px grid
- Ensure your accent color is used consistently
- Modify default shadows if they appear too heavy
- Check that all interactive states are properly defined
Quick Pre-Flight Checklist
Before considering any UI complete, verify:
- Generous white space used throughout, not cluttered
- Neutral grays with ONE accent color only
- Spacing follows 8px grid (8, 16, 24, 32, 48, 64px)
- Typography has clear hierarchy, minimum 16px body text
- Maximum 2 fonts used
- Shadows are subtle, not heavy
- Rounded corners used thoughtfully, not on everything
- All interactive elements have hover, active, disabled, and focus states
- Mobile-responsive with mobile-first approach
- No generic purple/blue gradients
- No rainbow gradients
- Text is readable (not too small, good contrast)
- Spacing is consistent throughout
- Cards use borders OR shadows, not both
Common Mistakes to Avoid
Color Mistakes
- ❌ Pure white backgrounds (
bg-whiteeverywhere) - ✅ Use off-white (
bg-zinc-50,bg-gray-50) - ❌ Too many colors, rainbow gradients
- ✅ Grays + one accent color
- ❌ Generic purple/blue gradients
- ✅ Solid colors or very subtle gradients
Spacing Mistakes
- ❌ Inconsistent spacing (3px, 17px, 23px random values)
- ✅ 8px grid system (8, 16, 24, 32, 48, 64px)
- ❌ Cramped, cluttered layouts
- ✅ Generous white space
Typography Mistakes
- ❌ Text smaller than 16px for body content
- ✅ Minimum 16px (
text-base) for body - ❌ Using 5+ different fonts
- ✅ Maximum 2 fonts
Shadow Mistakes
- ❌ Heavy, dark drop shadows
- ✅ Subtle shadows (
shadow-sm,shadow) - ❌ Cards with both heavy borders AND heavy shadows
- ✅ Borders OR shadows, not both
Interactive State Mistakes
- ❌ No hover effects on buttons
- ✅ Clear hover, active, disabled, focus states
- ❌ Missing focus indicators (accessibility issue)
- ✅ Visible focus rings
Mobile Mistakes
- ❌ Desktop-only design that breaks on mobile
- ✅ Mobile-first, responsive design
- ❌ Tiny touch targets (<44px)
- ✅ Minimum 44x44px touch targets
Examples in Context
Dashboard Card
// Good example
<div className="bg-white border border-zinc-200 rounded-lg p-6">
<h3 className="text-xl font-semibold text-zinc-900 mb-2">
Revenue
</h3>
<p className="text-3xl font-bold text-zinc-900">
$12,450
</p>
<p className="text-sm text-zinc-600 mt-2">
+12% from last month
</p>
</div>
Feature Section
// Good example with proper spacing
<section className="py-16 px-4">
<div className="max-w-6xl mx-auto">
<h2 className="text-3xl font-bold text-zinc-900 mb-4">
Features
</h2>
<p className="text-base text-zinc-600 mb-12 max-w-2xl">
Everything you need to build modern applications
</p>
<div className="grid md:grid-cols-3 gap-8">
{/* Feature cards with 8px grid spacing */}
</div>
</div>
</section>
When to Apply This Skill
Apply these principles for:
- Building new UI components in Next.js/React or Nuxt/Vue
- Creating pages and layouts
- Designing forms and inputs
- Building navigation menus
- Creating cards, buttons, and interactive elements
- Setting up color schemes and typography
- Implementing responsive designs
- Working with Tailwind CSS and shadcn UI
Always reference these guidelines before starting any UI work and verify against the checklist before considering the work complete.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?