一键导入
frontend-design
Create distinctive frontend interfaces: components, pages, dashboards, React, HTML/CSS. Polished code, no generic AI aesthetics.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Create distinctive frontend interfaces: components, pages, dashboards, React, HTML/CSS. Polished code, no generic AI aesthetics.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | frontend-design |
| description | Create distinctive frontend interfaces: components, pages, dashboards, React, HTML/CSS. Polished code, no generic AI aesthetics. |
This skill guides 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.
The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
Before coding, understand the context and commit to a BOLD aesthetic direction:
CRITICAL: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
Focus on:
NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. Avoid converging on the same fonts across generations. Exception: When mk3y-design is active, use its specified fonts (Space Grotesk + JetBrains Mono).
IMPORTANT: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
aria-label<label> or aria-labelonKeyDown/onKeyUp)<button> for actions, <a>/<Link> for navigation (not <div onClick>)alt (or alt="" if decorative)aria-hidden="true"aria-live="polite"<button>, <a>, <label>, <table>) before ARIA<h1>–<h6>; include skip link for main contentscroll-margin-top on heading anchorsfocus-visible:ring-* or equivalentoutline-none / outline: none without focus replacement:focus-visible over :focus (avoid focus ring on click):focus-within for compound controlsautocomplete and meaningful nametype (email, tel, url, number) and inputmodeonPaste + preventDefault)htmlFor or wrapping control)spellCheck={false})… and show example patternautocomplete="off" on non-auth fields to avoid password manager triggersbeforeunload or router guard)(required) text)prefers-reduced-motion (provide reduced variant or disable)transform/opacity only (compositor-friendly)transition: all—list properties explicitlytransform-origin<g> wrapper with transform-box: fill-box; transform-origin: centerease-out for entering, ease-in for exiting; never linear for UI… not ..." " not straight "10 MB, ⌘ K, brand names…: "Loading…", "Saving…"font-variant-numeric: tabular-nums for number columns/comparisonstext-wrap: balance or text-pretty on headings (prevents widows)max-w-prose or equivalent)truncate, line-clamp-*, or break-wordsmin-w-0 to allow text truncation<img> needs explicit width and height (prevents CLS)loading="lazy"priority or fetchpriority="high"virtua, content-visibility: auto)getBoundingClientRect, offsetHeight, offsetWidth, scrollTop)<link rel="preconnect"> for CDN/asset domains<link rel="preload" as="font"> with font-display: swap<a>/<Link> (Cmd/Ctrl+click, middle-click support)useState, consider URL sync via nuqs or similar)touch-action: manipulation (prevents double-tap zoom delay)-webkit-tap-highlight-color set intentionallyoverscroll-behavior: contain in modals/drawers/sheetsinert on dragged elementsautoFocus sparingly—desktop only, single primary input; avoid on mobileenv(safe-area-inset-*) for notchesoverflow-x-hidden on containers, fix content overflowdvh (dynamic viewport height) instead of 100vh for full-screen mobile layouts — 100vh breaks under mobile browser chromez-index: 9999color-scheme: dark on <html> for dark themes (fixes scrollbar, inputs)<meta name="theme-color"> matches page background<select>: explicit background-color and color (Windows dark mode)Intl.DateTimeFormat not hardcoded formatsIntl.NumberFormat not hardcoded formatsAccept-Language / navigator.languages, not IPvalue need onChange (or use defaultValue for uncontrolled)suppressHydrationWarning only where truly neededhover: state (visual feedback)cursor-not-allowed; visually distinct from enabled& over "and" where space-constrainedz-10 / z-20 / z-30 / z-40 / z-50). Never arbitrary z-[9999]. Fixed nav → z-50, dropdowns → z-40.bg-black/50, text-white/80.bg-primary, text-success — never bg-[var(--color-primary)].space-y-4, space-x-2, gap-4 on flex/grid.group / peer for parent/sibling-state styling — don't reach for JS for simple hover/focus reveal.[...] for genuine one-offs (w-[350px]); if it's reused, add it to the theme.size-* for square dimensions (size-6) instead of separate w-6 h-6.shrink-0 / shrink shorthands over flex-shrink-0.@container + @lg: for component-internal responsiveness — media queries are for the page, container queries are for the component.dark: prefix on the same element, not a parallel stylesheet.animate-pulse, animate-spin) over hand-rolled @keyframes for common effects. animate-bounce only on a single CTA, never multiples (motion sickness).duration-150 to duration-300. Never duration-1000+ for UI.focus-visible:ring-2 for keyboard focus, not focus:ring-2 (avoids ring on mouse click).motion-reduce:animate-none on anything that animates to honor prefers-reduced-motion.min-h-[44px] on mobile buttons.disabled: variants: disabled:opacity-50 disabled:cursor-not-allowed on interactive elements.@tailwindcss/typography): prose prose-lg for long-form/markdown content instead of restyling headings manually.content paths in tailwind.config precisely — anything missed gets purged at build.@apply bloat — utilities in markup beat a wall of @apply rules. Use it sparingly for true component-level abstractions.@tailwindcss/forms, typography, aspect-ratio.<svg class="size-6" width="24" height="24"> — prevents layout shift before CSS loads.bg-linear-to-r (the old bg-gradient-to-r is deprecated in v4).user-scalable=no or maximum-scale=1 disabling zoomonPaste with preventDefaulttransition: alloutline-none without focus-visible replacementonClick navigation without <a><div> or <span> with click handlers (should be <button>).map() without virtualizationaria-labelIntl.*)autoFocus without clear justificationThese are frequently overlooked issues that make UI look unprofessional:
| Rule | Do | Don't |
|---|---|---|
| No emoji icons | Use SVG icons (Heroicons, Lucide, Simple Icons) | Use emojis like 🎨 🚀 ⚙️ as UI icons |
| Stable hover states | Use color/opacity transitions on hover | Use scale transforms that shift layout |
| Correct brand logos | Research official SVG from Simple Icons | Guess or use incorrect logo paths |
| Consistent icon sizing | Use fixed viewBox (24x24) with w-6 h-6 | Mix different icon sizes randomly |
| Rule | Do | Don't |
|---|---|---|
| Cursor pointer | Add cursor-pointer to all clickable/hoverable cards | Leave default cursor on interactive elements |
| Hover feedback | Provide visual feedback (color, shadow, border) | No indication element is interactive |
| Smooth transitions | Use transition-colors duration-200 | Instant state changes or too slow (>500ms) |
| Rule | Do | Don't |
|---|---|---|
| Glass card light mode | Use bg-white/80 or higher opacity | Use bg-white/10 (too transparent) |
| Text contrast light | Use #0F172A (slate-900) for text | Use #94A3B8 (slate-400) for body text |
| Muted text light | Use #475569 (slate-600) minimum | Use gray-400 or lighter |
| Border visibility | Use border-gray-200 in light mode | Use border-white/10 (invisible) |
| Rule | Do | Don't |
|---|---|---|
| Floating navbar | Add top-4 left-4 right-4 spacing | Stick navbar to top-0 left-0 right-0 |
| Content padding | Account for fixed navbar height | Let content hide behind fixed elements |
| Consistent max-width | Use same max-w-6xl or max-w-7xl | Mix different container widths |
Before delivering UI code, verify these items:
cursor-pointerprefers-reduced-motion respectedRun the announcement round for a finished project: attribution check, directory submissions, launch-post drafts in Mike's voice. Drafts only — never posts. Trigger: /announce <project>, 'announce', 'launch round', 'tell people about'.
Novel ignition ritual for story-bible: 3-line 'previously on' + one pulling question. Body-double for getting into writing state, zero obligation. Trigger: /ignite, 'ignite', 'novel time', 'story time'.
Read/post Twitter/X via `bird` CLI: tweets, threads, search, timelines, bookmarks, follows, lists, media.
Drive VISIBLE Chrome with real profile/logins (CDP :9222). Screenshots, JS eval, interactive element picking, cookies. Frontend testing, authed flows, anything user should see. Headless text-only reading → Browser* tools. Linux + macOS.
Read before git commits.
Compact current conversation into handoff doc for another agent.