Paste a URL. DesignClaw crawls the site, reverse-engineers its colors, type, spacing, components, and motion, and streams back a production-ready SKILL.md that any AI coding assistant can use to reproduce that exact aesthetic — on completely different content.
┌─────────────────────────────────────────────────────────┐
paste │ https://that-gorgeous-site.com │
a URL ──▶│ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ [ Extract ] │
└─────────────────────────────────────────────────────────┘
│
📸 screenshots · 🎨 computed styles · 🧬 DOM + CSS · 🧠 pattern detection
│
▼
┌─────────────────────────────────────────────────────────┐
│ SKILL.md · 600–1000 lines · streamed live │
│ ── colors, type scale, spacing, radii, shadows │
│ ── copy-paste component recipes (buttons, cards, nav) │
│ ── motion + animation system, layout philosophy │
└─────────────────────────────────────────────────────────┘
Extracting a design system from a live site by hand takes hours of DevTools spelunking. DesignClaw does it in seconds and hands you a structured brief your AI assistant actually understands.
SKILL.md streams in over SSE. Fast single-pass or higher-quality multi-pass mode.Frontend (React + Vite) Backend (Node.js + Hono)
InputPage ──POST /api/extract──▶ 5-step extraction pipeline
ExtractPage ◀──── SSE stream ──── 1. crawler Puppeteer screenshots + DOM
2. sourceExtractor raw CSS from stylesheets
3. computedExtractor getComputedStyle on components
4. htmlExtractor DOM skeleton + class patterns
5. patternDetector design-archetype classification
│
▼
skillGenerator ──▶ Anthropic Claude API
(streams SKILL.md back over SSE)
The Claude prompt gets screenshots (base64), filtered source CSS, browser-computed style data (JSON), and the HTML skeleton — then writes a 10-section SKILL.md.
| Layer | Technology |
|---|---|
| Frontend | React 18 · Vite · TypeScript |
| Styling | Tailwind CSS · shadcn/ui (Radix) |
| State | Zustand |
| Backend | Node.js · Hono |
| Crawling | Puppeteer (headless Chrome) |
| AI | Anthropic Claude API (Sonnet / Opus) |
| Database | Supabase (history · screenshots · auth) |
git clone <your-fork-url> designclaw
cd designclaw
npm install
cp .env.example .env
| Variable | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY |
✅ | Your Anthropic key (sk-ant-…). |
ANTHROPIC_BASE_URL |
— | Point at an Anthropic-compatible proxy. Defaults to https://api.anthropic.com/v1. |
ANTHROPIC_MODEL |
— | Single-pass model. Default claude-sonnet-4-6. |
ANTHROPIC_MODEL_OPUS |
— | Multi-pass model. Default claude-opus-4-8. |
PORT |
— | Backend port. Default 3001. |
SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY |
✅ | Server-side access — service role, never expose to the client. |
VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY |
✅ | Client-side access — anon/publishable key only. |
⚠️
VITE_-prefixed vars are bundled into the browser and are not secret. Only ever put the anon key there — never the service role key.
The app uses these Supabase objects:
profiles · extractions · regenerations · screenshotsscreenshots · avatarsCreate them in your project and add Row-Level Security so users only see their own rows. (A migration file isn't bundled — define columns to match the usage in server/ and src/stores/.)
npm run dev # frontend + backend together
| Script | What it does |
|---|---|
npm run dev |
Vite frontend and Hono backend |
npm run dev:client |
frontend only |
npm run dev:server |
backend only |
npm run build |
build the frontend |
npm run build:server |
build / type-check the backend |
npm run lint |
eslint |
Frontend → http://localhost:8080 · Backend → http://localhost:3001
designclaw/
├── src/ # React frontend — pages, components, stores, lib
├── server/ # Node.js + Hono backend
│ ├── routes/ # /api/extract, /api/history, /api/regenerate, …
│ ├── services/ # crawler, extractors, patternDetector, skillGenerator
│ ├── prompts/ # system + user prompt builders
│ └── utils/ # anthropic.ts (AI client), supabase.ts, cssFilter.ts
└── .claude/CLAUDE.md # architecture notes for AI assistants
Deeper dive: .claude/CLAUDE.md — full architecture walkthrough.
Issues and PRs welcome. Keep changes focused, run npm run lint before submitting, and never commit secrets (.env is gitignored).
MIT — do whatever you want, just keep the notice.
Built for designers who'd rather ship than inspect-element.
$ claude mcp add designclaw \
-- python -m otcore.mcp_server <graph>