ui-craft-minimal

$npx mdskill add educlopez/ui-craft/ui-craft-minimal

Generates minimal, whitespace-heavy UIs inspired by Linear and Notion.

  • Crafts clean interfaces with monochrome palette and one accent color.
  • Uses Inter or Geist fonts and hairline borders instead of shadows.
  • Locks craft at 8, motion at 3, and density at 2 for consistent style.
  • Delivers polished, production-ready UI code or design specifications.

SKILL.md

.github/skills/ui-craft-minimalView on GitHub ↗
---
name: ui-craft-minimal
description: "Minimal / clean / Linear / Notion / Vercel / whitespace-heavy UIs. Locked knobs: CRAFT=8, MOTION=3, DENSITY=2. Monochrome + one accent, Inter/Geist, hairline borders over shadows. Trigger on: minimal, clean, Linear-like, Notion-like, Vercel-like, whitespace-heavy."
argument-hint: "[action: build|review|polish] [target]"
---

<!-- HARNESS MIRROR — do not edit here. Canonical source: skills/ or commands/. After editing source, copy into cli/assets/<harness>/ and repo-root harness mirrors. -->

# UI Craft — Minimal

Pre-committed minimal style: editorial clean, Linear / Notion / Vercel. Whitespace is the composition. One accent, hairline borders, almost no motion.

## Knobs (locked)

- **CRAFT_LEVEL = 8** — minimal aesthetics only work when executed precisely; Polish Pass is mandatory.
- **MOTION_INTENSITY = 3** — hover + modal enter/exit only. No scroll reveals, no page transitions, no stagger.
- **VISUAL_DENSITY = 2** — whitespace-heavy, 1-2 items per row, generous gutters.

Do not re-ask these in Discovery. Skip straight to accent + font confirmation if ambiguous.

## Style anchors

- Black or near-black type on white or near-white canvas. Monochrome + ONE accent.
- Inter / Geist for body — never a display font.
- Section padding 120-200px vertical, 40-80px gutters.
- Hairline borders `1px solid oklch(92% 0.005 250)` in place of shadows.
- Typography is the hierarchy. No decorative gradients, patterns, or glass.
- Single-column hero default. Asymmetry via one supporting element, not layout tricks.
- Motion is punctuation, not spectacle.
- Every pixel deliberate. When in doubt, cut it.

## Base rules (inherited)

All rules in `../ui-craft/SKILL.md` apply. This file overrides knob defaults and adds style-specific guidance below. The anti-slop and craft tests still apply in full.

## Style-specific overrides

**Typography**

- Body: Inter or Geist, 400 weight. UI emphasis: 500. Never 600/700 in body copy.
- `system-ui, -apple-system` as fallback stack.
- Headings: `tracking-tight` / `-0.02em` above 24px, 500 or 600 max.
- `text-wrap: balance` on headings, `text-wrap: pretty` on paragraphs.
- No display serifs. No geometric display sans. No mixing two sans families.

**Color**

- Surface: `oklch(99% 0 0)` (light) / `oklch(14% 0.005 250)` (dark).
- Text: `oklch(18% 0.01 250)` primary, `oklch(46% 0.01 250)` secondary.
- Accent reserved for: primary CTA, active nav item, one key metric. That is it.
- Borders: `oklch(92% 0.005 250)` light / `oklch(24% 0.008 250)` dark. No colored borders.

**Spacing & layout**

- Section vertical: `py-24 md:py-32 lg:py-40` (96 / 128 / 160px) minimum; 200px for hero on large screens.
- Container: `max-w-5xl` typical; `max-w-3xl` for reading content.
- One accent placement per viewport preferred; two max.
- No card grids with more than 2 columns on desktop.

**Borders & elevation**

- Default chrome = 1px hairline border, no shadow.
- Elevation only for floating UI (menus, toasts, modals) — single soft ambient shadow, not layered.
- Radius: 6px inputs, 8px cards, 12px modals. Keep the scale narrow.

**Motion**

- Allowed: hover (opacity / border color, 120-150ms), modal + dialog enter/exit (180-220ms ease-out), focus ring.
- Forbidden at this intensity: scroll-triggered reveals, stagger, page transitions, parallax, magnetic cursor, entrance choreography.
- Any animation must honor `prefers-reduced-motion`.

**Composition**

- Hero: left-aligned or centered headline, ONE supporting element (social proof line, screenshot, single chip). No floating badges, orbs, blobs.
- Features: stacked rows with a single real visual each. No 3-up uniform icon grids even when tempting.
- Nav: text-only links, current state = accent underline or weight 500. No pill backgrounds.

