# Modular Design System: Alwrity Onboarding ## 🎯 **Overview** This document outlines the modular design system for Alwrity's onboarding flow, ensuring **consistency**, **reusability**, and **maintainability** across all onboarding steps while preserving all current functionality and styling. --- ## **🏗️ Architecture** ### **Core Components** ``` frontend/src/components/OnboardingWizard/ ├── common/ │ ├── useOnboardingStyles.ts # Centralized styling hook │ ├── onboardingUtils.ts # Shared utility functions │ ├── OnboardingStepLayout.tsx # Reusable layout component │ ├── OnboardingCard.tsx # Reusable card component │ └── OnboardingButton.tsx # Reusable button component ├── ApiKeyStep.tsx # Refactored to use design system ├── WebsiteStep.tsx # Will be refactored ├── ResearchStep.tsx # Will be refactored ├── PersonalizationStep.tsx # Will be refactored ├── IntegrationsStep.tsx # Will be refactored └── FinalStep.tsx # Will be refactored ``` --- ## **🎨 Design System Components** ### **1. useOnboardingStyles Hook** **Purpose**: Centralized styling for all onboarding components **Benefits**: - ✅ Consistent styling across all steps - ✅ Easy to maintain and update - ✅ Theme-aware styling - ✅ Reusable style objects ```typescript // Usage in any step component const styles = useOnboardingStyles(); // Apply consistent styling Title ``` ### **2. onboardingUtils Functions** **Purpose**: Shared utility functions for common operations **Benefits**: - ✅ DRY (Don't Repeat Yourself) principle - ✅ Consistent validation logic - ✅ Reusable animation utilities - ✅ Standardized error handling ```typescript // Validation utilities const isValid = validateApiKey(key, 'openai'); const status = getKeyStatus(key, 'openai'); // Animation utilities const delay = getAnimationDelay(index); const direction = getSlideDirection(current, target); // Form utilities const isValid = isFormValid(formValues); const progress = calculateProgress(current, total); ``` ### **3. OnboardingStepLayout Component** **Purpose**: Consistent layout structure for all steps **Benefits**: - ✅ Standardized header structure - ✅ Consistent spacing and typography - ✅ Reusable animations - ✅ Flexible content area ```typescript } title="Connect Your AI Services" subtitle="Add your API keys to enable AI-powered content creation" > {/* Step-specific content */} ``` ### **4. OnboardingCard Component** **Purpose**: Consistent card styling with status indicators **Benefits**: - ✅ Standardized card appearance - ✅ Built-in status validation - ✅ Consistent hover effects - ✅ Reusable across all steps ```typescript } status={getKeyStatus(key, 'openai')} saved={!!savedKeys.openai} > ``` --- ## **🔧 Implementation Guidelines** ### **1. Step Component Structure** Every onboarding step should follow this structure: ```typescript import { useOnboardingStyles } from './common/useOnboardingStyles'; import { relevantUtils } from './common/onboardingUtils'; const StepComponent: React.FC = ({ onContinue }) => { const styles = useOnboardingStyles(); // State management const [formData, setFormData] = useState({}); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); // Validation const isValid = isFormValid(formData); // Event handlers const handleSave = async () => { // Implementation }; return ( {/* Header */} {/* Header content */} {/* Form content */} {/* Cards and form elements */} {/* Alerts */} {/* Action buttons */} {/* Skip section */} ); }; ``` ### **2. Styling Guidelines** - **Use the styles hook**: Always use `useOnboardingStyles()` for styling - **Consistent spacing**: Use the predefined spacing values - **Theme integration**: Leverage Material-UI theme for colors - **Responsive design**: Use the responsive breakpoints ### **3. Animation Guidelines** - **Fade in**: Use `Fade` component for step transitions - **Zoom effects**: Use `Zoom` for important elements - **Slide transitions**: Use `Slide` for step navigation - **Consistent timing**: Use predefined timeouts (300ms, 500ms, 700ms) ### **4. Validation Guidelines** - **Real-time validation**: Use debounced validation for better UX - **Visual feedback**: Show status chips and border colors - **Error handling**: Use `formatErrorMessage` for consistent error messages - **Form validation**: Use `isFormValid` for form completeness --- ## **📋 Component Checklist** ### **For Each Step Component** - [ ] **Import design system**: Use `useOnboardingStyles` and relevant utilities - [ ] **Consistent structure**: Follow the standard component structure - [ ] **Proper animations**: Use `Fade`, `Zoom`, and `Slide` components - [ ] **Form validation**: Implement real-time validation with visual feedback - [ ] **Error handling**: Use `formatErrorMessage` for error display - [ ] **Loading states**: Show loading indicators during async operations - [ ] **Auto-save**: Implement auto-save functionality where appropriate - [ ] **Skip options**: Provide skip functionality for optional steps - [ ] **Help sections**: Include collapsible help content - [ ] **Responsive design**: Ensure mobile-friendly layout ### **For New Components** - [ ] **Reusable design**: Make components generic and reusable - [ ] **Props interface**: Define clear TypeScript interfaces - [ ] **Default values**: Provide sensible defaults - [ ] **Documentation**: Add JSDoc comments - [ ] **Testing**: Include unit tests for utilities --- ## **🎯 Benefits of This System** ### **1. Consistency** - ✅ **Visual consistency**: All steps look and feel the same - ✅ **Behavior consistency**: Same interactions across all steps - ✅ **Animation consistency**: Standardized transitions and effects - ✅ **Error handling**: Consistent error messages and recovery ### **2. Reusability** - ✅ **Shared components**: Common components used across steps - ✅ **Shared utilities**: Validation, animation, and form utilities - ✅ **Shared styles**: Centralized styling system - ✅ **Shared logic**: Common business logic extracted to utilities ### **3. Maintainability** - ✅ **Single source of truth**: Styles and utilities in one place - ✅ **Easy updates**: Change once, affects all components - ✅ **Clear structure**: Consistent file and component organization - ✅ **Type safety**: Full TypeScript support with proper interfaces ### **4. Performance** - ✅ **Optimized animations**: Efficient animation utilities - ✅ **Debounced operations**: Prevent excessive API calls - ✅ **Lazy loading**: Components load only when needed - ✅ **Memory management**: Proper cleanup in useEffect hooks --- ## **🚀 Migration Strategy** ### **Phase 1: Foundation (Complete)** - ✅ Create design system components - ✅ Implement utility functions - ✅ Create styling hook - ✅ Refactor ApiKeyStep as example ### **Phase 2: Component Migration** - [ ] Refactor WebsiteStep - [ ] Refactor ResearchStep - [ ] Refactor PersonalizationStep - [ ] Refactor IntegrationsStep - [ ] Refactor FinalStep ### **Phase 3: Enhancement** - [ ] Add more utility functions as needed - [ ] Create additional reusable components - [ ] Implement advanced animations - [ ] Add accessibility features ### **Phase 4: Testing & Optimization** - [ ] Add unit tests for utilities - [ ] Add integration tests for components - [ ] Performance optimization - [ ] Accessibility audit --- ## **📚 Usage Examples** ### **Creating a New Step** ```typescript // 1. Import design system import { useOnboardingStyles } from './common/useOnboardingStyles'; import { validateRequired, formatErrorMessage } from './common/onboardingUtils'; // 2. Use the styles hook const styles = useOnboardingStyles(); // 3. Implement consistent structure const NewStep: React.FC = ({ onContinue }) => { // State and logic return ( {/* Header */} {/* Content */} {/* Actions */} ); }; ``` ### **Adding New Utilities** ```typescript // Add to onboardingUtils.ts export const validateEmail = (email: string): boolean => { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); }; export const formatPhoneNumber = (phone: string): string => { // Implementation }; ``` --- **This modular design system ensures that all onboarding steps are consistent, maintainable, and provide an excellent user experience while reducing development time and improving code quality.**