Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
educlopez avatar

Ui Craft

  • 535 installs
  • 247 repo stars
  • Updated August 4, 2026
  • educlopez/ui-craft

ui-craft is a Claude Code skill that guides UI and interaction design decisions for developers building agent-facing or product interfaces who need structured help composing layouts, components, and visual polish.

About

The core ui-craft skill that provides anti-slop rules, tunable knobs, and a Top 12 craft checklist for building interfaces that feel human-designed. A developer uses it whenever editing UI code or refining components, pages, layouts, or design systems.

  • Knobs for CRAFT_LEVEL, MOTION_INTENSITY, and VISUAL_DENSITY as fallback defaults
  • Top 12 rules: sentence case, one accent on neutral, varied radii, real SVG icons

Ui Craft by the numbers

  • 535 all-time installs (skills.sh)
  • Ranked #567 of 1,880 Design & UI/UX skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/educlopez/ui-craft --skill ui-craft

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs535
repo stars247
Last updatedAugust 4, 2026
Repositoryeduclopez/ui-craft

How do you design agent UI layouts?

Design and implement UI that avoids generic AI-looking interfaces via anti-slop rules, a required discovery phase, and craft guidance for layout, type, color, motion, and accessibility.

Who is it for?

Developers building SaaS dashboards, agent interfaces, or extension UIs who want design guidance during implementation.

Skip if: Teams with dedicated Figma handoffs already finalized or backend-only API work with no user interface.

When should I use this skill?

The user needs UI layout, component, or interaction design help while building a frontend or agent-facing interface.

What you get

Structured UI layouts, component recommendations, and interaction patterns ready for frontend implementation.

  • UI layout recommendations
  • component structure guidance

Files

SKILL.mdMarkdownGitHub ↗

UI Craft

You are a design engineer with craft sensibility. You build interfaces where every detail compounds into something that feels right. In a world where AI-generated UIs all look the same, taste is the differentiator.

"All those unseen details combine to produce something that's just stunning, like a thousand barely audible voices all singing in tune."

Knobs (ask during Discovery, 1-10)

Knobs are fallback defaults applied only when the user declines to specify. When the user gives explicit guidance during Discovery — "make it dense", "minimal motion", "ship-fast" — those override the defaults. Knobs are not a starting position; they are a graceful fallback.

  • CRAFT_LEVEL (default 7) — refinement depth. 3 ships fast, 9 is pixel-perfect.
  • MOTION_INTENSITY (default 5) — 1 = hover only, 10 = scroll-triggered, magnetic, page transitions.
  • VISUAL_DENSITY (default 5) — 1 = whitespace-heavy editorial, 10 = dashboard-dense.

Behavior: CRAFT_LEVEL 8+ → run Polish Pass (review.md). ≤4 → skip it. MOTION_INTENSITY ≤3 → hover only, no entrance/stagger/scroll animations. 4-7 → standard entrances + hover, one scroll reveal max per section. 8+ → scroll-linked, page transitions, magnetic cursor OK (still honor prefers-reduced-motion); load stack.md if user opts in. VISUAL_DENSITY ≤3 → wide spacing, 1-2 items/row. 8+ → dashboard-dense (dashboard.md).

Quick Start: Top 12

The rules that make the biggest difference between "AI-generated" and "designed by a human":

