home / skills / ibelick / ui-skills / baseline-ui

baseline-ui skill

/skills/baseline-ui

This skill enforces a consistent Baseline UI by guiding components to follow opinionated Tailwind and motion conventions with accessible primitives.

npx playbooks add skill ibelick/ui-skills --skill baseline-ui

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.4 KB
---
name: baseline-ui
description: Validates animation durations, enforces typography scale, checks component accessibility, and prevents layout anti-patterns in Tailwind CSS projects. Use when building UI components, reviewing CSS utilities, styling React views, or enforcing design consistency.
---

# Baseline UI

Enforces an opinionated UI baseline to prevent AI-generated interface slop.

## How to use

- `/baseline-ui`
  Apply these constraints to any UI work in this conversation.

- `/baseline-ui <file>`
  Review the file against all constraints below and output:
  - violations (quote the exact line/snippet)
  - why it matters (1 short sentence)
  - a concrete fix (code-level suggestion)

## Stack

- MUST use Tailwind CSS defaults unless custom values already exist or are explicitly requested
- MUST use `motion/react` (formerly `framer-motion`) when JavaScript animation is required
- SHOULD use `tw-animate-css` for entrance and micro-animations in Tailwind CSS
- MUST use `cn` utility (`clsx` + `tailwind-merge`) for class logic

## Components

- MUST use accessible component primitives for anything with keyboard or focus behavior (`Base UI`, `React Aria`, `Radix`)
- MUST use the project’s existing component primitives first
- NEVER mix primitive systems within the same interaction surface
- SHOULD prefer [`Base UI`](https://base-ui.com/react/components) for new primitives if compatible with the stack
- MUST add an `aria-label` to icon-only buttons
- NEVER rebuild keyboard or focus behavior by hand unless explicitly requested

## Interaction

- MUST use an `AlertDialog` for destructive or irreversible actions
- SHOULD use structural skeletons for loading states
- NEVER use `h-screen`, use `h-dvh`
- MUST respect `safe-area-inset` for fixed elements
- MUST show errors next to where the action happens
- NEVER block paste in `input` or `textarea` elements

## Animation

- NEVER add animation unless it is explicitly requested
- MUST animate only compositor props (`transform`, `opacity`)
- NEVER animate layout properties (`width`, `height`, `top`, `left`, `margin`, `padding`)
- SHOULD avoid animating paint properties (`background`, `color`) except for small, local UI (text, icons)
- SHOULD use `ease-out` on entrance
- NEVER exceed `200ms` for interaction feedback
- MUST pause looping animations when off-screen
- SHOULD respect `prefers-reduced-motion`
- NEVER introduce custom easing curves unless explicitly requested
- SHOULD avoid animating large images or full-screen surfaces

## Typography

- MUST use `text-balance` for headings and `text-pretty` for body/paragraphs
- MUST use `tabular-nums` for data
- SHOULD use `truncate` or `line-clamp` for dense UI
- NEVER modify `letter-spacing` (`tracking-*`) unless explicitly requested

## Layout

- MUST use a fixed `z-index` scale (no arbitrary `z-*`)
- SHOULD use `size-*` for square elements instead of `w-*` + `h-*`

## Performance

- NEVER animate large `blur()` or `backdrop-filter` surfaces
- NEVER apply `will-change` outside an active animation
- NEVER use `useEffect` for anything that can be expressed as render logic

## Design

- NEVER use gradients unless explicitly requested
- NEVER use purple or multicolor gradients
- NEVER use glow effects as primary affordances
- SHOULD use Tailwind CSS default shadow scale unless explicitly requested
- MUST give empty states one clear next action
- SHOULD limit accent color usage to one per view
- SHOULD use existing theme or Tailwind CSS color tokens before introducing new ones

Overview

This skill enforces an opinionated UI baseline to prevent AI-generated interface slop. It applies consistent Tailwind defaults, accessible primitives, and strict animation and interaction rules. Use it to audit or automatically constrain agent-created UI so interfaces remain predictable, performant, and accessible.

How this skill works

Run the skill against a conversation or a specific file to validate UI code against the baseline rules. The skill flags violations, explains why each matters in one sentence, and proposes concrete, code-level fixes. It also enforces stack choices (Tailwind defaults, motion/react, cn utility) and component/interaction patterns (accessible primitives, AlertDialog, safe-area handling).

When to use it

  • When agents generate UI markup or components and you need consistency and accessibility
  • Before merging agent-authored UI into a shared codebase
  • During design-to-code handoff to ensure implementation follows platform constraints
  • When animating or adding interaction to prevent costly performance regressions
  • When onboarding new AI skills that produce UI to enforce a shared baseline

Best practices

  • Prefer project’s existing primitives; only introduce new ones when necessary
  • Use Tailwind defaults unless a custom token already exists or was requested
  • Keep animations limited to transform and opacity and respect prefers-reduced-motion
  • Add aria-labels to icon-only buttons and use library primitives for keyboard behavior
  • Place errors adjacent to the action and provide a clear next step for empty states

Example use cases

  • Run /baseline-ui on a conversation to apply baseline constraints to all subsequent UI work
  • Audit a component file to get line-by-line violations with one-sentence rationale and a code fix
  • Enforce safe-area handling and h-dvh usage for all fixed headers and footers
  • Validate animation choices to ensure no layout or paint properties are being animated
  • Confirm typography rules like text-balance, text-pretty, and tabular-nums are applied across views

FAQ

What output does the file review produce?

It lists exact violating lines/snippets, a one-sentence explanation for each, and a concrete code suggestion to fix it.

Can I opt out of specific rules for a project?

Yes — rules can be scoped off when there is an explicit project requirement, but the skill prefers existing project tokens and primitives by default.