seb1n/frontend design
Design and build production-ready frontend interfaces with design systems, responsive layouts, accessible components, and dark mode support.
npx skills add https://github.com/seb1n/awesome-ai-agent-skills --skill Frontend Design
This skill enables the agent to design and implement frontend interfaces that are visually polished, responsive, accessible, and maintainable. The agent works with design systems — component libraries, spacing scales, color tokens, and typography scales — to produce consistent UI code. It outputs production-ready HTML, CSS (including Tailwind CSS), and framework components (React, Vue, Svelte) with WCAG-compliant accessibility and dark mode support built in.
aria-label, aria-describedby, and role attributes only where semantic HTML is insufficient. Test keyboard navigation order with Tab and Shift+Tab.dark: variant. Swap background, text, and border tokens while preserving sufficient contrast ratios. Avoid pure black (#000) backgrounds — use a dark gray (#0f172a or #1e293b) for reduced eye strain. Ensure images, shadows, and elevation levels adapt appropriately.Provide the agent with a description of the interface you need, including the framework, styling approach, and any existing design tokens. The agent will produce component code with responsive behavior, accessibility attributes, and dark mode support included.
User Request: "Create a reusable Card component in React with Tailwind CSS. I need default, elevated, and outlined variants, plus support for dark mode."
Agent Response:
function Card({ variant = 'default', children, className = '' }) {
const base = 'rounded-lg p-6 transition-colors duration-200';
const variants = {
default:
'bg-white text-gray-900 dark:bg-slate-800 dark:text-gray-100',
elevated:
'bg-white text-gray-900 shadow-lg hover:shadow-xl dark:bg-slate-800 dark:text-gray-100 dark:shadow-slate-900/30',
outlined:
'bg-transparent text-gray-900 border border-gray-200 dark:text-gray-100 dark:border-slate-700',
};
return (
<div className={`${base} ${variants[variant]} ${className}`}>
{children}
</div>
);
}
function CardHeader({ title, subtitle }) {
return (
<div className="mb-4">
<h3 className="text-lg font-semibold leading-tight">{title}</h3>
{subtitle && (
<p className="mt-1 text-sm text-gray-500 dark:text-gray-400">
{subtitle}
</p>
)}
</div>
);
}
function CardFooter({ children }) {
return (
<div className="mt-6 flex items-center gap-3 pt-4 border-t border-gray-100 dark:border-slate-700">
{children}
</div>
);
}
Usage of the component:
<Card variant="elevated">
<CardHeader title="Monthly Revenue" subtitle="Jan 2026" />
<p className="text-3xl font-bold">$48,250</p>
<CardFooter>
<span className="text-sm text-green-600 dark:text-green-400">+12.5% from last month</span>
</CardFooter>
</Card>
User Request: "Build a responsive dashboard layout with a sidebar, top nav, and main content area. Sidebar should collapse on mobile."
Agent Response:
<div class="dashboard">
<nav class="dashboard__topbar" role="navigation" aria-label="Primary">
<button class="sidebar-toggle" aria-label="Toggle sidebar" aria-expanded="false">☰</button>
<h1 class="topbar-title">Dashboard</h1>
<div class="topbar-actions"><!-- user avatar, notifications --></div>
</nav>
<aside class="dashboard__sidebar" role="navigation" aria-label="Sidebar">
<ul role="list">
<li><a href="/overview" aria-current="page">Overview</a></li>
<li><a href="/analytics">Analytics</a></li>
<li><a href="/settings">Settings</a></li>
</ul>
</aside>
<main class="dashboard__content" id="main-content" role="main">
<!-- page content -->
</main>
</div>
.dashboard {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 56px 1fr;
min-height: 100vh;
}
.dashboard__topbar { grid-column: 1 / -1; }
.dashboard__sidebar { display: none; }
@media (min-width: 768px) {
.dashboard {
grid-template-columns: 240px 1fr;
grid-template-rows: 56px 1fr;
}
.dashboard__sidebar { display: flex; flex-direction: column; }
.sidebar-toggle { display: none; }
}
On screens below 768px the sidebar is hidden and a hamburger toggle button appears in the top bar. On tablet and desktop the sidebar is persistently visible at 240px wide, and the main content fills the remaining space.
<button> is always better than a styled <div onClick>. Semantic elements provide keyboard handling, screen reader announcements, and form submission behavior for free.min-width media queries. This prevents desktop assumptions from breaking mobile layouts.min-height instead of fixed height, text-overflow: ellipsis with -webkit-line-clamp for card descriptions, and test with both a single word and a full paragraph to verify layout stability.brightness(0.9) filter to photographic images in dark mode. For decorative SVGs, swap fill colors using currentColor or CSS custom properties.margin-inline-start instead of margin-left, padding-inline-end instead of padding-right). Set dir="rtl" on the root element and verify layout mirrors correctly.Take seb1n/frontend design from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.