Back to skills
SkillHub ClubDesign ProductDesignerFrontend

ui-ux-design

Create production-grade frontend interfaces with strong UX and visual craft. Use when building web components, pages, dashboards, forms, landing pages, or any UI. Use when user says 'build a form', 'create a dashboard', 'design a component', 'make a landing page', or asks for UI/UX work.

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
9
Hot score
84
Updated
March 20, 2026
Overall rating
C1.8
Composite score
1.8
Best-practice grade
B73.6

Install command

npx @skill-hub/cli install arvindand-agent-skills-ui-ux-design
ui-uxfrontendaccessibilityweb-designcode-generation

Repository

arvindand/agent-skills

Skill path: skills/ui-ux-design

Create production-grade frontend interfaces with strong UX and visual craft. Use when building web components, pages, dashboards, forms, landing pages, or any UI. Use when user says 'build a form', 'create a dashboard', 'design a component', 'make a landing page', or asks for UI/UX work.

Open repository

Best for

Primary workflow: Design Product.

Technical facets: Designer, Frontend.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: arvindand.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install ui-ux-design into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/arvindand/agent-skills before adding ui-ux-design to shared team environments
  • Use ui-ux-design for design workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: ui-ux-design
description: "Create production-grade frontend interfaces with strong UX and visual craft. Use when building web components, pages, dashboards, forms, landing pages, or any UI. Use when user says 'build a form', 'create a dashboard', 'design a component', 'make a landing page', or asks for UI/UX work."
allowed-tools: Read, Write, Edit
hooks:
  Stop:
    - hooks:
        - type: prompt
          prompt: "Check if UI/UX task is complete based on what was asked. If task was advice/consultation only - no code checklist applies. If code was written: verify interactive states, semantic HTML, focus states, labels (for forms), and contrast were considered for what was built. Only flag missing items that apply to the specific output. Respond {\"ok\": true} if done, or {\"ok\": false, \"reason\": \"specific missing item\"} if not."
---

# UI/UX Design

Create functional, accessible, visually distinctive interfaces. Output is working code.

## When to Use

**Activate automatically when:**

- User requests UI components, pages, or applications
- User mentions forms, dashboards, landing pages, modals
- User asks to "design", "build", or "create" any interface
- User wants to improve existing UI/UX

## Workflow

### Step 1: Assess Context

Before coding, identify (internal reasoning):