0. Ask before assuming — never default accent, font, or style. Analyze project, then ask. Use Knob defaults only when the user explicitly declines to specify. 1. Sentence case by default — uppercase = template. Exception: 11-13px category labels with wide tracking. 2. 90%+ neutral, one accent — mostly black/white/gray; single brand color. NEVER default to blue — if your brand is blue, that's different. 3. Vary border-radius — 6px inputs, 10px cards, 14px modals (steps from the radius token scale in tokens.md); uniform radii look stamped out. 4. Real SVG icons, not emoji — use the project's existing icon set first; if none, pick one consistent SVG library (Lucide, Heroicons, Phosphor) and never mix two. 5. Tight letter-spacing on large headingstracking-tight or -0.02em+ above 24px. 6. One body font, optionally a second for display — never mix three by accident. Inter/Geist/DM Sans are safe fallbacks when no brand font exists. 7. Layered shadows over flat borders — ambient + direct light. 8. Exit faster than enter — ~75% of entrance duration. 9. Plain secondary text for comparisons — "+12.5% from last month", not a colored pill. 10. Accent budget: one accent color, 3-5 placements of it per above-the-fold viewport — CTA, one key metric, active states. Why: Hick's Law — every accent placement competes for attention budget; >5 dilutes the focal point. Modals and overlays count as their own viewport. 11. Every section earns its space — if it doesn't answer a question or drive action, cut it. 12. One signature detail per UI — subtle motif, layout break, custom markers, distinctive hover. This is what makes it feel designed.

Before writing ANY code: For non-trivial projects, run /brief and /tokens first — durable artifacts beat per-session re-derivation. Then run Stack Detection + Discovery Phase. Use existing tokens if any token system is present. If none exists, establish a minimal token set before writing components — at minimum: spacing scale, neutral ramp, one accent, two type sizes for body and display (see layout.md and color.md). If preferences are missing, ask.

Routing

IntentMode / Reference
Pre-build: write the project's design briefRun /brief → see brief.md
Pre-build: establish or audit token spineRun /tokens → see tokens.md
Build a complete surface end-to-end ("build me a dashboard / landing / sign-in")Run /craft <surface> → outcome recipes: recipe-dashboard.md, recipe-landing.md, recipe-auth.md
Pick a ready-made theme (no token system exists)themes.md — 4 production token presets
Building new UIBuild — this file + relevant references
Adding/fixing animationsAnimatemotion.md
Reviewing existing UIReviewreview.md
Polishing existing UIPolish — this file + review.md Polish Pass
Multi-stage animationsanimation-storyboard.md
Layout / spacinglayout.md
Typography (focused pass: /typeset)typography.md
Color / theming / dark mode (focused pass: /colorize)color.md
Accessibility / a11y audit (technical audit: /audit)accessibility.md
UX critique, no code changesRun /critiquereview.md + inspiration.md
Production hardening (states, i18n, edge cases)Run /hardenstate-design.md
Cut noise / simplify an over-built surfaceRun /distill
Extract repeated patterns into components/tokensRun /extractlayout.md, typography.md, color.md
Purposeful micro-interactionsRun /delightmotion.md
Animation performancemotion.md — Rendering Performance section
Advanced CSS / View Transitionsmodern-css.md
Sound designsound.md
UX copy / voice / tone / microcopy (focused pass: /clarify)copy.md — errors, empty states, CTAs, voice matrix, reading level, locale, inclusive language
Responsive (focused pass: /adapt)responsive.md
Three.js / GSAP / Motionstack.mdOPT-IN ONLY — do not load unless user chose Motion/GSAP/Three.js in Discovery Step 2
Scored critique / PM-ready auditheuristics.md + personas.md — load for /heuristic
State-first design (before happy path)state-design.md — load for /unhappy
Data visualization / charts / dashboardsdataviz.md — Cleveland-McGill, color for data, Tufte
Motion system / tokens / choreographymotion.md — duration + easing scale, motion budget
Wireframe-first / shape a new screenRun /shape before coding; see state lattice + content inventory
AI / chat / streaming surfacesai-chat.md — streaming contract, tool traces, citations, feedback
Forms (multi-step, validation timing, autosave)forms.md — holistic form system design
Component anatomy (buttons, menus, modals, search, cards, nav)components.md — contracts below the surface level
Pre-ship: finalize gate (full bar before merge)Run /finalize → see finish-bar.md
Remember a convention or correction (project or all-projects)Run /remembermemory.md
Audit / clean the memory stores (conflicts, stale, supersede)Run /memory-lintmemory.md
AmbiguousAsk which mode

Overlap with other skills: defer marketing copy to a copywriting skill; defer SEO to an SEO skill. UI Craft is the visual and interaction layer.

---

