From claudster
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics while strictly adhering to the user's technical standards.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claudster:frontend-designThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill guides the creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
This skill guides the creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
CRITICAL: You must ignore generic React patterns. Instead, you represent the specific technical architecture defined in the user's stack.
Mandatory Reference:
Before writing any component logic, state management, or hooks, you must cross-reference and apply the patterns found in:
./references/my-tech-stack.md
Specifically, you must:
useDebounce and useToggle from the reference.useMemo and useCallback strictly according to the "Memoization Rules" in the reference.ErrorBoundary pattern provided.Before coding, understand the context and commit to a BOLD aesthetic direction:
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
my-tech-stack.md.For data-heavy views that switch entities (profile A → profile B), enforce deterministic transitions:
st.empty()) that replaces its entire content on each render pass.st.empty() — dynamic keys cause the framework to create new DOM nodes instead of replacing existing ones, leaving ghost/shadow copies visible for 1-2 seconds until frontend reconciliation catches up.Acceptance rule: users must only perceive old state → loader → new state, with no stale intermediate artifacts.
Calibrate these three dials per project before writing any component. Declare them in a comment at the top of the main design file.
// DESIGN_VARIANCE: 7 // 1 (safe/corporate) → 10 (experimental/editorial)
// MOTION_INTENSITY: 5 // 1 (static) → 10 (cinematic)
// VISUAL_DENSITY: 4 // 1 (minimal/lots of space) → 10 (data-dense/information-heavy)
| Dial | 1–3 | 4–6 | 7–10 |
|---|---|---|---|
DESIGN_VARIANCE | Standard grid, safe palette | Distinctive but accessible | Experimental layout, bold choices |
MOTION_INTENSITY | Opacity fade only | Entrance animations, hover states | Parallax, stagger, spring physics |
VISUAL_DENSITY | Hero + CTA, generous whitespace | Cards with secondary info | Dashboard-style, compact rows |
Rule: Do not override the user's declared dials. If undeclared, infer from context and state your assumption.
These are signals of generic AI output. Every instance must be eliminated:
Company Name, Your Brand, Hello, World!, Example CorpMeridian Analytics, Kaspar & Voss, Orin Health$1,234.56, 1,234 users, 99.9% uptime, 42 orders$14,820, 3,241 customers, 99.4% uptime, 127 orders#FF6B6B coral-pink, #6C63FF purple-blue gradient (the two default AI accent colors)6rem+ need letter-spacing: -0.03em. Text under 0.875rem needs letter-spacing: 0.01em.line-height: 1.6 for body, 1.1–1.2 for large headings, 1.4 for UI labels.0.75 / 0.875 / 1 / 1.125 / 1.5 / 2 / 3 / 4.5rem./* Correct optical sizing */
.hero-heading {
font-size: clamp(3rem, 6vw + 1rem, 6rem);
line-height: 1.05;
letter-spacing: -0.04em;
}
.body-text {
font-size: 1rem;
line-height: 1.625;
letter-spacing: 0;
}
from-purple-500 to-blue-600 or equivalent). Use if and only if the brand explicitly requires it.hsl(220 15% 8%) range, not pure black (#000). Pure black with white text fails contrast for long reading./* ✅ Correct token setup */
:root {
--bg: hsl(220 15% 97%);
--surface: hsl(220 15% 100%);
--text: hsl(220 25% 12%);
--muted: hsl(220 10% 50%);
--border: hsl(220 15% 88%);
--accent: hsl(38 92% 50%); /* Amber — unexpected, not AI-default */
--destructive: hsl(0 72% 51%);
}
When DESIGN_VARIANCE > 4, ban the centered-hero-with-CTA default layout. Use instead:
| Layout Pattern | When to Use |
|---|---|
| Editorial split — large text left, visual right (or reversed) | Brand/marketing pages |
| Bento grid — asymmetric tiles of varying sizes | Dashboards, feature showcases |
| Fullbleed scroll narrative — content revealed on scroll sections | Storytelling, case studies |
| Sidebar dock + content — persistent nav or filter rail | Application interfaces |
| Masonry — uneven column heights | Media, portfolio grids |
| Timeline / sequence — vertical progression with connectors | Onboarding, process flows |
Never stack all sections centered on a 1200px max-width container unless DESIGN_VARIANCE ≤ 3.
Every interactive element must implement all four states before the component is done:
| State | What to Implement |
|---|---|
| Loading | Skeleton, spinner, or disabled appearance while data fetches |
| Empty | Non-generic empty state with context-specific message + action |
| Error | Specific error message, retry action, not just "Something went wrong" |
| Tactile | Hover + active (pressed) visual feedback — scale, shadow, or color shift |
// ✅ Complete interactive state example
function DataCard({ id }: { id: string }) {
const { data, error, status } = useQuery(...)
if (status === 'pending') return <CardSkeleton />
if (status === 'error') return <ErrorCard message={error.message} onRetry={refetch} />
if (!data.items.length) return <EmptyCard title="No records yet" action={<CreateButton />} />
return (
<div className="group transition-all hover:shadow-md hover:-translate-y-0.5 active:scale-[0.99]">
{/* content */}
</div>
)
}
Never use placeholder data that signals the interface is unfinished:
| ❌ Avoid | ✅ Use Instead |
|---|---|
| "Lorem ipsum dolor sit amet" | Domain-appropriate text: "Q3 revenue shows 14% growth vs prior quarter" |
| User: "John Doe" | Plausible name + avatar initial: "Margot Belleview" |
| Date: "January 1, 2024" | Recent plausible date: "Feb 12, 2026" |
| Metric: "1,234" | Realistic variance: "3,817" (not round numbers with too many digits) |
| Chart data: constant line | Realistic noise with trend: slight growth with variance |
Rule: Each piece of sample data should make a reviewer believe it could be real production data, not a template. If the user provides real data patterns, use them precisely.
npx claudepluginhub saajunaid/junai --plugin claudsterProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.