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
Frontend design heuristics — and, outside the ticket engine, the loop that applies them: audit, brief, inventory, build, review. Use when building or changing any UI, not only when planning one.
Decision brief
Frontend design heuristics — and, outside the ticket engine, the loop that applies them: audit, brief, inventory, build, review.
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/a36d4658de87e81bda8299dc3a01b9b9ce583af5/src/skills/fe-design/SKILL.md at commit a36d4658de87e81bda8299dc3a01b9b9ce583af5. 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
When directives/ui/design.ts (or any caller) cites this skill:
One question decides which mode you are in: is a /implement-ticket run dispatching this?
1. Audit first — run existing-ui-audit. What already exists (components, tokens, layout conventions) outranks every heuristic below. Reinventing an existing component is the 1 failure mode. 2. Brief — cover the same five keys the engine requires before any code: layout, componen…
Twelve universal floors that do not vary by mode, register, intent or stack. They were inline here until the delivery point moved: a floor read at skill-load time can be a compaction away from the write it governs (ADR-227).
Inside a /implement-ticket run, fe-design is a universal reference skill: it carries stack-agnostic heuristics the UI directive set cites, and it does not own the flow. The ownership table below applies to that mode. Outside the engine the table has no dispatcher behind it — the…
Permission review
The documentation asks the agent to read local files, directories, or repositories.
Load the reference file whose sections the task needs — never all of them by default:Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 100/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
One question decides which mode you are in: is a /implement-ticket run
dispatching this?
| Situation | Who owns the UI write | This skill is |
|---|---|---|
| A ticketed run — the UI directive set is dispatching | directives/ui/* | a reference it cites |
| Anything else — "build me the page", "improve this form", "implement the approved design" | you, in this turn | the executor |
| A renderer axis is in play — WebGL / Three.js / canvas / scroll-scrubbed video | still you — the renderer is a grounding question, not a second executor | the executor, grounded via search_stack |
The third row is an axis, not an owner. Renderer selection resolves through
machinery that already exists: search_stack in
corpus-grounding
(scripts/decision_engine.ts), whose stack corpus carries threejs.csv among
its stacks, read beside the register in
design-intelligence
§ Register. No second frontend executor is declared, and none is needed: a
renderer changes what you ground against, never who writes the UI.
Outside the engine, nothing else owns the design quality of a UI write. Reading this skill and then writing the UI from priors is the failure it exists to prevent — the loop below is not optional context, it is the work.
Skip only when the change is ui-trivial, decidable off the diff: ≤ 1 file,
≤ 5 changed lines, no new component, no new state, no new dependency. Anything
else runs the loop.
Audit first — run existing-ui-audit.
What already exists (components, tokens, layout conventions) outranks every
heuristic below. Reinventing an existing component is the #1 failure mode.
Brief — cover the same five keys the engine requires before any code:
layout, components, states, microcopy, a11y. states means all
five of empty, loading, error, success, disabled — a brief missing
one is unfinished, not concise.
Inventory — only when an artifact was provided, and before you build.
List the artifact's interactions, keyframes, and script includes from its
source (design-fidelity-mechanics § Data-basis ladder — read it, do not
look at a picture of it). Then place every listed item in exactly one
bucket, using the engine's own names (apply.ts, COVERAGE_BUCKETS) so the
two surfaces read the same. Nothing enforces that they stay the same —
this is a copied vocabulary, not a shared constant, and no test pins it;
renaming a bucket in the engine leaves this list stale and silent:
| Bucket | Meaning |
|---|---|
honoured | carried over as-is |
translated | carried over in a different shape (a handler became a framework binding) |
flagged | not carried over — with the reason, in the output |
Dropping a handler stays allowed; hiding one does not. An item in no bucket
is the failure this step exists to catch — "missing JavaScript" is what it
looks like from the user's side. Inside the engine this is enforced
(apply.ts, COVERAGE_BUCKETS, an unaccounted item is a halt); out here it
is a duty you carry, and nothing checks it for you. (fixture:
daf-adhoc-port-coverage.)
Build — against the audit's primitives, in the project's stack. Where the
artifact's own markup/CSS/JS is stack-compatible, adapt that code;
re-deriving it from scratch is a deviation needing confirmation
(design-fidelity-mechanics § Adopt the code).
Review, then re-enter — run design-review
before calling it done, and scope the verdict honestly: render-scoped when
you can render it, otherwise explicitly static-scoped, naming which checks
actually ran. "Looks good" with neither scope named is a verdict without
evidence. Findings → fix them and re-enter step 5, at most 2 rounds,
and stop early on a null: a round that produces no new finding ends
the loop, and a round that produces only findings the provided artifact
already covers produces no new finding. At the 2-round ceiling with findings
still open, stop and hand the remaining list back — ship-as-is or abort is
the user's call, never another silent pass. Judgement alone never buys a
third round.
The ceiling is 2, the same number the engine enforces
(directives/ui/polish.ts, POLISH_CEILING), so the ad-hoc path and the
ticketed path bound the loop identically rather than by two conventions that
can drift. Fixtures: daf-adhoc-converges (round 2 is a null, loop ends) and
daf-adhoc-ceiling (findings remain at the ceiling, loop hands back).
PULL references/craft-floor.md IMMEDIATELY BEFORE THE WRITE, NOT AT SKILL LOAD.
Twelve universal floors that do not vary by mode, register, intent or stack.
They were inline here until the delivery point moved: a floor read at skill-load
time can be a compaction away from the write it governs (ADR-227).
One precedence rule stays here because it is authority, not craft: the audit
outranks every heuristic. Say [audit override] when it does.
Inside a /implement-ticket run, fe-design is a universal reference
skill: it carries stack-agnostic heuristics the UI directive set cites, and
it does not own the flow. The ownership table below applies to that mode.
Outside the engine the table has no dispatcher behind it — the ad-hoc loop
above is the owner instead.
| Concern | Owner (engine-mediated runs) |
|---|---|
| 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:
Inside a ticketed run, do NOT use this skill to:
existing-ui-auditdirectives/ui/ orchestratorOutside a ticketed run, the first and third lines invert: no dispatcher is
running, so implementation quality and the flow are yours. The second holds in
both modes — the audit is always existing-ui-audit; you invoke it, you do not
replace it.
Resource-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.
When the corpus is not installed.
design-intelligenceships in thefrontend-designpack; this skill ships inengineering-base. A consumer who installed onlylaravelor onlyreacttherefore has this skill and not the corpus. Fall back to the heuristics here and say so in the result — "selected from heuristics;frontend-designnot installed, so no corpus grounding". The evidence-gap fallback above is about a corpus that answered "nothing here"; this is about a corpus that is absent. Never present an ungrounded pick as grounded, and never record a missing pack as an evidence gap.
Load the reference file whose sections the task needs — never all of them by default:
references/design-patterns.md — Component Architecture · Form Design · Table Design · Responsive Strategy · Accessibility (a11y) · Motion — decision-tree and rationale · UX Principles · Craft details — typography & imagery · Presenting variantsreferences/design-read-and-memory.md — Cross-task design memory — read DESIGN.md / PRODUCT.md first · Register — brand vs product · Design Read — articulate intent before generating · Aesthetic directionWhen 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.Read the resolved ui_authority
(contract) before the loop:
surface_mode, register, change_intent, reference_maturity,
constraints. This skill is a declared consumer — a second decision table
beside the object is a drift surface, so do not re-derive any field.
surface_mode sets density, hierarchy and expressiveness only, per
design-modes § The second axis.
QUALITY FLOORS DO NOT VARY BY SURFACE MODE.
A FLOOR THAT MOVES WITH THE MODE IS A PREFERENCE WEARING A FLOOR'S NAME.
reference_maturity: runnable-artifact → the artifact's own markup, CSS and JS
is the data basis; adapting it is the default and a from-scratch
re-derivation is a deviation. Sort every mechanic into honoured / translated
/ flagged; one present, absent and unflagged is a silent drop, target zero.
Procedure and the vanishing-mechanic classes:
references/source-led-port.md.
Maturity is not decided here — it arrives on the authority object, and per-value
provenance belongs to road-to-frontend-fidelity-calibration Phases 0 and 2.
Before proposing a direction, scan the Visual (V1–V7) and Layout (L1–L8)
sections of design-antipatterns.
On a match, choose differently or invoke the entry's own override condition in
the brief — every entry has one, and they are register-scoped. The Q* floors are
in references/craft-floor.md instead of here, so
they arrive at the write rather than at skill load.
directives/ui/design.ts and this is the reference it cites. Outside one, the ad-hoc loop at the top of this file IS the executor; do NOT read the reference and then write the UI from priors.Frequently asked questions
Frontend design heuristics — and, outside the ticket engine, the loop that applies them: audit, brief, inventory, build, review.
The source record exposes this install command: npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/fe-design". Inspect the command and pinned source before running it.
Static rules flagged read-files in the source; the page lists the matching lines and excerpts.
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
oaustegard/claude-skills
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre
narrative-io/narrative-skills-marketplace
Translate a fuzzy analytical question into a rigorous investigation plan. Interrogates the ask, grounds the plan in the available data dictionary, applies analytical best practices, and produces a structured brief of query specifications for a downstream query-writing skill. Plans, does not write SQL. Use when: "why did X drop", "is there a relationship between A and B", "who are our highest-value customers", "what's driving the change in Y", "investigate this trend", "design an analysis for", "
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.