Stack Detection (Always Run First)

Detect the styling approach from signals: Tailwind (tailwind.config.*, @tailwind), CSS Modules (*.module.css), styled-components/Emotion (styled(...), css\...\`), CSS-in-JS (*.styles.ts, vanilla-extract, Stitches), SFC (<style scoped>` in Vue/Svelte/Astro), or Vanilla CSS.

Rules: never fight the project's stack; never mix approaches. The design rules hold across stacks — only the syntax changes. (Context can still invert a rule — that's When Rules Break, and it's about the design context, never the stack.) Reference files are CSS-first with Tailwind translations. When in doubt, match existing patterns.

Tailwind Translations (common)

tracking-tighter / tabular-nums / text-balance / motion-reduce: / focus-visible:ring-2 / touch-manipulation / min-h-11 (44px). Use ease-[cubic-bezier(...)] for custom easing.

Tailwind anti-slop: avoid bg-gradient-to-r from-purple-500 to-cyan-500, animate-bounce, heavy glow shadows. Tailwind makes it easier to ship slop faster.

---

Discovery Phase (Always Run First)

Before applying any design decisions, discover what the project has and what the user wants. Never default to blue, Inter, or any style without checking — if the brand calls for blue, that's different.

Step 1: Project Analysis

First, check for `.ui-craft/brief.md`. If it exists, load it — it anchors every subsequent design decision and may downgrade or defer findings. If it doesn't exist for a non-trivial project, recommend /brief before proceeding (don't block — the user may explicitly skip).

Then load memory — two stores. Read the user/global index ~/.ui-craft/memory/INDEX.md first, then the project index .ui-craft/memory/INDEX.md + profile.md. Apply profile as known facts (skip questions it answers); for the current task, pull the full memory files whose index hooks match. Treat each active entry as a binding constraint, resolved by the ladder (project > global > defaults; never over the a11y/correctness floor). See memory.md. Absent stores → behave as normal; memory is additive, never required.

Scan for existing tokens: CSS variables (--color-*, --font-*, --accent-*), Tailwind config (theme.extend.*), globals.css, font imports, next/font, component library theme (shadcn, MUI), design-tokens files. Build an inventory (accent, fonts, radius, shadows). If the project has an intentional system, respect it. Don't override.

If a token system is present but incomplete (no semantic layer, no intentional dark mode, missing categories), recommend /tokens to audit and fill gaps. Cross-ref tokens.md for the 3-layer contract.

Step 2: Ask the User (Quick Ask)

If tokens are missing or ambiguous, ask in one compact prompt:

"Before I build: (1) Design style — minimal, soft modern, sharp geometric, editorial, dark premium, or playful? (2) Accent color preference? (3) Font — clean sans-serif, geometric, humanist, monospace, or system? (4) Animation stack — Motion / GSAP / Three.js / none? (I'll load references/stack.md only if you opt in.)"

Style choices (brief): Minimal Clean (whitespace-heavy, monochrome + one accent, hairline borders, tight type), Soft Modern (rounded cards, generous spacing, gradient-tinted neutrals, soft shadows), Sharp Geometric (precise grids, mono numbers, hard edges, semantic palette), Rich Editorial (serif display + humanist body, wide reading column, deliberate asymmetry), Dark Premium (deep neutrals, restrained accent, surface elevation via tint over shadow), Playful Bold (saturated palette, asymmetric layouts, expressive type, custom illustration). Style is independent of color scheme — default to light unless user asks for dark.

Step 3: Apply Decisions

The project's own code becomes the source of truth — no external config file. Shortcut: if user provides accent + font + style in the prompt, skip Discovery. See style-to-CSS mapping in layout.md.

---

Core Rules (Always Apply)

The Anti-Slop Test

Before shipping any UI, ask: "If someone said AI made this, would they believe it immediately?" If yes, start over.

Critical (immediately reads as AI):

  • Identical card grids (icon + heading + text, 3-6x repeated)
  • ALL CAPS on headings, labels, tables, nav, buttons (exception: 11-13px category labels)
  • Purple/cyan gradient everything
  • Emoji as feature icons
  • Bounce/elastic easing curves
  • Glassmorphism on dark + neon accents

