clone
Clone a website — a working behavior ARCHIVE (real code + data replayed offline; tabs, filters, transitions work), a pixel-identical editable RESTORE (real…
Judge the current UI blind (render + screenshot if possible), grep the anti-slop patterns, and run the mandatory forced-subtraction pass.
> /plugin marketplace add TaewoooPark/UIForge > /plugin install uiforge@uiforge
How it fires
How this command gets triggered: by you, by Claude, or both.
/critiqueContext preview
What this command does when you run it.
Judge the current UI blind (render + screenshot if possible), grep the anti-slop patterns, and run the mandatory forced-subtraction pass.
description: Judge the current UI blind (render + screenshot if possible), grep the anti-slop patterns, and run the mandatory forced-subtraction pass. argument-hint: "[optional: path/URL or which view to critique]"
Run UIForge's critique on the current UI (**$ARGUMENTS** if it names a view/path, otherwise the view you just built). Follow the `uiforge:design-director` skill's `critique.md`. Judge it coldly, as if someone else built it — self-graders skew positive.
If a browser is available — the **webapp-testing** skill or a **Playwright** MCP — render the running app and screenshot it:
emulated.
**only the one intended element moves**.
If no browser is available, say so, and critique the code + rendered structure instead — but do not claim visual verification.
Walk the `critique.md` checklist across every axis — direction & intent, typography, color, space & surface, motion, states & copy, accessibility. Each is pass/fail; a "yes, but…" is a fail. List every fail with the fix.
**Tier A — source (grep, always).** Exits non-zero on slop + token violations, so it's a hard gate, not a vibe:
node ${CLAUDE_PLUGIN_ROOT}/tools/uiforge-lint.mjs <project-dir> --strictEvery **BLOCKER** must be fixed (default font like Inter/system-ui, AI purple/indigo, gradient headline, emoji-as-UI, hype copy, motion without a reduced-motion path). Resolve or explicitly justify each **warning** (raw hex, arbitrary values, off-grid spacing, maxed radius+shadow, gradient overuse, slate/zinc defaults, infinite loops, missing tokens). **Re-run until it exits 0.**
**Tier B — the render (deep, whenever a browser is available).** Grep can't see contrast, accent coverage, spacing rhythm, or layout patterns — those live only in the rendered result. Point it at the running view from step 1 (the dev-server URL or the built file):
node ${CLAUDE_PLUGIN_ROOT}/tools/uiforge-render-audit.mjs <url|file.html> --viewport 1440x900Fix every **WCAG contrast** failure it names (real a11y defects, not taste), pull any single **accent** back under ~10% of the surface, collapse a jittery **spacing rhythm** and a scattered **type scale** onto one system, and break up **equal-card / centered-hero** layout tells. Re-run until the render grade is **A/A+ and contrast fails = 0**. (If you extracted a `signature.json`, add `--spec signature.json` to grade reference-relative.)
**Tier C — attention & hierarchy.** A clean render can still *lead the eye nowhere*. Predict the gaze order and check the focal point:
node ${CLAUDE_PLUGIN_ROOT}/tools/uiforge-attention.mjs <url|file.html> --expect "<your intended #1>"It ranks where the eye lands 1st→6th. **If `hierarchy: flat`** (no dominant element) or the **headline/CTA is buried** (the eye lands on a competing block, not your intended focus), that's a real hierarchy defect — fix it by widening the size/contrast/whitespace gap between the focal element and the rest, then re-run until there's one clear #1 and your intended element leads.
**Do not report "done" while any tier fails.**
The linter catches the grep-able; this catches the *gestalt*. Run the design-director's `references/slop-detector.md` as an **implementation-blind** pass — ideally a subagent (Task tool) given **only the screenshots** (normal + reduced-motion), told to *prove a machine made this*. If it returns **AI-DETECTED**, fix every tell it cites, re-render, and re-judge until **CLEAN**. The bar is not "0 linter blockers" — it's "an adversary with the pixels can't prove it's AI."
Identify the **single least-justified** element, color, shadow, or animation and **remove it**. Re-view; confirm the linter still exits 0. If removing it hurt, restore it and cut the next-weakest — but something goes.
Don't hand back a number; a score reads as a linter, and a designer dismisses a linter. Write the critique **in the voice of a specific sensibility** (e.g. a Swiss typographer, Rauno/Emil-grade motion restraint, or the audience's own skepticism) and make it an **art director's note** — one clear point of view on what's wrong and what to do — with the **measurements cited as evidence**, not as the verdict:
("the hierarchy is the issue, not the color");
lands on the cards at #1–3, your headline is #4`), a **contrast ratio** (`2.9:1 here`), the **accent budget** (`31% of the surface`), the **rhythm** (`17 distinct gaps`);
Then the mechanics: pass/fail per axis, the grep hits + resolution, **what you removed**, and — if you rendered it — the screenshots. Any fail → fix and re-run the whole critique before shipping. The bar remains: *an adversary with the pixels can't prove a machine made it.*
Clone a website so it actually works — tabs, filters, lists, client-side transitions, motion, scroll — then also as a pixel-faithful freeze and a pixel-identical, editable React restore.
Repo: TaewoooPark/UIForge
Clone a website — a working behavior ARCHIVE (real code + data replayed offline; tabs, filters, transitions work), a pixel-identical editable RESTORE (real…
Run the full UIForge pipeline on a brief — thesis, one direction, tokens first, sourced components, budgeted composition, blind critique, forced subtraction.
Extract a measured design signature (type ramp, accent + its budget, grid unit, radius, layout) from a reference image or site, write it to signature.json, and…
Grade any UI project A–F for slop — a standalone review tool. Runs the UIForge linter and reports a letter grade + the tells, for the current project, a…
Prepare the current project for UIForge — ensure shadcn init, the component registries (shadcn + @motion-primitives), and the motion/lucide-react/cn…