| | --- |
| | title: Design System Extractor v2 |
| | emoji: π¨ |
| | colorFrom: purple |
| | colorTo: blue |
| | sdk: docker |
| | pinned: false |
| | license: mit |
| | --- |
| | |
| | # Design System Extractor v2 |
| |
|
| | > π¨ A semi-automated, human-in-the-loop agentic system that reverse-engineers design systems from live websites. |
| |
|
| | ## π― What It Does |
| |
|
| | When you have a website but no design system documentation (common when the original Sketch/Figma files are lost), this tool helps you: |
| |
|
| | 1. **Crawl** your website to discover pages |
| | 2. **Extract** design tokens (colors, typography, spacing, shadows) |
| | 3. **Review** and validate extracted tokens with visual previews |
| | 4. **Upgrade** your system with modern best practices (optional) |
| | 5. **Export** production-ready JSON tokens for Figma/code |
| |
|
| | ## π§ Philosophy |
| |
|
| | This is **not a magic button** β it's a design-aware co-pilot. |
| |
|
| | - **Agents propose β Humans decide** |
| | - **Every action is visible, reversible, and previewed** |
| | - **No irreversible automation** |
| |
|
| | ## ποΈ Architecture |
| |
|
| | ``` |
| | ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| | β TECH STACK β |
| | ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ |
| | β Frontend: Gradio (interactive UI with live preview) β |
| | β Orchestration: LangGraph (agent workflow management) β |
| | β Models: Claude API (reasoning) + Rule-based β |
| | β Browser: Playwright (crawling & extraction) β |
| | β Hosting: Hugging Face Spaces β |
| | ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| | ``` |
| |
|
| | ### Agent Personas |
| |
|
| | | Agent | Persona | Job | |
| | |-------|---------|-----| |
| | | **Agent 1** | Design Archaeologist | Discover pages, extract raw tokens | |
| | | **Agent 2** | Design System Librarian | Normalize, dedupe, structure tokens | |
| | | **Agent 3** | Senior DS Architect | Recommend upgrades (type scales, spacing, a11y) | |
| | | **Agent 4** | Automation Engineer | Generate final JSON for Figma/code | |
| |
|
| | ## π Quick Start |
| |
|
| | ### Prerequisites |
| |
|
| | - Python 3.11+ |
| | - Node.js (for some dependencies) |
| |
|
| | ### Installation |
| |
|
| | ```bash |
| | # Clone the repository |
| | git clone <repo-url> |
| | cd design-system-extractor |
| | |
| | # Create virtual environment |
| | python -m venv venv |
| | source venv/bin/activate # or `venv\Scripts\activate` on Windows |
| | |
| | # Install dependencies |
| | pip install -r requirements.txt |
| | |
| | # Install Playwright browsers |
| | playwright install chromium |
| | |
| | # Copy environment file |
| | cp config/.env.example config/.env |
| | # Edit .env and add your ANTHROPIC_API_KEY |
| | ``` |
| |
|
| | ### Running |
| |
|
| | ```bash |
| | python app.py |
| | ``` |
| |
|
| | Open `http://localhost:7860` in your browser. |
| |
|
| | ## π Usage Guide |
| |
|
| | ### Stage 1: Discovery |
| |
|
| | 1. Enter your website URL (e.g., `https://example.com`) |
| | 2. Click "Discover Pages" |
| | 3. Review discovered pages and select which to extract from |
| | 4. Ensure you have a mix of page types (homepage, listing, detail, etc.) |
| |
|
| | ### Stage 2: Extraction |
| |
|
| | 1. Choose viewport (Desktop 1440px or Mobile 375px) |
| | 2. Click "Extract Tokens" |
| | 3. Review extracted: |
| | - **Colors**: With frequency, context, and AA compliance |
| | - **Typography**: Font families, sizes, weights |
| | - **Spacing**: Values with 8px grid fit indicators |
| | 4. Accept or reject individual tokens |
| |
|
| | ### Stage 3: Export |
| |
|
| | 1. Review final token set |
| | 2. Export as JSON |
| | 3. Import into Figma via Tokens Studio or your plugin |
| |
|
| | ## π Project Structure |
| |
|
| | ``` |
| | design-system-extractor/ |
| | βββ app.py # Main Gradio application |
| | βββ requirements.txt |
| | βββ README.md |
| | β |
| | βββ config/ |
| | β βββ .env.example # Environment template |
| | β βββ agents.yaml # Agent personas & settings |
| | β βββ settings.py # Configuration loader |
| | β |
| | βββ agents/ |
| | β βββ state.py # LangGraph state definitions |
| | β βββ graph.py # Workflow orchestration |
| | β βββ crawler.py # Agent 1: Page discovery |
| | β βββ extractor.py # Agent 1: Token extraction |
| | β βββ normalizer.py # Agent 2: Normalization |
| | β βββ advisor.py # Agent 3: Best practices |
| | β βββ generator.py # Agent 4: JSON generation |
| | β |
| | βββ core/ |
| | β βββ token_schema.py # Pydantic data models |
| | β βββ color_utils.py # Color analysis utilities |
| | β |
| | βββ ui/ |
| | β βββ (Gradio components) |
| | β |
| | βββ docs/ |
| | βββ CONTEXT.md # Context file for AI assistance |
| | ``` |
| |
|
| | ## π§ Configuration |
| |
|
| | ### Environment Variables |
| |
|
| | ```env |
| | # Required |
| | ANTHROPIC_API_KEY=your_key_here |
| | |
| | # Optional |
| | DEBUG=false |
| | LOG_LEVEL=INFO |
| | BROWSER_HEADLESS=true |
| | ``` |
| |
|
| | ### Agent Configuration |
| |
|
| | Agent personas and behavior are defined in `config/agents.yaml`. This includes: |
| |
|
| | - Extraction targets (colors, typography, spacing) |
| | - Naming conventions |
| | - Confidence thresholds |
| | - Upgrade options |
| |
|
| | ## π οΈ Development |
| |
|
| | ### Running Tests |
| |
|
| | ```bash |
| | pytest tests/ |
| | ``` |
| |
|
| | ### Adding New Features |
| |
|
| | 1. Update token schema in `core/token_schema.py` |
| | 2. Add agent logic in `agents/` |
| | 3. Update UI in `app.py` |
| | 4. Update `docs/CONTEXT.md` for AI assistance |
| |
|
| | ## π¦ Output Format |
| |
|
| | Tokens are exported in a platform-agnostic JSON format: |
| |
|
| | ```json |
| | { |
| | "metadata": { |
| | "source_url": "https://example.com", |
| | "version": "v1-recovered", |
| | "viewport": "desktop" |
| | }, |
| | "colors": { |
| | "primary-500": { |
| | "value": "#007bff", |
| | "source": "detected", |
| | "contrast_white": 4.5 |
| | } |
| | }, |
| | "typography": { |
| | "heading-lg": { |
| | "fontFamily": "Inter", |
| | "fontSize": "24px", |
| | "fontWeight": 700 |
| | } |
| | }, |
| | "spacing": { |
| | "md": { |
| | "value": "16px", |
| | "source": "detected" |
| | } |
| | } |
| | } |
| | ``` |
| |
|
| | ## π€ Contributing |
| |
|
| | Contributions are welcome! Please read the contribution guidelines first. |
| |
|
| | ## π License |
| |
|
| | MIT |
| |
|
| | --- |
| |
|
| | Built with β€οΈ for designers who've lost their source files. |
| |
|