Widget Variant System - Module Integration Strategy

Aligning variant system with module architecture for true reusability

Widget Variant System - Module Integration Strategy

🎯 Ultimate Vision Alignment

Goal: Build the most advanced, groundbreaking, intelligent, robust platform builder in the universe.

Core Principle: Everything must be a reusable module that can be discovered, composed, and AI-generated.


🧩 Module System Integration

Current Module Philosophy (from AGENTS.md)

Every feature is a self-contained, reusable module that:

How Variants Fit Into This

Variants ARE Modules! Each variant should:

interface VariantAsModule {
  // Module Identity
  manifest: ModuleManifest;
  
  // Variant-Specific Data
  variantData: WidgetVariant;
  
  // Module Capabilities
  actions: {
    'apply-to-widget': (widgetId: string) => Promise<void>;
    'get-preview': () => Promise<string>;
    'duplicate': () => Promise<WidgetVariant>;
    'export': () => Promise<WidgetModuleDefinition>;
  };
  
  // Module Events
  events: {
    'variant-applied': { widgetId: string; variantId: string };
    'variant-updated': { variantId: string };
    'variant-promoted-to-module': { moduleId: string };
  };
}

🏗️ Architecture Integration

Layer 1: Storage (✅ Complete)

Layer 2: Module Registry Integration (🔄 Next)

Layer 3: Widget Builder Integration (🔄 Next)

Layer 4: AI Discovery (🔮 Future)


🎨 Variant → Module → Platform Flow

The Complete Lifecycle

1. Space Builder Creates Variant
   ↓
2. Variant Stored (universe/space scope)
   ↓
3. Variant Registered as Module
   ↓
4. Module Exposes Actions (apply, duplicate, export)
   ↓
5. AI Discovers Variant via Manifest
   ↓
6. Space Builder Uses Variant Everywhere
   ↓
7. Variant Promoted to Full Widget Module
   ↓
8. Module Published to Platform Marketplace
   ↓
9. Other Builders Discover & Use

Key Integration Points

A. Variant Storage Service ↔ Module Registry

// When variant is created
await variantStorage.createVariant(params, userId);
// Also register as module
await moduleRegistry.registerModule({
  id: `variant-${variantId}`,
  type: 'widget-variant',
  manifest: generateVariantManifest(variant),
  actions: variantActions
});

B. Widget Builder ↔ Action Registry

// Expose variant actions
actionRegistry.registerAction('widget-variant', 'apply', async (params) => {
  const variant = await variantStorage.getVariant(params);
  await applyVariantToWidget(params.widgetId, variant);
  eventBus.emit('variant-applied', { widgetId, variantId });
});

C. AI System ↔ Module Manifests

// AI discovers variants
const variants = await moduleRegistry.findModules({
  type: 'widget-variant',
  tags: ['button', 'primary']
});

// AI generates new variants
const newVariant = await aiService.generateVariant({
  baseWidget: 'button',
  prompt: 'Create a glowing neon button for dark theme',
  references: existingVariants
});

🔄 Revised Implementation Phases

Phase 1: Storage Foundation (✅ COMPLETE)

Phase 2: Module Integration (🎯 PRIORITY)

Goal: Make variants discoverable as modules

2.1 Variant Module Wrapper

// File: libs/libs-widgets/widgets-manager/src/lib/modules/variant-module-wrapper.ts
class VariantModuleWrapper implements BrowserModuleContract {
  constructor(private variant: WidgetVariant) {}
  
  get manifest(): ModuleManifest {
    return {
      id: `variant-${this.variant.id}`,
      name: this.variant.name,
      description: this.variant.description,
      category: 'widget-variant',
      tags: [...(this.variant.tags || []), this.variant.baseWidget],
      publicActions: {
        apply: { /* ... */ },
        preview: { /* ... */ },
        duplicate: { /* ... */ }
      }
    };
  }
  
  // Implement BrowserModuleContract methods
  async initialize() { /* ... */ }
  async start() { /* ... */ }
  // ...
}

2.2 Module Registry Integration

// Auto-register variants when loaded
class VariantModuleIntegrationService {
  async registerVariantsAsModules(universeId: string, spaceId?: string) {
    const variants = await variantStorage.getAllVariants({
      widgetType: 'all',
      universeId,
      spaceId
    });
    
    for (const variant of variants) {
      const wrapper = new VariantModuleWrapper(variant);
      await moduleRegistry.registerModule(wrapper);
    }
  }
}

2.3 Action Registry Integration