## Reference files to read first

Keep the reading list tight. Load only these from `../ui-craft/references/`:

- `layout.md` — spacing, hierarchy, composition
- `typography.md` — scale, readability, weight
- `color.md` — monochrome scales, OKLCH, dark mode
- `accessibility.md` — focus, contrast, keyboard

Skip `dashboard.md`, `stack.md`, `sound.md` unless explicitly relevant.

## Anti-patterns for THIS style

- Multiple accent colors. One accent, period.
- Display serifs, geometric display sans, or mixing two sans families.
- Decorative gradients, mesh backgrounds, noise overlays, glass panels.
- Scroll-triggered reveals, stagger, page transitions — even "subtle" ones.
- Uniform 3-column icon-heading-text feature grids.
- Colored shadows or glows as affordances.
- Dense layouts. If density feels right, this is the wrong variant — switch to `ui-craft-dense-dashboard`.
- Pill backgrounds on nav links or buttons by default; prefer text + underline.
- Section padding under 96px on desktop.

More from educlopez/ui-craft

SkillDescription
adaptResponsive layout pass covering breakpoints, touch targets, safe areas, and fluid type. Use when the UI has layout or touch issues on mobile/tablet, when adding a new screen that hasn't been tested across viewports, or when the user says "make it responsive" / "fix mobile layout". Invoke when the user asks for adapt on their UI, or mentions 'adapt' alongside design / UI / frontend work.
animateMotion design pass — adds purposeful animations or removes excessive ones, respecting MOTION_INTENSITY and the project's animation stack. Use when the user asks to add animation, "make it feel smoother", fix janky transitions, or trim motion that's distracting. Invoke when the user asks for animate on their UI, or mentions 'animate' alongside design / UI / frontend work.
bolderAmplify personality — raises layout variance and motion, strengthens typography and one signature detail, without slop. Use when the UI works but feels safe, flat, or "template-y", or when the user says "bolder", "more personality", "more creative", or "make it pop" (still professional). Invoke when the user asks for bolder on their UI, or mentions 'bolder' alongside design / UI / frontend work.
clarifyUX copy review across buttons, errors, empty states, and form hints — critiques by default, applies only on request. Use when copy feels vague, generic, or AI-sounding, or when the user says "fix the labels", "improve error messages", or "review the copy". Invoke when the user asks for clarify on their UI, or mentions 'clarify' alongside design / UI / frontend work.
colorizeColor strategy pass — introduces a single accent at 3-5 intentional placements, or reduces an over-colored UI back to 90% neutral. Use when the UI has no color identity, uses blue by default, or is shouting with too many competing accents. Invoke when the user asks for colorize on their UI, or mentions 'colorize' alongside design / UI / frontend work.
craftOne-shot build pipeline for a complete surface from an outcome recipe — inputs (or defaults) → composition → theme → build order → acceptance bar. Use when the user asks for a whole surface ("build me a dashboard", "hazme un dashboard") and expects a shippable result, not component-level help. Invoke when the user asks for craft on their UI, or mentions 'craft' alongside design / UI / frontend work.
critiqueDesign lens critique covering visual hierarchy, clarity, and anti-slop patterns — produces a findings table, no code edits unless asked. Use when the user wants a design review, says "what's wrong with this UI", or needs a second opinion before a handoff or presentation. Invoke when the user asks for critique on their UI, or mentions 'critique' alongside design / UI / frontend work.
delightDelight pass — adds one or two memorable micro-interactions (copy specificity, hover choreography, state transitions, one signature detail) without decoration or confetti. Use when the UI works but feels generic, or when the user says "make it feel special" / "add some personality". Invoke when the user asks for delight on their UI, or mentions 'delight' alongside design / UI / frontend work.
distillReduction pass — cuts content, structure, visuals, and dead code that doesn't answer a user question or drive an action, respecting CRAFT_LEVEL. Use when the UI feels cluttered, has too many CTAs, walls of text, or decorative noise, or when the user says "simplify this" / "it feels too busy". Invoke when the user asks for distill on their UI, or mentions 'distill' alongside design / UI / frontend work.
hardenProduction-readiness pass — audits and implements the full non-happy-path matrix: loading skeletons, empty states, error messages, partial data, i18n, offline, permissions, and first-run guidance. Use when preparing a surface for production or when the user says "it crashes on empty data" / "there's no loading state" / "harden this". Invoke when the user asks for harden on their UI, or mentions 'harden' alongside design / UI / frontend work.