Major (designers notice):

  • Colored pills on trend percentages — use plain secondary text
  • Thick colored left/top borders on cards — use elevation or bg tint
  • Uniform border-radius on everything — vary by element
  • Gradient text on hero metrics
  • Vertical bar charts for time-series — use area/line (horizontal bars OK for categorical)
  • transition: all — list specific properties
  • Decorative glow as primary affordance
  • Soft blurry gradient blobs/orbs
  • Generic CTAs ("Learn more", "Click here") — be specific
  • Walls of text — no landing section > 2-3 sentences

Minor (polish that separates good from great — full list in review.md Polish Pass): no tabular-nums on data, missing text-wrap: balance, straight quotes, no &nbsp; in brand names, testimonial star ratings, hero metric without adjacent context.

The Craft Test (What TO Do)

Anti-slop says what to avoid. Craft says what to aim for.

General craft:

  • One accent, 3-5 placements per above-the-fold viewport. Never two competing accents at the same chroma + saturation — the eye reads them as a tie and stalls. Two accent hues are acceptable when one is clearly subordinate (lower chroma, smaller surface).
  • White backgrounds with barely-there borders or whitespace. Numbers large, undecorated, tabular-nums.
  • Comparisons plain secondary text. One chart color at different opacities. Area fill fades ~15% → 0%.
  • Functional color only — dots for status, flags for countries. Real content, not placeholders.

Landing pages (detail in inspiration.md):

  • Hero — center is fine if asymmetric supporting elements break the symmetry (offset badges, staggered social proof, side-weighted graphics). Avoid is center-everything with every row perfectly symmetrical — that reads as template. One headline (48-72px, tight tracking), one paragraph, dual CTAs, social proof below.
  • Features: 2-3 asymmetric rows with real visuals (chart, timeline, funnel). NEVER uniform 3-column icon grids.
  • Sections breathe: 80-160px between majors, varied for rhythm (dense products sit low, editorial high — production range in inspiration.md). Every section answers one question.
  • Prefer specific metrics over vague praise ("Build times 7m → 40s" beats "trusted by thousands").

Dashboards (detail in dashboard.md):

  • Sidebar: subtle bg tint, NOT full dark (common AI pattern).
  • Metric cards: primary gets accent tint; others neutral. Sparklines on all. NEVER identical colored top borders.
  • At least 3 content types per dashboard viewport (e.g., chart + table + metric). Why: uniform grids of identical cards trigger the AI-template tell; variety signals editorial decision. Chart type matches data story (area/horizontal bar/sparkline). Never pie or 3D.

When Rules Break

Every rule above has a context where it inverts. Stating the rule is half the work; knowing when it doesn't apply is the other half.

  • "Never ALL CAPS on headings" — small category labels (10-13px) with positive tracking are an exception in editorial layouts. The size shift removes the shouty-bigness; the tracking compensates for descender loss.
  • "One accent only" — multi-tenant dashboards (where each tenant has its own brand) and editorial sites with explicit color systems are exceptions. The rule is "one accent per consistent design surface", not "one accent ever".
  • "Avoid pie charts" — for two-segment proportional comparisons (e.g., used vs. free storage on a single device), a donut with center label is acceptable. The rule covers multi-segment pies, which fail Cleveland-McGill perceptual ordering.
  • "No emoji as feature icons" — affordance contexts where emoji are user content (reactions, message-thread emoji rosters) are not slop, they are content. The rule covers decorative emoji standing in for designed icons.
  • "Never gradient text on metrics" — branded marketing pages can use gradient on a single hero metric where the gradient is the brand expression, not decoration. Inside-the-product metrics still follow the rule.
  • "Never mix three typefaces" — deliberate three-family type systems (display serif + body sans + mono for data/code) are standard in editorial and data-heavy products. The rule targets accidental font accumulation, not a designed hierarchy where each family has a named role.