// Expose variant actions
class VariantActionProvider {
  registerActions() {
    // Apply variant to widget
    actionRegistry.register('variant', 'apply', async (params) => {
      const { variantId, widgetId } = params;
      const variant = await variantStorage.getVariant(variantId);
      await this.applyVariantToWidget(widgetId, variant);
      eventBus.emit('variant:applied', { variantId, widgetId });
    });
    
    // Get variant preview
    actionRegistry.register('variant', 'preview', async (params) => {
      const { variantId } = params;
      const variant = await variantStorage.getVariant(variantId);
      return this.generatePreview(variant);
    });
    
    // Duplicate variant
    actionRegistry.register('variant', 'duplicate', async (params) => {
      const { variantId } = params;
      return await variantStorage.duplicateVariant(variantId);
    });
    
    // Promote to module
    actionRegistry.register('variant', 'promote-to-module', async (params) => {
      const { variantId } = params;
      return await this.promoteVariantToModule(variantId);
    });
  }
}

Phase 3: Variant Creator UI (🔄 Next)

Goal: Visual interface for creating variants

3.1 Variant Creator Modal

3.2 Integration with Module System

Phase 4: Widget Builder Integration (🔄 Next)

Goal: Use variants seamlessly in widget builder

4.1 Variant Picker Component

4.2 Module Action Integration

Phase 5: Core Component Detail Page (🔄 Next)

Goal: Comprehensive variant management

5.1 Variant Management UI

5.2 Module Integration

Phase 6: Widget Gallery Playground (🔄 Next)

Goal: Interactive variant testing and creation

6.1 Live Playground

6.2 Module Discovery


🤖 AI Integration Strategy

Variant Discovery

// AI can discover variants through module manifests
const aiPrompt = "Find me all primary button variants for dark theme";

const variants = await moduleRegistry.findModules({
  type: 'widget-variant',
  tags: ['button', 'primary', 'dark-theme']
});

Variant Generation

// AI can generate new variants
const newVariant = await aiService.generateVariant({
  baseWidget: 'button',
  prompt: 'Create a glassmorphism button with subtle glow',
  style: 'modern',
  theme: 'dark'
});

// Auto-register generated variant as module
await variantStorage.createVariant(newVariant, 'ai-generated');
await moduleRegistry.registerModule(new VariantModuleWrapper(newVariant));

Variant Composition

// AI can compose multiple variants
const composedWidget = await aiService.composeWidget({
  variants: [
    'variant-button-primary',
    'variant-input-email',
    'variant-card-elevated'
  ],
  layout: 'vertical',
  prompt: 'Create a login form with these variants'
});

🎯 Success Metrics

Reusability

Discoverability

Composability


📊 Architecture Diagram

┌─────────────────────────────────────────────────────────────┐
│                   SPACE BUILDER                             │
│  (Creates variants, uses AI, builds platforms)              │
└─────────────────┬───────────────────────────────────────────┘
                  │
    ┌─────────────▼─────────────┐
    │   VARIANT CREATOR UI      │
    │  - Property editor        │
    │  - Style customization    │
    │  - Live preview          │
    │  - Module toggle         │
    └─────────────┬─────────────┘
                  │
    ┌─────────────▼──────────────┐
    │  VARIANT STORAGE SERVICE   │
    │  - CRUD operations         │
    │  - Three-tier scoping      │
    │  - Flash persistence       │
    └─────────────┬──────────────┘
                  │
    ┌─────────────▼──────────────┐
    │  VARIANT MODULE WRAPPER    │
    │  - Implements module API   │
    │  - Exposes actions         │
    │  - Emits events           │
    └─────────────┬──────────────┘
                  │
    ┌─────────────▼──────────────┐
    │    MODULE REGISTRY         │
    │  - Discovers variants      │
    │  - Provides to AI          │
    │  - Enables composition     │
    └─────────────┬──────────────┘
                  │
    ┌─────────────▼──────────────┐
    │    ACTION REGISTRY         │
    │  - Apply variant           │
    │  - Duplicate variant       │
    │  - Promote to module       │
    └─────────────┬──────────────┘
                  │
    ┌─────────────▼──────────────┐
    │      EVENT BUS             │
    │  - variant-applied         │
    │  - variant-updated         │
    │  - variant-promoted        │
    └────────────────────────────┘

🚀 Next Steps (Prioritized)

Immediate (This Session)

  1. ✅ Phase 1 & 2 complete (storage + global variants)
  2. 🎯 Create VariantModuleWrapper (integrate with module system)
  3. 🎯 Create VariantActionProvider (expose actions)
  4. 🎯 Update variant storage (auto-register as modules)

Short Term (Next Session)

  1. Build Variant Creator UI
  2. Integrate with Widget Builder
  3. Add Core Component Detail page enhancements

Medium Term

  1. Widget Gallery playground
  2. AI variant generation
  3. Variant composition system

Long Term

  1. Marketplace for variants
  2. Variant analytics dashboard
  3. Community variant sharing

💡 Key Insights

  1. Variants = Modules: Every variant should be a discoverable module
  2. Actions over UI: Expose capabilities through ActionRegistry first
  3. Events for Analytics: Track usage via EventBus
  4. AI-First: Design for AI discoverability from the start
  5. Progressive Enhancement: Start simple, add intelligence gradually

Status: Strategic alignment complete. Ready to implement module integration. Next: Create VariantModuleWrapper and VariantActionProvider