Skip to content
design-system-mcp

Playground

Try check_ui on a real design system.

Edit the code or pick a draft. It is checked against the demo design system by the same rules the MCP server and the CLI run, on a server that parses the code and never runs it.

The settings card from the demo above: one problem per rule.

8 errors · 3 warnings
Checks as you type, or now with ⌘/Ctrl + Enter. Parsed, never run.1.0 KB / 20.0 KB

Findings8 errors · 3 warnings

8 errors · 3 warnings

  1. errorno-hardcoded-color

    Hardcoded color border-[#ef4444]. Nearest token destructive (ΔE 0.071) → border-destructive.

  2. warningno-hardcoded-spacing

    Hardcoded spacing p-[13px] (13px) is off the scale. Nearest: p-3 (12px).

  3. errorno-unknown-component

    <Card.Description> does not exist: Card is composed from flat parts. Use <CardDescription> (import { CardDescription } from "@/components/ui/card").

  4. errorno-unknown-prop

    <Badge> has no prop "tone". Did you mean "variant" ("default" | "secondary" | "destructive" | "success" | "outline")?

    Suggests variant; the change needs a decision, so there is no automatic fix.

  5. errorno-unknown-variant

    "danger" is not a valid variant for <Button>. Allowed: default, destructive, outline, secondary, ghost, link. Did you mean "destructive"?

  6. erroricon-button-accessible-name

    Icon-only <Button> has no accessible name. Add aria-label="Delete" describing the action, or visually hidden text.

  7. errorprefer-design-system-component

    Native <button> where the design system has <Button>. Use <Button> (import { Button } from "@/components/ui/button"); its variants replace the custom classes.

  8. warningno-hardcoded-radius

    Hardcoded radius rounded-[7px] (7px) is off the scale. Nearest: rounded-sm (6px).

  9. errorno-hardcoded-color

    bg-gray-100 is Tailwind's default palette, not a design-system color. Matches token muted (ΔE 0.004, same value as secondary, accent) → bg-muted.

  10. errorno-hardcoded-color

    Hardcoded color #737373 in style.color. Matches token muted-foreground (exact match) → text-muted-foreground or var(--muted-foreground).

  11. warningno-hardcoded-spacing

    Hardcoded spacing marginTop: 6 in style. Use mt-1.5 (6px) in className instead of an inline style.

    Suggests mt-1.5; the change needs a decision, so there is no automatic fix.

What the demo design system has

Five shadcn/ui-style components built with cva and Radix, and Tailwind v4 tokens: 20 colors and 8 radius steps on Tailwind's spacing scale. Anything else is unknown to the checker, as it would be in your project.

Import from @/components/ui/…, or leave imports out: names resolve either way.

  • <Badge> renders <span>

    A small status label: counts, states ("Active", "Overdue") or categories. Not interactive by default; pass asChild to render a link.

    variant: default · secondary · destructive · success · outline

  • <Button> renders <button>

    Triggers an action or event, such as submitting a form, opening a dialog or deleting a record. Use variant="destructive" for irreversible actions and variant="link" for navigation that should look like a button.

    variant: default · destructive · outline · secondary · ghost · link

    size: default · sm · lg · icon

  • <Card> renders <div>

    A bordered surface that groups related content and actions.

    parts: CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent

  • <Dialog>

    A modal window that interrupts the user to confirm a decision or collect input. Use it to confirm destructive actions before they happen.

    parts: DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger

  • <Input> renders <input>

    A single-line text field. Always pair it with a visible <label htmlFor> or an aria-label; set aria-invalid to show the error state.