Visual feedback loop
Playwright captures the rendered page, Claude critiques the pixels against a 100-point rubric, applies fixes, and re-captures until the bar is met.
Claude Code plugin · v0.1.0
A Claude Code plugin that turns Claude Code into a senior designer. Bootstraps design systems, generates polished components and dashboards, and iterates visually with a screenshot-based critique loop.
/plugin marketplace add shipiit/shipit-ui-design/plugin install shipit-ui-design@shipit/reload-pluginsBy the numbers
Three commands. Three minutes.
Inside Claude Code, register the shipit catalog.
/plugin marketplace add shipiit/shipit-ui-design$✓ Successfully added marketplace: shipit
Defaults to user scope (every project on your machine).
/plugin install shipit-ui-design@shipit$✓ Installed shipit-ui-design$ Run /reload-plugins to apply.
Skills and commands light up.
/reload-plugins$✓ Reloaded plugins$ · 8 skills · 8 commands · 1 hook
Optional: npx playwright install chromium for the visual loop.
What ships in the box
Playwright captures the rendered page, Claude critiques the pixels against a 100-point rubric, applies fixes, and re-captures until the bar is met.
App shells, KPI tiles, data tables, chart cards, filter bars, command palette, notifications — all blueprinted and ready to drop in.
OKLCH ramps, WCAG + APCA contrast, colorblind-safe palettes, image extraction, and perceptual mixing — handled at a senior level.
Framer Motion for React, Motion One for vanilla, GSAP for heavy timelines. Every animation is `prefers-reduced-motion`-safe by default.
Warm-editorial, neon-brutalism, cool-corporate, soft-pastel, deep-monochrome, vibrant-tech — each WCAG-checked across light and dark.
Tinted neutrals, the 60–30–10 distribution, mobile iOS/Android grid, and a sidebar spacing cheat sheet — Claude consults them automatically.
Seven hard rules every artifact obeys: 300-line cap, no hardcoded values, full state coverage, plus motion, a11y, and dark-mode parity.
Adapts to React, Vue, Svelte, and Solid; works with Tailwind, CSS Modules, styled-components, or plain CSS — never forces a new framework.
Eight slash commands
Bootstrap a design system: tokens, primitives, motion presets, dark mode.
/shipit-ui-design:design initHow /refine works
The visual loop screenshots your rendered page across viewports and themes, scores it against a 100-point rubric, applies fixes, re-screenshots, and iterates until the bar is met.
Rubric breakdown
On marketing surfaces, Claude reaches for illustrations, layered surfaces, and animated decoration before reaching for a plain card. /refine hard-caps your score at 80 when Visual Richness drops below 4/10.
Illustrated mockup, mesh-gradient bg, orbiting chips
Icons ≥ 48×48 in a tinted internal panel, hover lift
Counter animation, decoration shape, hairline divider
Illustrated step circle, animated rail, preview card
Mini icon, radial gradient bg, hover scale
Decorative ringed badge, edge pattern
Syntax-highlighted with chrome — never plain <pre>
Auto-activating skills
.tsx .jsx .vue .svelte
motion work, /motion
tokens.css, theme files
/illustrate, .svg edits
/scene, R3F files
/admin /dashboard /console paths
chart code, KPI tiles
color tokens, palette work
The constitution
These are non-negotiable. Every component, every palette, every illustration the plugin generates follows them.
If a component would exceed, it splits.
Colors, spacing, radii, shadows, durations — all from tokens.
State coverage is non-optional. Affordance must be obvious without a tooltip.
Every transition and animation provides a calm fallback for users who request one.
No mystery images. Decorative SVGs are explicitly marked as such.
Emitted alongside light from the start. Same hue, only L and C change.
Adapt to whatever the project already uses. Tailwind, CSS Modules, styled-components, vanilla CSS.
Generated code
bare hex, raw px, no states
.button { background: #4f46e5; padding: 12px 24px; color: white; border-radius: 8px; font-size: 14px; /* no hover. no active. no focus. no disabled. no dark mode. */}tokens, full states, reduced-motion safe
.button { background: var(--color-brand); padding: var(--space-3) var(--space-6); color: var(--color-fg-on-brand); border-radius: var(--radius-md); font-size: var(--text-sm); transition: transform var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out);}.button:hover { background: var(--color-brand-hover); }.button:active { transform: scale(0.98); }.button:focus-visible { outline: 2px solid var(--color-ring); outline-offset: 2px;}.button:disabled { opacity: 0.5; cursor: not-allowed;}@media (prefers-reduced-motion: reduce) { .button { transition: none; }}Every token resolves to a value in tokens.css — flip dark mode, swap brand color, reskin the whole product.
Common questions
/refine command. Other commands work without it. One-time install: npx playwright install chromium..claude/settings.json so collaborators on the repo install automatically.tinted-neutrals.md design rule. Pure white on pure black is too high-contrast and tiring; tinted greys carry depth, elevation, and a hint of harmony with your brand.