npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Build common layouts with Tailwind flexbox and grid utilities for dashboard, marketing, and app shells
Generates shadcn/Tailwind layouts applying CSS mental models for height chains, flex overflow, grid parents, and scroll containers. Use for creating layouts, fixing flex/grid/height/scroll issues.
Provides Tailwind CSS code examples for advanced layouts using CSS Grid and Flexbox, including Holy Grail, responsive grids, template areas, auto-fill/fit, and subgrid.
Provides Tailwind CSS utility patterns for responsive layouts, flexbox, grid, typography, colors, and components. Use for styling React/Vue/Svelte apps, design systems, and CSS optimization.
Share bugs, ideas, or general feedback.
Build common layouts with Tailwind flexbox and grid utilities for dashboard, marketing, and app shells
flex) for one-dimensional layouts (rows or columns). Use grid (grid) for two-dimensional layouts.gap-* for spacing between items instead of margin. It is consistent and does not add space to the outer edges.min-h-screen on the root layout to ensure it fills the viewport.overflow-auto on scrollable regions with fixed-height parents.sticky top-0 for elements that should stick during scroll.// App shell: sidebar + header + scrollable content
function AppLayout({ children }: { children: React.ReactNode }) {
return (
<div className="flex h-screen bg-gray-50">
{/* Fixed sidebar */}
<aside className="w-64 bg-white border-r border-gray-200 flex flex-col">
<div className="p-4 border-b border-gray-200">
<Logo />
</div>
<nav className="flex-1 overflow-y-auto p-4">
<NavLinks />
</nav>
</aside>
{/* Main area */}
<div className="flex-1 flex flex-col overflow-hidden">
{/* Sticky header */}
<header className="h-16 bg-white border-b border-gray-200 flex items-center px-6 shrink-0">
<SearchBar />
<UserMenu />
</header>
{/* Scrollable content */}
<main className="flex-1 overflow-y-auto p-6">{children}</main>
</div>
</div>
);
}
// Centered content (both axes)
function CenteredPage({ children }: { children: React.ReactNode }) {
return (
<div className="min-h-screen flex items-center justify-center bg-gray-50">
<div className="w-full max-w-md p-8">{children}</div>
</div>
);
}
// Holy grail layout
function MarketingPage() {
return (
<div className="min-h-screen flex flex-col">
<header className="h-16 border-b flex items-center px-6">Header</header>
<main className="flex-1 container mx-auto px-4 py-8">Content</main>
<footer className="h-24 border-t flex items-center px-6">Footer</footer>
</div>
);
}
// Auto-fit card grid
function CardGrid({ children }: { children: React.ReactNode }) {
return (
<div className="grid grid-cols-[repeat(auto-fill,minmax(300px,1fr))] gap-6">{children}</div>
);
}
// Two-column form layout
function FormLayout() {
return (
<form className="grid grid-cols-1 md:grid-cols-2 gap-x-6 gap-y-4">
<div className="space-y-1">
<label className="text-sm font-medium">First Name</label>
<input className="w-full border rounded-md px-3 py-2" />
</div>
<div className="space-y-1">
<label className="text-sm font-medium">Last Name</label>
<input className="w-full border rounded-md px-3 py-2" />
</div>
<div className="md:col-span-2 space-y-1">
<label className="text-sm font-medium">Email</label>
<input className="w-full border rounded-md px-3 py-2" type="email" />
</div>
</form>
);
}
Flexbox vs Grid decision:
Common flexbox patterns:
flex items-center justify-between — space between with vertical centering (header, toolbar)flex flex-col gap-4 — vertical stack with consistent gaps (form, sidebar)flex flex-wrap gap-4 — wrapping row with gaps (tag list, button group)flex-1 on a child — fill remaining space (main content area)Common grid patterns:
grid grid-cols-3 gap-6 — fixed columnsgrid grid-cols-[repeat(auto-fill,minmax(250px,1fr))] — responsive auto-fillgrid grid-cols-[200px_1fr] — sidebar + contentgrid grid-rows-[auto_1fr_auto] — header + content + footerSticky element gotchas:
sticky requires the parent to have scrollable overflowsticky does not work inside overflow: hidden containersz-10 or similar on sticky elements to prevent content from overlappingThe container utility: Centers content with responsive max-widths. Configure in Tailwind:
theme: {
container: {
center: true,
padding: '1rem',
screens: { '2xl': '1400px' },
},
},
https://tailwindcss.com/docs/flex