Files
dss/docs/architecture/OVERVIEW.md
Digital Production Factory 276ed71f31 Initial commit: Clean DSS implementation
Migrated from design-system-swarm with fresh git history.
Old project history preserved in /home/overbits/apps/design-system-swarm

Core components:
- MCP Server (Python FastAPI with mcp 1.23.1)
- Claude Plugin (agents, commands, skills, strategies, hooks, core)
- DSS Backend (dss-mvp1 - token translation, Figma sync)
- Admin UI (Node.js/React)
- Server (Node.js/Express)
- Storybook integration (dss-mvp1/.storybook)

Self-contained configuration:
- All paths relative or use DSS_BASE_PATH=/home/overbits/dss
- PYTHONPATH configured for dss-mvp1 and dss-claude-plugin
- .env file with all configuration
- Claude plugin uses ${CLAUDE_PLUGIN_ROOT} for portability

Migration completed: $(date)
🤖 Clean migration with full functionality preserved
2025-12-09 18:45:48 -03:00

10 KiB

DSS Architecture Overview

The 7-layer architecture for the Design System Swarm


System Diagram

┌─────────────────────────────────────────────────────────────────┐
│                    LAYER 7: INTEGRATION                         │
│                 APIs, MCP Tools, Webhooks, CLI                  │
├─────────────────────────────────────────────────────────────────┤
│                    LAYER 6: PRESENTATION                        │
│               Admin UI, Storybook, Documentation                │
├─────────────────────────────────────────────────────────────────┤
│                    LAYER 5: PROCESSING                          │
│           Transformations, Analysis, Style-Dictionary           │
├─────────────────────────────────────────────────────────────────┤
│                    LAYER 4: STATE                               │
│              Token Models, Stores, Data Flow                    │
├─────────────────────────────────────────────────────────────────┤
│                    LAYER 3: VALIDATION                          │
│             Schema Checking, Linting, Error Detection           │
├─────────────────────────────────────────────────────────────────┤
│                    LAYER 2: INGESTION                           │
│         File Parsing, Token Extraction (CSS, Figma, JSON)       │
├─────────────────────────────────────────────────────────────────┤
│                    LAYER 1: CORE                                │
│          Configuration, Schemas, Database, Event Bus            │
└─────────────────────────────────────────────────────────────────┘

Layer Details

Layer 1: Core

Purpose: Foundation services and persistent storage.

Module Responsibility
storage/ SQLite database, migrations
settings.py Configuration management
schemas/ JSON schemas for validation
events/ Event bus for layer communication

Key Patterns:

  • Single source of truth (database)
  • Immutable core schemas
  • Event-driven communication

Health Indicators:

  • Database connectivity
  • Schema validity
  • Event bus latency

Layer 2: Ingestion

Purpose: Extract tokens from external sources.

Module Source Type
ingest/css.py CSS custom properties
ingest/scss.py SCSS variables
ingest/figma.py Figma API
ingest/json.py JSON token files
ingest/tailwind.py Tailwind config

Key Patterns:

  • Translation dictionaries
  • Normalized token format
  • Zero data loss parsing

Health Indicators:

  • Parse success rate
  • Source availability
  • Extraction completeness

Layer 3: Validation

Purpose: Ensure token quality and consistency.

Module Validation Type
validators/schema.py JSON schema compliance
validators/naming.py Naming convention rules
validators/contrast.py Color accessibility
validators/completeness.py Token coverage

Key Patterns:

  • Fail-fast validation
  • Actionable error messages
  • Warning vs error distinction

Health Indicators:

  • Error count
  • Warning count
  • Validation pass rate

Layer 4: State

Purpose: Token data models and state management.

Module Responsibility
models/token.py Token data class
models/collection.py Token collection
models/theme.py Theme configuration
stores/ State containers

Key Patterns:

  • Immutable data classes
  • Observable state
  • Computed derivations

Health Indicators:

  • Token count
  • Coverage score
  • Consistency score

Layer 5: Processing

Purpose: Transform and analyze tokens.

Module Responsibility
tools/transform.py Format conversion
tools/generate.py Output generation
analyze/patterns.py Pattern detection
analyze/audit.py Component auditing

