Frontend design
Use when a ticket builds or reworks a user-facing frontend surface — a hero, landing page, dashboard, marketing section, or any screen where the *visual quality* matters, not just the markup. Produces distinctive, intentional, production-grade UI that avoids generic template aesthetics. Invoke for "build the landing page", "make this look premium / less templatey", "design the X section", or as the design pack for any high-visibility frontend work.From its SKILL.md
npx -y skills add tmj-90/gaffer --skill frontend-designAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.8 KB, ~2.3k tokens by cl100k_base, as published. Nobody here has run it
Design distinctive, production-grade frontend
Build frontend that looks intentional, opinionated, and specific to the product — not
a default template. The bar is: would this look believable in a real product screenshot?
This pack is about visual quality and design judgement; pair it with frontend-component,
frontend-a11y, and frontend-responsive for structure, semantics, and breakpoints, and
with design-system for the structural layer beneath the aesthetic — the three-tier
token architecture (primitive → semantic → component) and full component state specs. This
pack decides how it should look; design-system decides how that look is structured so it
scales. Don't re-derive tokens or component-state matrices here — consume them from there.
Before you write any code — pick a direction
Generic defaults ("clean minimal") are not a direction. Commit to a specific one and let it drive every decision:
- Editorial / magazine, Swiss / International, Neo-brutalism, Bento layouts, Glassmorphism with real depth, dark or light luxury (disciplined contrast), Scrollytelling, retro-futurism, 3D integration.
- Do not default to dark mode. Choose the direction the product wants.
- Define the palette deliberately (semantic roles, not one accent on grey-on-white) and a real typography pairing strategy — pick fonts with character, with a reason.
- Read the repo's existing tokens/brand first. If a brand exists, extend it in its idiom; do not re-pitch the aesthetic.
Required qualities
Every meaningful surface must demonstrate at least four:
- Hierarchy through scale contrast — a real type scale, not uniform sizes.
- Intentional rhythm in spacing — not the same padding on everything.
- Depth / layering — overlap, shadows, surfaces, or motion; not a flat stack.
- Typography with character and a deliberate pairing.
- Colour used semantically, not just decoratively.
- Designed hover / focus / active states — interaction feels considered.
- Grid-breaking editorial or bento composition where it fits.
- Texture, grain, or atmosphere when the direction calls for it.
- Motion that clarifies flow, never distracts.
- Data visualisation treated as part of the design system, not an afterthought.
Decision checklist (priority order)
Distilled reasoning rules — work them top-down; a failure high on the list outranks polish
lower down. The token/component-state items defer to design-system (don't re-specify them here):
- Accessibility (critical) — contrast ≥ 4.5:1 text / 3:1 large+UI; visible focus rings;
alt text;
aria-labelon icon-only controls; tab order matches visual order; never convey meaning by colour alone; respectprefers-reduced-motion. - Touch & interaction (critical) — ≥ 44×44px targets with ≥ 8px gaps; don't rely on hover for primary actions; every async action shows loading feedback; no instant 0ms state changes.
- Performance (high) — AVIF/WebP, lazy-load below the fold, reserve space so CLS < 0.1; no layout thrash. See the budgets below.
- Style selection (high) — commit to one direction (above) and hold it consistently; SVG icons, never emoji as icons; don't mix flat and skeuomorphic at random.
- Layout & responsive (high) — mobile-first breakpoints, viewport meta, no horizontal scroll, never disable zoom, no fixed-px container widths.
- Typography & colour (medium) — body ≥ 16px, line-height ~1.5, a real type scale, and
semantic colour tokens — no raw hex/
pxin components (architecture:design-system). - Animation (medium) — 150–300ms, motion conveys meaning (not decoration), compositor-only, honour reduced-motion.
- Forms & feedback (medium) — visible labels (never placeholder-only), errors beside the field, helper text, progressive disclosure.
- Navigation (high) — predictable back, bottom nav ≤ 5 items, deep-linkable state.
- Charts & data (low) — legends, tooltips, accessible colours, never colour-only encoding.
For the tokens (three-tier architecture, dark-mode seam) and component state matrices
(button/input/card/… across default/hover/focus/active/disabled/loading/error), use
design-system — this pack assumes that structure and focuses on the visual judgement on top.
Steps
- Read the lore + tokens first.
search_lore(Memory MCP) for the design system, brand voice, and component conventions. Inspecttokens.css/theme files and a sibling surface; match the framework and styling system — never introduce a competing one. - Commit to one direction (above) and a palette + type pairing before building.
- Define design tokens as CSS custom properties — colour, type scale (
clamp()for fluid sizes), spacing, durations, easings, in the three-tier architecture fromdesign-system(primitive → semantic → component). Reference tokens everywhere; hardcode no raw hex orpxfont sizes in component files. - Build semantic HTML first —
header/nav/main/section/footer, realbuttons, a singleh1, labelled landmarks. Hierarchy comes from structure + scale, notdivsoup. - Layer and compose — use overlap, surfaces, and a grid you deliberately break for editorial moments; avoid uniform card grids with no hierarchy.
- Design every interactive state — hover/focus/active/disabled — so they feel
designed, with visible, accessible focus rings (never
outline: nonewith no replacement). - Animate on the compositor only —
transform,opacity,clip-path,filter(sparingly). Never animatewidth/height/top/left/margin/font-size. Usewill-changenarrowly and remove it when done; respectprefers-reduced-motion. - Mind performance budgets (see below) — fluid type, optimised images with explicit
dimensions, deferred non-critical JS, ≤2 font families with
font-display: swap. - Verify + evidence. Run the repo's tests + lint; for visual-heavy work prefer
screenshot/visual checks at key breakpoints. Record
test_outputviarecord-evidenceand submit for review.
Build / Test
- Run the repo's configured test + lint; type-check (
tsc --noEmit) for TS surfaces. - Visual regression carries more signal than brittle markup assertions for visual work: screenshot the key breakpoints (320 / 768 / 1024 / 1440) and both themes if both exist.
- Run an automated a11y check (axe/Lighthouse) and verify keyboard nav + reduced-motion.
- The DoD is verified by the repo's configured commands — record the output as evidence.
Performance budgets (Core Web Vitals)
- Targets: LCP < 2.5s · INP < 200ms · CLS < 0.1 · FCP < 1.5s.
- Bundle: landing < 150kb JS / < 30kb CSS gzipped (app pages < 300kb / < 50kb).
- All images: explicit
width/height; heroloading="eager"+fetchpriority="high"; below-foldloading="lazy"; prefer AVIF/WebP; never ship images far beyond rendered size. - Preload only the hero image + the single critical font; defer non-critical CSS/JS;
dynamically import heavy libs (e.g.
await import('gsap')).
Security (frontend)
- No unsanitised HTML — avoid
dangerouslySetInnerHTML/innerHTMLunless sanitised with a vetted sanitizer first; escape dynamic values. - Third-party scripts load
async/defer, with SRI when served from a CDN. - A production CSP should be configured (prefer per-request nonce over
'unsafe-inline').
Review checklist (a design reviewer must check)
- Doesn't look like a default Tailwind/shadcn/template — has a point of view.
- At least four required qualities are clearly present (hierarchy, rhythm, depth, type, semantic colour, designed states, composition, atmosphere, motion, data-viz).
- Hierarchy via scale, not uniform emphasis; rhythm is intentional, not uniform padding.
- Tokens, not hardcoded values — no raw hex /
pxfont sizes leaking into components. - Designed hover/focus/active states; focus is visible and accessible.
- Motion is compositor-only and respects
prefers-reduced-motion. - Semantic HTML + a11y — landmarks, one
h1, labelled controls, contrast holds. - Performance — images have dimensions, no obvious render-blocking, no layout shift,
fonts capped and
swaped. - Both themes feel intentional if both exist.
Rules
- Pick a specific direction and a deliberate palette + type pairing — never ship "generic clean".
- Tokens for all colour/spacing/type; no hardcoded palette/sizes in components.
- Animate compositor-friendly properties only; honour reduced-motion.
- Semantic HTML, accessible focus, no unsanitised HTML; match the repo's framework + styling system.
Capture lore
This skill is one of the places durable, reusable knowledge naturally surfaces:
A design-system fact this repo enforces — the token set, the brand voice, a chosen aesthetic direction, a motion philosophy, or a "never do X" visual rule. That kind of fact is lore. Capture it via the lore-capture
protocol in your brief (CLAUDE.factory.md, step 11 "Memory contribution"):
call the Memory MCP suggest_lore once at the close of your work — reusable
conventions, gotchas, decisions, and boundaries only, never per-ticket trivia.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.