Best for
- Planning a new page or feature UI before implementing
- Choosing between component patterns (modal vs. inline, table vs. cards)
- Designing forms with complex validation or multi-step flows
event4u-app/agent-config/src/skills/fe-design/SKILL.md
Reference for frontend-design heuristics — component architecture, layout patterns, form/table design, responsive strategy, a11y, UX principles. Stack-agnostic; cited by directives/ui/design.ts.
Decision brief
Reference for frontend-design heuristics — component architecture, layout patterns, form/table design, responsive strategy, a11y, UX principles. Stack-agnostic; cited by directives/ui/design.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/fe-design"Inspect the Agent Skill "fe-design" from https://github.com/event4u-app/agent-config/blob/0adf49a8ae84b0ff6e2de8759eea43257e020eff/src/skills/fe-design/SKILL.md at commit 0adf49a8ae84b0ff6e2de8759eea43257e020eff. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Show progress indicator (step numbers or progress bar)
When directives/ui/design.ts (or any caller) cites this skill:
fe-design is a universal reference skill, not an executor. It carries stack-agnostic heuristics that the UI directive set cites; it does not own the flow.
Do NOT use this skill to:
directives/ui/design.ts produces the design brief (layout, components, states, microcopy, a11y). Selection decisions (style, semantic color tokens, typography pairing, layout pattern, anti-patterns) come grounded from design-intelligence — run its corpus query first; fall back t…
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 95/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 7 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
fe-design is a universal reference skill, not an executor. It carries
stack-agnostic heuristics that the UI directive set cites; it does not
own the flow.
| Concern | Owner |
|---|---|
| Layout / states / microcopy lock | directives/ui/design.ts |
| Stack-dispatched implementation | directives/ui/apply.ts → blade-ui / livewire / flux / react-shadcn-ui |
| Existing-component inventory + tokens | existing-ui-audit (mandatory pre-step) |
| Grounded selection (style, color tokens, typography, pattern, anti-patterns) | design-intelligence — corpus-grounded; this skill stays the heuristic layer and invokes it |
| Design-review polish loop | directives/ui/review.ts + directives/ui/polish.ts |
Cite this skill when:
Do NOT use this skill to:
existing-ui-auditdirectives/ui/ orchestratorResource-first, before taste. Any request to recreate / redesign / mock / prototype / improve an existing UI runs the resource-first context gate FIRST — search the project's tokens/design-system/assets, hard-stop and ask when a referenced source is inaccessible (never invent from memory), and prefer code over screenshots for exact values. Planning here starts from that inventory, not from generic aesthetic memory (design-artifact lifecycle, Inspect stage).
directives/ui/design.ts produces the design brief (layout, components,
states, microcopy, a11y). Selection decisions (style, semantic color
tokens, typography pairing, layout pattern, anti-patterns) come grounded
from design-intelligence — run its
corpus query first; fall back to the heuristics in this reference only
where the corpus reports an evidence gap or the audit already pins a
project pattern. Stack-specific choices come from the dispatched
implementation skill, not from here.
Page layout
├── Header (static)
├── Navigation (interactive — active state)
├── Content area
│ ├── Page heading + actions (static)
│ ├── Filters (interactive — reactive)
│ ├── Data display (interactive — table / cards)
│ └── Pagination (interactive)
└── Footer (static)
The stack-specific mapping (Blade partial vs. Livewire component vs. React island vs. Vue SFC) is the apply-step's concern, not this skill's.
| Kind | When | Example |
|---|---|---|
| Static partial | No interactivity, server-rendered only | Header, footer, static info |
| Reusable UI component | Props-only, no state | Button, badge, card shell |
| Stateful component | Needs server interaction or local state | Forms, tables, filters |
| Library primitive | Standard UI from a design system | Modal, dropdown, input, toast |
| Client-only micro-interaction | No server roundtrip needed | Toggle, accordion, clipboard |
react-shadcn-ui § Component workshop), never a generic mandate.| Fields | Layout | When |
|---|---|---|
| 1–3 fields | Single column | Simple forms (login, search) |
| 4–8 fields | Two columns on desktop, single on mobile | Standard CRUD forms |
| 8+ fields | Sections with headings or tabs/steps | Complex entity forms |
| Related pairs | Side by side (first/last name, city/zip) | Logically paired fields |
Step indicator (1 — 2 — 3)
├── Step 1: Basic info → Next
├── Step 2: Details → Back / Next
└── Step 3: Review + Submit → Back / Submit
| Screen | Strategy |
|---|---|
| Desktop (≥1024px) | Full table with all columns |
| Tablet (768–1023px) | Hide less important columns |
| Mobile (<768px) | Card layout or horizontal scroll |
| Prefix | Min width | Target |
|---|---|---|
sm: | 640px | Large phones |
md: | 768px | Tablets |
lg: | 1024px | Small laptops |
xl: | 1280px | Desktops |
2xl: | 1536px | Large screens |
| Element | Mobile | Desktop |
|---|---|---|
| Navigation | Hamburger menu | Sidebar or top nav |
| Forms | Single column | Two columns |
| Tables | Cards or scroll | Full table |
| Actions | Bottom sheet / FAB | Inline buttons |
| Filters | Collapsible panel | Sidebar or inline |
aria-label<button>, <nav>, <main>, <form> — not <div> for everything| Mistake | Fix |
|---|---|
<div onclick> | Use <button> |
| Color-only status | Add icon or text alongside color |
| Missing form labels | Add <label for="..."> |
| Auto-playing content | Provide pause/stop control |
| Tiny click targets | Min 44×44px touch target |
Before adding any animation to a UI element, run through this decision tree:
1. Should this animate at all?
2. Which easing?
3. How long?
transform.@media (prefers-reduced-motion: reduce) — gentler animation (reduced distance/opacity), NOT display:none. Why: vestibular disorders make motion UI unusable; reducing is better than removing.4. What to animate?
Animate transform and opacity only. Why: these run on the GPU compositor thread, not the main thread; they never trigger layout or paint.
scale(0) → scale(1) is wrong. Why: nothing in the real world appears from nothing. Use scale(0.95) + opacity: 0 → scale(1) + opacity: 1 instead.
text-wrap: pretty on body copy — avoids widows/orphans without manual
breaks; cheap, no layout risk. (Display headlines: text-wrap: balance.)repeating-linear-gradient(45deg, #E5E5E5 0 10px, #F5F5F5 10px 20px) +
product shot (1200×800)) instead of a hand-drawn SVG or stock-ish filler.
A placeholder signals "asset needed"; a weak illustration signals nobody
had the asset. Never Lorem-ipsum copy in review-bound output
(per output-discipline) — use short label-style skeleton copy.This skill produces ONE refined solution by default. Plan the variation decision before generating — do not reflexively emit one generic design when exploration was asked, nor spam options when one production answer was asked.
daf-requested-variations.)daf-requested-variations,
daf-unwanted-variations.)Hand off the actual variation mechanics — the basic→bold method and the
single-file tweak-panel (CSS custom properties + floating "Tweaks" panel +
localStorage) — to design-variations: this
section owns the planning decision, that skill owns the execution.
Before applying any heuristics from this reference, check the project root
for DESIGN.md and/or PRODUCT.md (written by design-system-capture):
DESIGN.md present → use its captured radius/shadow/motion/spacing as
project constraints. The heuristics in this skill are fallbacks for
gaps, not overrides for captured decisions.PRODUCT.md present → honor its interaction patterns (empty-state approach,
mutation feedback policy, filter persistence) in any UI design that touches
those surfaces.Flag any new decision for future capture: "This establishes a new pattern — suggest adding to PRODUCT.md: [pattern description]."
Before applying heuristics, determine the register (see
docs/guidelines/design-modes.md):
brand mode (impression-first) vs product mode (task-first). Form-heavy, table-heavy,
and dashboard surfaces are almost always product mode — favour the standard
patterns in this skill (Form Design, Table Design) over expressive variance.
Marketing/landing surfaces are brand mode — let the Aesthetic-direction section
commit to a deliberate, distinctive direction.
When this reference is cited for a UI planning task, emit one line declaring the design read before any heuristics are applied:
Reading this as: <page-kind> for <audience>, <vibe> language, leaning <design-system>.
If context is incomplete: state so and proceed exploratory — do NOT block.
Anti-Default Discipline: Before committing to any layout or component
pattern, cross-check your first impulse against
design-antipatterns.md —
the L1/L2 "AI landing page" layout (centered hero + 3-column grid + CTA), the
V1 side-stripe card, the T7 default-font pick, and V2 decorative glassmorphism.
If a tell was the first impulse, choose a different approach or explicitly
justify why this brief calls for it. (The full pre-proposal scan is under
Anti-slop discipline below.)
Audit-pinned tokens and components always take precedence (see existing-ui-audit). When the audit pins an aesthetic, honor it without deviation. When the audit shows no pinned aesthetic — greenfield surface, marketing landing page, brand-new feature without design-system precedent — the design brief is allowed (and expected) to commit to a deliberate direction instead of defaulting to safe centered hero + 3-column features + CTA.
Typography pairings (73 curated heading/body combinations with Google
Fonts URLs + Tailwind config) and icon-system guidance (104 Phosphor
entries with import code) come grounded from
design-intelligence
(--domain typography, --domain icons) — query before picking from
memory.
Pick one direction up front and let composition, typography, and color follow from it. Avoid the "neutral AI default": uniform grid, system fonts as the visible body face, purple-to-blue gradients on white, predictable spacing. A direction that fits the brand intent (editorial / brutalist / refined / playful / retro / maximal / minimal / etc.) and is consistent across the page beats hedging.
Surface the chosen direction in the design brief as a one-line statement (e.g. aesthetic: editorial-magazine — asymmetric grid, serif display + sans body, generous gutters). The apply step (react-shadcn-ui / blade-ui / livewire / flux) reads this line and matches typography, spacing, and motion to it; if no line is present, the apply step uses project defaults.
When directives/ui/design.ts (or any caller) cites this skill:
state.ui_audit first — review the audit produced by existing-ui-audit; it is mandatory. Stop and request the audit if missing.When this skill's content is folded into a design brief or review:
[audit override] and link to the audit entry.directives/ui/ — owns the UI flowexisting-ui-audit — inventory before designblade-ui — Blade template implementationlivewire — Livewire component implementationflux — Flux component library usagereact-shadcn-ui — React + shadcn primitivesdashboard-design — monitoring dashboard design (different domain)existing-ui-audit first — the audit's component/token inventory is the canonical source for "what already exists in this project". Reinventing is the #1 failure mode.Before proposing any UI layout, component, or aesthetic direction, pull
docs/guidelines/design-antipatterns.md
and scan the Visual (V1–V7), Layout (L1–L8), and Quality-floors (Q1–Q12) sections.
If the first-impulse design matches a listed pattern, either choose a different
approach or explicitly invoke the override condition in the design brief.
directives/ui/design.ts.Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
event4u-app/agent-config
Grounded design brief from the adopted corpus — style, WCAG-checked color tokens, typography, layout pattern, anti-patterns. Use on ui-design-brief or any which-style/palette/font/chart decision.
event4u-app/agent-config
Use BEFORE writing or editing any non-trivial UI — inventories components, design tokens, shadcn primitives, and reusable patterns into state.ui_audit. Hard gate for the ui directive set.
nexu-io/open-design
This skill encodes Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great.