Key Patterns:

  • Style-dictionary integration
  • Multi-format output
  • Analysis reports

Health Indicators:

  • Transform success rate
  • Output validity
  • Analysis coverage

Layer 6: Presentation

Purpose: User interfaces and documentation.

Module Responsibility
admin-ui/ Web administration interface
storybook/ Component documentation
docs/ Written documentation

Key Patterns:

  • Web components
  • Keyboard accessibility
  • Living documentation

Health Indicators:

  • Component coverage
  • Story completeness
  • Documentation freshness

Layer 7: Integration

Purpose: External system connectivity.

Module Responsibility
api/rest.py REST API endpoints
api/mcp.py MCP tool server
api/webhooks.py Webhook handlers
cli/ Command-line interface

Key Patterns:

  • RESTful design
  • MCP protocol compliance
  • Event-driven webhooks

Health Indicators:

  • API latency
  • MCP tool availability
  • Webhook delivery rate

Data Flow

Token Ingestion Flow

External Source (Figma/CSS/JSON)
         │
         ▼
    ┌─────────┐
    │ Layer 2 │  Ingestion: Parse and extract
    │Ingestion│
    └────┬────┘
         │
         ▼
    ┌─────────┐
    │ Layer 3 │  Validation: Check quality
    │Validate │
    └────┬────┘
         │
         ▼
    ┌─────────┐
    │ Layer 4 │  State: Store in models
    │  State  │
    └────┬────┘
         │
         ▼
    ┌─────────┐
    │ Layer 1 │  Core: Persist to database
    │  Core   │
    └─────────┘

Token Output Flow

    ┌─────────┐
    │ Layer 1 │  Core: Read from database
    │  Core   │
    └────┬────┘
         │
         ▼
    ┌─────────┐
    │ Layer 4 │  State: Load into models
    │  State  │
    └────┬────┘
         │
         ▼
    ┌─────────┐
    │ Layer 5 │  Processing: Transform format
    │ Process │
    └────┬────┘
         │
         ├─────────────────┬─────────────────┐
         ▼                 ▼                 ▼
    ┌─────────┐       ┌─────────┐       ┌─────────┐
    │ Layer 6 │       │ Layer 7 │       │  File   │
    │   UI    │       │   API   │       │ Output  │
    └─────────┘       └─────────┘       └─────────┘

Module Directory Structure

dss-mvp1/
├── storage/           # Layer 1: Core
│   ├── database.py
│   ├── migrations/
│   └── schemas/
├── ingest/            # Layer 2: Ingestion
│   ├── css.py
│   ├── scss.py
│   ├── figma.py
│   ├── json.py
│   └── tailwind.py
├── validators/        # Layer 3: Validation
│   ├── schema.py
│   ├── naming.py
│   └── contrast.py
├── models/            # Layer 4: State
│   ├── token.py
│   ├── collection.py
│   └── theme.py
├── tools/             # Layer 5: Processing
│   ├── transform.py
│   ├── generate.py
│   └── analyze/
├── admin-ui/          # Layer 6: Presentation
│   ├── js/
│   ├── css/
│   └── index.html
├── storybook/         # Layer 6: Presentation
│   └── stories/
├── api/               # Layer 7: Integration
│   ├── rest.py
│   └── mcp.py
└── cli/               # Layer 7: Integration
    └── main.py

Cross-Cutting Concerns

Logging

All layers log to a unified system:

from dss.core.logging import get_logger
logger = get_logger(__name__)

Error Handling

Errors propagate with context:

class DSSError(Exception):
    """Base error with layer context"""
    layer: str
    details: dict

Configuration

Environment-based configuration:

from dss.core.settings import settings
db_path = settings.database_path

Layer Communication

Event Bus

Layers communicate via events:

# Layer 2 emits
events.emit('tokens.ingested', collection)

# Layer 3 listens
@events.on('tokens.ingested')
def validate_tokens(collection):
    ...

Direct Calls

Lower layers called by higher:

# Layer 5 calls Layer 4
from dss.models import TokenCollection
tokens = TokenCollection.load()

Rules

  1. Downward only - Higher layers call lower
  2. Events for upward - Use events for notifications
  3. No skipping - Each layer uses adjacent layer
  4. Interface contracts - Clear APIs between layers

See Also