- Problem being solved
- Target users
- Aesthetic direction (see [REFERENCES.md](REFERENCES.md#aesthetic-directions))
- Constraints (framework, brand, accessibility level)

### Step 2: Consult References

Fetch implementation values from [REFERENCES.md](REFERENCES.md):

- Color palette (with WCAG-compliant values)
- Font pairing
- Component patterns (button, input, card, etc.)
- Spacing and typography tokens

### Step 3: Generate Code

Produce working implementation with:

- All interactive states (hover, focus, active, disabled, loading, error)
- Semantic HTML (button, nav, main—not div soup)
- Mobile-first responsive design
- CSS variables for maintainability

### Step 4: Verify

Run through checklist before delivering.

## Output Requirements

| Requirement | Standard |
|-------------|----------|
| Contrast | 4.5:1 text, 3:1 UI components |
| Focus states | Visible outline on all interactive elements |
| Touch targets | Minimum 44×44px |
| Reduced motion | Respect `prefers-reduced-motion` |
| Labels | All inputs have associated labels |
| Empty states | Helpful message + clear action |
| Error states | Explain what happened + how to fix |

## Aesthetic Directions

Match to context. See [REFERENCES.md](REFERENCES.md#aesthetic-directions) for characteristics.

| Style | Best For |
|-------|----------|
| Minimalism | Productivity, professional, portfolios |
| Glassmorphism | Dashboards, tech products |
| Neubrutalism | Creative, startups, distinctive brands |
| Editorial | Content sites, publications |
| Organic | Consumer apps, wellness, community |
| Dark Mode | User preference, low-light contexts |

## Anti-Patterns

Avoid these markers of generic AI output:

- Purple/blue gradients on white
- Inter/Roboto/system fonts everywhere
- Cookie-cutter card layouts
- Rounded rectangles with soft shadows on everything
- Color-only meaning (no icons/text backup)
- Removed focus outlines
- Error messages without solutions

## Checklist

Copy and track:

```
- [ ] Context assessed (problem, users, aesthetic direction)
- [ ] REFERENCES.md consulted for palette + fonts
- [ ] All interactive states implemented
- [ ] Loading and error states included
- [ ] Contrast meets WCAG AA
- [ ] Semantic HTML used
- [ ] Focus states visible
- [ ] Form inputs labeled
- [ ] prefers-reduced-motion respected
- [ ] Responsive breakpoints tested
- [ ] Empty states handled
```

## Recovery

| Issue | Action |
|-------|--------|
| User dislikes direction | Propose 2-3 alternatives from Aesthetic Directions |
| Looks too generic | Check Anti-Patterns, apply distinctive typography |
| Accessibility concerns | Verify contrast, focus states, semantic HTML |
| States incomplete | Walk through checklist systematically |

---

> **License:** MIT - See LICENSE for complete terms
> **Author:** Arvind Menon


---

## Referenced Files

> The following files are referenced in this skill and included for context.

### REFERENCES.md

```markdown
# UI/UX Design References

Implementation values, patterns, and code snippets. Consult when generating interfaces.

## Table of Contents

- [Aesthetic Directions](#aesthetic-directions)
- [Color Palettes](#color-palettes)
- [Font Pairings](#font-pairings)
- [Spacing & Layout Tokens](#spacing--layout-tokens)
- [Typography Tokens](#typography-tokens)
- [Component Patterns](#component-patterns)
- [Animation Tokens](#animation-tokens)
- [Utility Classes](#utility-classes)
- [CSS Reset](#css-reset)
- [External Resources](#external-resources)

---

## Aesthetic Directions

### Minimalism

- Generous whitespace, limited palette (2-3 colors)
- Typography as primary visual element
- Subtle borders, minimal shadows
- Best for: productivity tools, professional services, portfolios

### Glassmorphism

- Frosted glass effects (`backdrop-filter: blur`)
- Layered depth with transparency
- Gradient backgrounds behind glass panels
- Best for: dashboards, tech products, futuristic interfaces

```css
.glass {
  background: rgba(255, 255, 255, 0.1);
  backdrop-filter: blur(10px);
  border: 1px solid rgba(255, 255, 255, 0.2);
  border-radius: 16px;
}
```

### Neubrutalism

- High contrast, bold colors (often black + bright accent)
- Hard shadows (no blur): `box-shadow: 4px 4px 0 #000`
- Thick borders, raw/unpolished aesthetic
- Best for: creative agencies, startups, distinctive brands

```css
.neu-card {
  background: #fff;
  border: 3px solid #000;
  box-shadow: 6px 6px 0 #000;
}

.neu-button {
  background: #ffde59;
  border: 2px solid #000;
  box-shadow: 4px 4px 0 #000;
}

.neu-button:active {
  transform: translate(2px, 2px);
  box-shadow: 2px 2px 0 #000;
}
```

### Editorial

- Strong typography hierarchy (serif headings common)
- Grid-based layouts with clear columns
- Photo-forward with intentional cropping
- Best for: content sites, publications, blogs

### Organic

- Rounded corners (12-24px), soft shapes
- Warm color palettes, earth tones or pastels
- Friendly, approachable illustrations
- Best for: consumer apps, wellness, community platforms

### Dark Mode

- Dark surfaces (#0a0a0b base, #141416 elevated)
- Reduced brightness on accents
- Careful contrast management
- Best for: user preference, low-light, media apps

---

## Color Palettes

### Neutral Foundation

```css
:root {
  --gray-50: #fafafa;
  --gray-100: #f4f4f5;
  --gray-200: #e4e4e7;
  --gray-300: #d4d4d8;
  --gray-400: #a1a1aa;
  --gray-500: #71717a;
  --gray-600: #52525b;
  --gray-700: #3f3f46;
  --gray-800: #27272a;
  --gray-900: #18181b;
  --gray-950: #09090b;
}
```

### Accent Colors (WCAG AA on White)

```css
/* Blue - Trust, Professional */
--blue-500: #3b82f6;  /* Hover */
--blue-600: #2563eb;  /* 4.54:1 - Primary */
--blue-700: #1d4ed8;  /* 5.96:1 - Pressed */

/* Green - Success */
--green-600: #16a34a; /* 4.52:1 */
--green-700: #15803d; /* 5.94:1 */

/* Red - Error */
--red-600: #dc2626;   /* 4.53:1 */
--red-700: #b91c1c;   /* 5.98:1 */

/* Amber - Warning */
--amber-600: #d97706; /* 4.5:1 */
--amber-700: #b45309; /* 5.92:1 */

/* Violet - Creative */
--violet-600: #7c3aed; /* 4.51:1 */
--violet-700: #6d28d9; /* 5.96:1 */

/* Teal - Modern */
--teal-600: #0d9488;  /* 4.52:1 */
--teal-700: #0f766e;  /* 5.91:1 */
```

### Dark Mode Foundation

```css
:root[data-theme="dark"] {
  --background: #0a0a0b;
  --surface: #141416;
  --surface-elevated: #1c1c1f;
  --border: #27272a;
  --border-subtle: #1f1f22;
  --text-primary: #fafafa;
  --text-secondary: #a1a1aa;
  --text-muted: #71717a;
}
```

### Semantic Mapping

```css
:root {
  --color-primary: var(--blue-600);
  --color-primary-hover: var(--blue-700);
  --color-success: var(--green-600);
  --color-warning: var(--amber-600);
  --color-error: var(--red-600);
  --color-text-primary: var(--gray-900);
  --color-text-secondary: var(--gray-600);
  --color-text-muted: var(--gray-500);
  --color-border: var(--gray-200);
  --color-border-strong: var(--gray-300);
}
```

---

## Font Pairings

### Modern Tech

```css
--font-heading: 'Geist', 'Inter', system-ui, sans-serif;
--font-body: 'Geist', 'Inter', system-ui, sans-serif;
--font-mono: 'Geist Mono', 'JetBrains Mono', monospace;
```

### Editorial Elegance

```css
--font-heading: 'Playfair Display', 'Georgia', serif;
--font-body: 'Source Serif Pro', 'Georgia', serif;
--font-mono: 'IBM Plex Mono', monospace;
```

### Friendly & Approachable

```css
--font-heading: 'DM Sans', 'Nunito', sans-serif;
--font-body: 'DM Sans', 'Nunito', sans-serif;
--font-mono: 'Fira Code', monospace;
```

### Bold & Distinctive

```css
--font-heading: 'Cabinet Grotesk', 'Satoshi', sans-serif;
--font-body: 'Satoshi', 'DM Sans', sans-serif;
--font-mono: 'JetBrains Mono', monospace;
```

### Corporate Professional

```css
--font-heading: 'IBM Plex Sans', 'Source Sans Pro', sans-serif;
--font-body: 'IBM Plex Sans', 'Source Sans Pro', sans-serif;
--font-mono: 'IBM Plex Mono', monospace;
```

### Google Fonts Imports

```css
/* Modern Tech */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');

/* Editorial */
@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&family=Source+Serif+Pro:wght@400;600&display=swap');

/* Friendly */
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&display=swap');

/* Professional */
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono&display=swap');
```

---

## Spacing & Layout Tokens

```css
:root {
  /* 8px grid */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 16px;
  --space-4: 24px;
  --space-5: 32px;
  --space-6: 48px;
  --space-7: 64px;
  --space-8: 96px;
  
  /* Container widths */
  --container-sm: 640px;
  --container-md: 768px;
  --container-lg: 1024px;
  --container-xl: 1280px;
  
  /* Border radius */
  --radius-sm: 4px;
  --radius-md: 6px;
  --radius-lg: 8px;
  --radius-xl: 12px;
  --radius-full: 9999px;
  
  /* Shadows */
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
  --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
}
```

---

## Typography Tokens

```css
:root {
  --text-xs: 0.75rem;    /* 12px */
  --text-sm: 0.875rem;   /* 14px */
  --text-base: 1rem;     /* 16px */
  --text-lg: 1.125rem;   /* 18px */
  --text-xl: 1.25rem;    /* 20px */
  --text-2xl: 1.5rem;    /* 24px */
  --text-3xl: 1.875rem;  /* 30px */
  --text-4xl: 2.25rem;   /* 36px */
  --text-5xl: 3rem;      /* 48px */
  --text-6xl: 3.75rem;   /* 60px */
  
  --leading-tight: 1.25;
  --leading-normal: 1.5;
  --leading-relaxed: 1.625;
  
  --font-normal: 400;
  --font-medium: 500;
  --font-semibold: 600;
  --font-bold: 700;
}
```

---

## Component Patterns

### Button

```css
.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 10px 20px;
  font-size: 14px;
  font-weight: 500;
  line-height: 20px;
  border-radius: 6px;
  border: none;
  cursor: pointer;
  transition: all 150ms ease-out;
  background: var(--color-primary);
  color: white;
}

.button:hover { background: var(--color-primary-hover); }
.button:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
.button:active { transform: scale(0.98); }
.button:disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; }

/* Variants */
.button-secondary {
  background: transparent;
  color: var(--color-text-primary);
  border: 1px solid var(--color-border-strong);
}
.button-secondary:hover { background: var(--gray-50); border-color: var(--gray-400); }

.button-ghost { background: transparent; color: var(--color-text-primary); }
.button-ghost:hover { background: var(--gray-100); }

.button-destructive { background: var(--color-error); }
.button-destructive:hover { background: var(--red-700); }

/* Sizes */
.button-sm { padding: 6px 12px; font-size: 13px; }
.button-lg { padding: 12px 24px; font-size: 16px; }
```

### Input Field

```css
.input-group { display: flex; flex-direction: column; gap: 6px; }

.input-label { font-size: 14px; font-weight: 500; color: var(--color-text-primary); }
.input-label-required::after { content: " *"; color: var(--color-error); }

.input {
  padding: 10px 12px;
  font-size: 16px; /* Prevents iOS zoom */
  line-height: 24px;
  color: var(--color-text-primary);
  background: white;
  border: 1px solid var(--color-border-strong);
  border-radius: 6px;
  transition: border-color 150ms, box-shadow 150ms;
}

.input::placeholder { color: var(--color-text-muted); }
.input:hover { border-color: var(--gray-400); }
.input:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); }
.input:disabled { background: var(--gray-50); color: var(--color-text-muted); cursor: not-allowed; }

.input-error { border-color: var(--color-error); }
.input-error:focus { box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1); }

.input-hint { font-size: 13px; color: var(--color-text-muted); }
.input-error-message { font-size: 13px; color: var(--color-error); }
```

### Card

```css
.card {
  background: var(--color-surface, white);
  border: 1px solid var(--color-border);
  border-radius: 8px;
  padding: 24px;
}

.card-interactive { cursor: pointer; transition: box-shadow 200ms ease-out, border-color 200ms ease-out; }
.card-interactive:hover { border-color: var(--color-border-strong); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); }
.card-interactive:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }

.card-title { font-size: 18px; font-weight: 600; margin: 0 0 4px 0; }
.card-description { font-size: 14px; color: var(--color-text-secondary); margin: 0; }
.card-footer { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--color-border); }
```

### Loading States

```css
/* Spinner */
.spinner {
  width: 20px;
  height: 20px;
  border: 2px solid var(--gray-200);
  border-top-color: var(--color-primary);
  border-radius: 50%;
  animation: spin 0.6s linear infinite;
}
.spinner-sm { width: 16px; height: 16px; }
.spinner-lg { width: 32px; height: 32px; border-width: 3px; }

@keyframes spin { to { transform: rotate(360deg); } }

/* Skeleton */
.skeleton {
  background: linear-gradient(90deg, var(--gray-100) 25%, var(--gray-200) 50%, var(--gray-100) 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
  border-radius: 4px;
}

@keyframes shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

.skeleton-text { height: 16px; margin-bottom: 8px; }
.skeleton-text:last-child { width: 60%; }
.skeleton-title { height: 24px; width: 50%; margin-bottom: 16px; }
.skeleton-avatar { width: 40px; height: 40px; border-radius: 50%; }
```

### Badge

```css
.badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  font-size: 12px;
  font-weight: 500;
  line-height: 18px;
  border-radius: 4px;
  background: var(--gray-100);
  color: var(--color-text-secondary);
}

.badge-primary { background: #eff6ff; color: var(--blue-700); }
.badge-success { background: #dcfce7; color: var(--green-700); }
.badge-warning { background: #fef3c7; color: var(--amber-700); }
.badge-error { background: #fee2e2; color: var(--red-700); }
```

### Alert

```css
.alert {
  display: flex;
  gap: 12px;
  padding: 16px;
  border-radius: 8px;
  border: 1px solid;
}

.alert-icon { flex-shrink: 0; width: 20px; height: 20px; }
.alert-content { flex: 1; }
.alert-title { font-weight: 600; margin-bottom: 4px; }
.alert-description { font-size: 14px; }

.alert-info { background: #eff6ff; border-color: #bfdbfe; color: var(--blue-700); }
.alert-success { background: #f0fdf4; border-color: #bbf7d0; color: var(--green-700); }
.alert-warning { background: #fffbeb; border-color: #fde68a; color: var(--amber-700); }
.alert-error { background: #fef2f2; border-color: #fecaca; color: var(--red-700); }
```

---

## Animation Tokens

```css
:root {
  --duration-fast: 150ms;
  --duration-normal: 250ms;
  --duration-slow: 400ms;
  
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in: cubic-bezier(0.7, 0, 0.84, 0);
  --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
}

@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes fadeInUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes scaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } }

.animate-fade-in { animation: fadeIn var(--duration-normal) var(--ease-out); }
.animate-fade-in-up { animation: fadeInUp var(--duration-normal) var(--ease-out); }
```

---

## Utility Classes

```css
/* Screen reader only */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Focus ring */
.focus-ring:focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }

/* Truncate */
.truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
```

---

## CSS Reset

```css
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }
html { -webkit-text-size-adjust: 100%; }
body { line-height: 1.5; -webkit-font-smoothing: antialiased; }
img, picture, video, canvas, svg { display: block; max-width: 100%; }
input, button, textarea, select { font: inherit; }
p, h1, h2, h3, h4, h5, h6 { overflow-wrap: break-word; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
```

---

## External Resources

| Resource | Use For |
|----------|---------|
| [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker) | Contrast validation |
| [Google Fonts](https://fonts.google.com) | Free web fonts |
| [Fontshare](https://fontshare.com) | Premium free fonts |
| [Coolors](https://coolors.co) | Palette generation |
| [Heroicons](https://heroicons.com) | Clean SVG icons |
| [Lucide](https://lucide.dev) | Open source icons |
| [Radix Icons](https://icons.radix-ui.com) | UI icons |

---

```

ui-ux-design | SkillHub