// This skill should be used when users request UI/UX design work, component creation, page layouts, wireframes, or design system implementation for Next.js applications using Tailwind CSS with a custom brand color palette (cream #fbfbee, yellow #ffde59, green #0b6d41).
| name | ui-ux-designer |
| description | This skill should be used when users request UI/UX design work, component creation, page layouts, wireframes, or design system implementation for Next.js applications using Tailwind CSS with a custom brand color palette (cream |
This skill provides comprehensive UI/UX design expertise for Next.js applications using Tailwind CSS. It focuses on creating beautiful, accessible, and responsive user interfaces using a custom brand color palette while following modern design principles and Next.js best practices.
Use this skill when:
The project uses a custom brand color palette:
For complete design system details including typography, spacing, component patterns, and accessibility guidelines, refer to references/design-system.md.
sm:, md:, lg:, xl:references/design-system.mdWhen asked to design or create UI:
Before designing, consult references/design-system.md for:
When building React components:
// Example structure for Next.js components
import React from 'react';
interface ComponentProps {
// TypeScript props
}
export default function ComponentName({ props }: ComponentProps) {
return (
<div className="tailwind-classes">
{/* Component content */}
</div>
);
}
Use Tailwind classes with custom brand colors:
// Primary button example
<button className="bg-brand-yellow text-brand-green font-semibold px-6 py-3 rounded-lg hover:bg-accent-400 transition-colors">
Call to Action
</button>
// Card example
<div className="bg-brand-cream border-2 border-brand-green rounded-xl p-6 shadow-lg">
<h3 className="text-brand-green text-2xl font-bold mb-4">Card Title</h3>
<p className="text-neutral-700">Card content goes here</p>
</div>
Apply responsive classes systematically:
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 md:gap-6 lg:gap-8">
{/* Responsive grid: 1 column mobile, 2 tablet, 3 desktop */}
</div>
<h1 className="text-2xl md:text-3xl lg:text-4xl font-bold text-brand-green">
{/* Responsive typography */}
</h1>
Include proper accessibility attributes:
<button
className="..."
aria-label="Submit form"
type="submit"
>
Submit
</button>
<nav aria-label="Main navigation">
{/* Navigation content */}
</nav>
<img
src="/image.jpg"
alt="Descriptive alt text"
loading="lazy"
/>
Use Next.js-specific features:
import Image from 'next/image';
import Link from 'next/link';
// Use Next.js Image component
<Image
src="/hero.jpg"
alt="Hero image"
width={1200}
height={600}
priority
className="rounded-lg"
/>
// Use Next.js Link component
<Link href="/about" className="text-brand-green hover:text-brand-yellow">
About Us
</Link>
When creating components, follow these common patterns:
interface ButtonProps {
variant?: 'primary' | 'secondary' | 'outline';
size?: 'sm' | 'md' | 'lg';
children: React.ReactNode;
onClick?: () => void;
disabled?: boolean;
}
export default function Button({
variant = 'primary',
size = 'md',
children,
onClick,
disabled = false
}: ButtonProps) {
const baseStyles = 'font-semibold rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2';
const variants = {
primary: 'bg-brand-yellow text-brand-green hover:bg-accent-400 focus:ring-brand-yellow',
secondary: 'bg-brand-green text-brand-cream hover:bg-primary-700 focus:ring-brand-green',
outline: 'border-2 border-brand-green text-brand-green hover:bg-brand-green hover:text-brand-cream focus:ring-brand-green'
};
const sizes = {
sm: 'px-4 py-2 text-sm',
md: 'px-6 py-3 text-base',
lg: 'px-8 py-4 text-lg'
};
return (
<button
className={`${baseStyles} ${variants[variant]} ${sizes[size]} ${disabled ? 'opacity-50 cursor-not-allowed' : ''}`}
onClick={onClick}
disabled={disabled}
>
{children}
</button>
);
}
interface CardProps {
children: React.ReactNode;
variant?: 'default' | 'bordered' | 'elevated';
className?: string;
}
export default function Card({ children, variant = 'default', className = '' }: CardProps) {
const variants = {
default: 'bg-white shadow-md',
bordered: 'bg-brand-cream border-2 border-brand-green',
elevated: 'bg-white shadow-xl'
};
return (
<div className={`rounded-xl p-6 ${variants[variant]} ${className}`}>
{children}
</div>
);
}
export default function PageName() {
return (
<main className="min-h-screen bg-brand-cream">
{/* Hero Section */}
<section className="py-12 md:py-20 lg:py-24">
<div className="container mx-auto px-4 md:px-6 lg:px-8 max-w-7xl">
{/* Hero content */}
</div>
</section>
{/* Content Sections */}
<section className="py-12 md:py-16">
<div className="container mx-auto px-4 md:px-6 lg:px-8 max-w-7xl">
{/* Section content */}
</div>
</section>
</main>
);
}
container mx-auto for centered contentpx-4 md:px-6 lg:px-8 for responsive horizontal paddingmax-w-7xl or similar for maximum width controlpy-12 md:py-16 lg:py-20 for responsive vertical spacingWhen presenting designs, provide:
After creating designs:
references/design-system.md - Complete design system documentationassets/ folder - Reusable component templates