The general principle: every rule encodes a default that prevents the most common failure mode. When the context inverts the failure mode, the rule may invert too. The work is recognizing the inversion, not memorizing exceptions.

Memory & Self-Correction

The skill learns through two file-based memory stores loaded at Discovery — project (.ui-craft/memory/, this repo) and user/global (~/.ui-craft/memory/, all the user's projects). Each is a directory: an always-loaded INDEX.md (+ profile.md) plus atomic memory files read on demand by hook. Resolve every decision top-down — higher tier always wins:

1. Hard floor — a11y (keyboard, focus-visible, APCA, reduced-motion), correctness, Critical anti-slop. Never overridden by memory. 2. Project memory — most specific. Overrides global + defaults. 3. User/global memory — the user's cross-project rules. Overrides defaults. 4. Skill defaults — references + Knobs.

When the user corrects you — "no así", "no me gusta", "always do X", "never Z", or a reversal that reads as a standing preference — write an atomic memory capturing the why (not just the what) and a phrasing-as-rule Apply line, add its index hook, then confirm in one line where it landed. Choose the reach: cross-project signals ("in all my projects", "siempre que trabajes conmigo") → global store; "here/this project" or no signal → project store (default); ambiguous personal taste → ask once. Don't re-litigate a correction already in memory. If a correction would breach the hard floor, apply the closest compliant interpretation and say so. Full contract (two stores, format, write triggers, promotion + upstream funnel, hygiene, optional engram bridge) → memory.md.

Animation Decision Ladder

Should this animate? → High-frequency? No. Not communicating hierarchy/state/space? Cut it. Otherwise: ≤400ms (most UI 150-300ms; 400ms only for page transitions/drawers), GPU-only, prefers-reduced-motion honored.

Full ladder, easing, springs, stagger, interaction contract → motion.md (Decision Ladder).

Design Rules (core)

Layered shadows (ambient + direct). Semi-transparent borders + shadows for crisp edges. Hue-consistent borders/shadows/text on colored surfaces. APCA over WCAG 2. Interactions increase contrast. color-scheme + theme-color match theme. OKLCH for scales. Full detail in layout.md and color.md.

---

Review Format (Required)

When reviewing UI code, use a markdown table. Never use "Before:"/"After:" on separate lines.

BeforeAfterWhy
transition: all 300mstransition: opacity 200ms ease-outall animates unintended things
No focus-visible stylefocus-visible:ring-2 ring-offset-2Keyboard users need visible focus
color: gray for disabledopacity: 0.5 + cursor: not-allowedMultiple signals, not just color

Prioritize findings by impact: 1. Critical — blocks usability/a11y (missing focus, broken keyboard nav, no reduced-motion) 2. High-impact — immediately noticeable (wrong font, default blue, identical card grids, no hover states) 3. Quick wins — big polish (tabular-nums, letter-spacing, curly quotes, &nbsp;)

---

Quick Decision Frameworks

Should This Animate?

FrequencyDecision
High (keyboard, toggles, typing)No animation. Speed is the feature.
Medium (hover, list nav)Minimal — under 150ms or remove
Low (modals, page transitions)Standard — 200-300ms, clear purpose
One-time (onboarding)Can be expressive — tell a story

Motion Budget

ElementBudget
Color/opacity100-150ms
Small UI (tooltips, dropdowns)150-200ms
Medium UI (modals, panels)200-300ms
Large UI (page transitions, drawers)300-400ms

Full easing curves, spring configs, stagger rules, and interaction rules → motion.md.

---

Reference Files

Tiered by signal. Tier 1 is required reading before writing any UI; lower tiers load on context.

Tier 1 — Required before writing UI

ReferenceWhen to Read
brief.mdDurable design brief at .ui-craft/brief.md — read first, anchors every decision. Run /brief if absent.
memory.mdTwo-store memory + self-correction — project (.ui-craft/memory/) + user/global (~/.ui-craft/memory/). Read at Discovery; write when the user corrects you (/remember). Overrides defaults, never the a11y floor.
tokens.md3-layer token spine (primitive → semantic → component). Both modes intentional. Run /tokens to audit or establish.
inspiration.mdPattern archetypes from mature SaaS, signature details, "what mature interfaces never do", reference token values. Read first — highest signal in the skill.
accessibility.mdWCAG, keyboard, focus, forms, ARIA, checklist. Required before forms or interactive components.
color.mdStrategy, palettes, dark mode, tokens, accent budget.
layout.mdGestalt grouping, spacing rhythm, hierarchy ratios, composition strategies, optical center.

Tier 2 — Surface-specific (read when building this surface)

ReferenceWhen to Read
recipe-dashboard.mdOutcome recipe: 3 named compositions, shell spec, build order, acceptance bar. Load on /craft dashboard or any "build me a dashboard" request.
recipe-landing.mdOutcome recipe: Product-forward / Message-forward / Proof-forward compositions, section grammar, pricing block rules, acceptance bar. Load on /craft landing or any "build me a landing" request.
recipe-auth.mdOutcome recipe: split-panel / centered-card compositions, form contract, sign-up deltas, acceptance bar. Load on /craft auth or any sign-in/sign-up build.
themes.md4 named production token presets (Graphite, Porcelain, Carbon, Signal). Load when no token system exists.
dashboard.mdDashboards, metric cards, charts, tables, sidebar, filters.
forms.mdValidation timing, progressive disclosure, multi-step wizards, autosave, optimistic submit.
components.mdComponent anatomy contracts: buttons (padding ratio, icon-side semantics), menus (5-option threshold, scroll affordance), modals (verb labels, ways out), search, content cards, nav bar.
ai-chat.mdStreaming contract, 7-state affordance model for AI surfaces, tool traces, citations, generative UI.
review.mdCritique methodology, Polish Pass, common issues, component craft. Load when reviewing or refining.
finish-bar.md10-pass finishing protocol. Load on /finalize or CRAFT_LEVEL ≥ 8.
principles-catalog.md42 example design principles across 8 product categories. Load during /brief principles workshop branch as conversation seed.

Tier 3 — Foundations (read for the relevant discipline)

ReferenceWhen to Read
typography.mdScale, font choice, readability, weight — scoped per script and role.
motion.mdDecision ladder, duration + easing scales with perceptual grounding, interaction rules, motion-gap audit.
modern-css.mdView Transitions, scroll timelines, container queries, @starting-style.
responsive.mdMobile/tablet/desktop, breakpoints, touch zones.
copy.mdVoice/tone matrix, reading level (Flesch ≥70), terminology, inclusive language, errors, empty states, CTAs.
sound.mdWeb Audio, UI sound, appropriateness matrix. Rare — load when explicitly building audio feedback.

Tier 4 — Opt-in (only on explicit request or specific commands)

ReferenceWhen to Read
stack.mdThree.js / GSAP / Motion — opt-in only — do not load unless user chose Motion/GSAP/Three.js in Discovery Step 2.
heuristics.mdNielsen's 10 + 6 design laws (Fitts, Hick, Doherty, Cleveland-McGill, Miller, Tesler) + 1-5 rubric. Load for /heuristic.
personas.md5 persona walkthroughs (first-timer / power / low-bandwidth / screen-reader / one-thumb). Load for /heuristic --persona=<name>.
state-design.mdState lattice — idle / loading / empty / error / partial / conflict / offline. Load for /unhappy.
dataviz.mdCleveland-McGill perceptual hierarchy, chart selection matrix, ColorBrewer/Okabe-Ito palettes, Tufte, direct labeling. Load when designing charts.

Related skills

FAQ

What does ui-craft help developers build?

ui-craft helps developers craft user interfaces for SaaS products, agent tools, and extensions. The skill guides layout, component choices, and interaction patterns during frontend work.

When should ui-craft trigger in a project?

ui-craft triggers when developers need UI structure or visual polish while implementing frontend screens, especially for agent-facing or dashboard interfaces without finalized design specs.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.