The Code Control layer that design has been missing

Catch design drift
before it ships.

AI writes code that works but ignores your design system. Buoy finds hardcoded colors, duplicate components, and token violations.

$ npx @buoy-design/cli status

The code works. But it's not your code.

AI assistants generate functional code that ignores your design system entirely.

What AI generates Card.tsx
const Card = () => (
  <div style={{
    background: "#ffffff",
    padding: "16px",
    borderRadius: "8px",
    boxShadow: "0 2px 4px rgba..."
  }}>
    {children}
  </div>
)
What you want Card.tsx
import { Card } from "@/components"

const MyCard = () => (
  <Card variant="elevated">
    {children}
  </Card>
)


🛟 What Buoy catches:
Hardcoded colors
#ffffff → var(--bg)
Magic numbers
16px → var(--space-4)
Duplicate components
Use <Card> instead

Find drift in seconds

One command. Every issue with exact file, line, and suggested fix.

buoy-cli
$
Scanning for design drift...
Found 23 issues — 18 auto-fixable
CRITICAL (2)
├─ Button.tsx:12 Missing aria-label → auto-fix
└─ Modal.tsx:45 Focus trap conflict → auto-fix
WARNING (8)
├─ Card.tsx:8 #ffffff → var(--bg-surface)
├─ Badge.tsx:3 8px → var(--spacing-sm)
└─ ... and 6 more
Run buoy fix --auto to apply 18 fixes

Fix it automatically

One more command. Watch your design system coverage jump.

buoy-cli
$
Applying 18 auto-fixes...
Button.tsx: Added aria-label
Modal.tsx: Using FocusTrap component
Card.tsx: #ffffff → var(--bg-surface)
Badge.tsx: 8px → var(--spacing-sm)
... and 14 more files
18 issues fixed. 5 need manual review.
Design system coverage: 47%72%
THE OUTCOME
47% → 72% design system coverage

18 issues fixed in under 5 seconds. Your team sees the improvement immediately.

What Buoy Detects

Comprehensive drift detection for modern frontend codebases

🎨

Hardcoded Values

Find colors, spacing, and fonts that bypass your design tokens.

#ff0000
16px
Arial
📦

Duplicate Components

Detect similar components that should be consolidated.

Button
ButtonNew
MyButton
🏷️

Naming Drift

Catch inconsistent naming conventions across your codebase.

btn vs Button
color vs colour
🔧

Prop Mismatches

Find when the same prop has different types across components.

onClick vs onPress
size: string | number
⚠️

Deprecated Patterns

Track components marked @deprecated still in use.

@deprecated
legacy components
🌐

Framework Sprawl

Detect multiple UI frameworks competing in your codebase.

React + Vue + ...

Find. Fix. Measure.

Not just detection — action and visible results.

1

Find

$ buoy drift check

Zero config. Finds every issue with exact file and line

2

Fix

$ buoy fix --auto

Auto-applies safe fixes in seconds

3

Measure

$ buoy status

Shows coverage improvement

Works with your stack

⚛️ React
💚 Vue
🔶 Svelte
🔺 Angular
Next.js
🎨 Figma
📖 Storybook
🌊 Tailwind
🐙 GitHub
🔒 Works without AI

AI is optional. Scanning isn't.

Core drift detection is 100% deterministic. No LLMs, no API keys, no data leaves your machine. Perfect for teams where AI tools are restricted.

🔒

Buoy Core

100% Deterministic
  • All scanning & drift detection
  • CI/CD integration & PR comments
  • Auto-fix suggestions
  • Coverage metrics & reporting
  • Works air-gapped & offline
No API keys required. No external calls.

Buoy + AI

Optional Enhancement
  • + Everything in Core
  • + Natural language drift explanations
  • + Smart fix recommendations
  • + Architecture analysis
  • + PR summary generation
Requires ANTHROPIC_API_KEY. Your key, your control.

Start with Core. Add AI when you're ready. Learn more →

Start scanning in 30 seconds

Free. Open source. No signup required.

npx @buoy-design/cli status