# ALwrity Onboarding System - Developer Guide ## Architecture Overview The ALwrity Onboarding System is built with a modular, service-based architecture that separates concerns and promotes maintainability. The system is designed to handle user isolation, progressive setup, and comprehensive onboarding workflows. ## ๐Ÿ—๏ธ System Architecture ### Core Components ``` backend/api/onboarding_utils/ โ”œโ”€โ”€ __init__.py # Package initialization โ”œโ”€โ”€ onboarding_completion_service.py # Final onboarding completion logic โ”œโ”€โ”€ onboarding_summary_service.py # Comprehensive summary generation โ”œโ”€โ”€ onboarding_config_service.py # Configuration and provider management โ”œโ”€โ”€ business_info_service.py # Business information CRUD operations โ”œโ”€โ”€ api_key_management_service.py # API key operations and validation โ”œโ”€โ”€ step_management_service.py # Step progression and validation โ”œโ”€โ”€ onboarding_control_service.py # Onboarding session management โ”œโ”€โ”€ persona_management_service.py # Persona generation and management โ”œโ”€โ”€ README.md # End-user documentation โ””โ”€โ”€ DEVELOPER_GUIDE.md # This file ``` ### Service Responsibilities #### 1. OnboardingCompletionService **Purpose**: Handles the complex logic for completing the onboarding process **Key Methods**: - `complete_onboarding()` - Main completion logic with validation - `_validate_required_steps()` - Ensures all required steps are completed - `_validate_api_keys()` - Validates API key configuration - `_generate_persona_from_onboarding()` - Generates writing persona #### 2. OnboardingSummaryService **Purpose**: Generates comprehensive onboarding summaries for the final step **Key Methods**: - `get_onboarding_summary()` - Main summary generation - `_get_api_keys()` - Retrieves configured API keys - `_get_website_analysis()` - Gets website analysis data - `_get_research_preferences()` - Retrieves research preferences - `_check_persona_readiness()` - Validates persona generation readiness #### 3. OnboardingConfigService **Purpose**: Manages onboarding configuration and provider setup information **Key Methods**: - `get_onboarding_config()` - Returns complete onboarding configuration - `get_provider_setup_info()` - Provider-specific setup information - `get_all_providers_info()` - All available providers - `validate_provider_key()` - API key validation - `get_enhanced_validation_status()` - Comprehensive validation status #### 4. BusinessInfoService **Purpose**: Handles business information management for users without websites **Key Methods**: - `save_business_info()` - Create new business information - `get_business_info()` - Retrieve by ID - `get_business_info_by_user()` - Retrieve by user ID - `update_business_info()` - Update existing information #### 5. APIKeyManagementService **Purpose**: Manages API key operations with caching and security **Key Methods**: - `get_api_keys()` - Retrieves masked API keys with caching - `save_api_key()` - Saves new API keys securely - `validate_api_keys()` - Validates all configured keys #### 6. StepManagementService **Purpose**: Controls step progression and validation **Key Methods**: - `get_onboarding_status()` - Current onboarding status - `get_onboarding_progress_full()` - Complete progress data - `get_step_data()` - Specific step information - `complete_step()` - Mark step as completed with environment setup - `skip_step()` - Skip optional steps - `validate_step_access()` - Validate step accessibility #### 7. OnboardingControlService **Purpose**: Manages onboarding session control **Key Methods**: - `start_onboarding()` - Initialize new onboarding session - `reset_onboarding()` - Reset onboarding progress - `get_resume_info()` - Resume information for incomplete sessions #### 8. PersonaManagementService **Purpose**: Handles persona generation and management **Key Methods**: - `check_persona_generation_readiness()` - Validate persona readiness - `generate_persona_preview()` - Generate preview without saving - `generate_writing_persona()` - Generate and save persona - `get_user_writing_personas()` - Retrieve user personas ## ๐Ÿ”ง Integration Points ### Progressive Setup Integration The onboarding system integrates with the progressive setup service: ```python # In step_management_service.py from services.progressive_setup_service import ProgressiveSetupService # Initialize/upgrade user environment based on new step if step_number == 1: setup_service.initialize_user_environment(user_id) else: setup_service.upgrade_user_environment(user_id, step_number) ``` ### User Isolation Each user gets their own: - **Workspace**: `lib/workspace/users/user_/` - **Database Tables**: `user__*` tables - **Configuration**: User-specific settings - **Progress**: Individual onboarding progress ### Authentication Integration All services require authentication: ```python from middleware.auth_middleware import get_current_user async def endpoint_function(current_user: Dict[str, Any] = Depends(get_current_user)): user_id = str(current_user.get('id')) # Service logic here ``` ## ๐Ÿ“Š Data Flow ### 1. Onboarding Initialization ``` User Login โ†’ Authentication โ†’ Check Onboarding Status โ†’ Redirect to Appropriate Step ``` ### 2. Step Completion ``` User Completes Step โ†’ Validate Step โ†’ Save Progress โ†’ Setup User Environment โ†’ Return Success ``` ### 3. Environment Setup ``` Step Completed โ†’ Progressive Setup Service โ†’ User Workspace Creation โ†’ Feature Activation ``` ### 4. Final Completion ``` All Steps Complete โ†’ Validation โ†’ Persona Generation โ†’ Environment Finalization โ†’ Onboarding Complete ``` ## ๐Ÿ› ๏ธ Development Guidelines ### Adding New Services 1. **Create Service Class**: ```python class NewService: def __init__(self): # Initialize dependencies async def main_method(self, params): # Main functionality pass ``` 2. **Update __init__.py**: ```python from .new_service import NewService __all__ = [ # ... existing services 'NewService' ] ``` 3. **Update Main Onboarding File**: ```python async def new_endpoint(): try: from onboarding_utils.new_service import NewService service = NewService() return await service.main_method() except Exception as e: logger.error(f"Error: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error") ``` ### Error Handling Pattern All services follow a consistent error handling pattern: ```python try: # Service logic return result except HTTPException: raise # Re-raise HTTP exceptions except Exception as e: logger.error(f"Error in service: {str(e)}") raise HTTPException(status_code=500, detail="Internal server error") ``` ### Logging Guidelines Use structured logging with context: ```python logger.info(f"[service_name] Action for user {user_id}") logger.success(f"โœ… Operation completed for user {user_id}") logger.warning(f"โš ๏ธ Non-critical issue: {issue}") logger.error(f"โŒ Error in operation: {str(e)}") ``` ## ๐Ÿงช Testing ### Unit Testing Each service should have comprehensive unit tests: ```python import pytest from onboarding_utils.step_management_service import StepManagementService class TestStepManagementService: def setup_method(self): self.service = StepManagementService() async def test_get_onboarding_status(self): # Test implementation pass ``` ### Integration Testing Test service interactions: ```python async def test_complete_onboarding_flow(): # Test complete onboarding workflow pass ``` ## ๐Ÿ”’ Security Considerations ### API Key Security - Keys are masked in responses - Encryption before storage - Secure transmission only ### User Data Isolation - User-specific workspaces - Isolated database tables - No cross-user data access ### Input Validation - Validate all user inputs - Sanitize data before processing - Use Pydantic models for validation ## ๐Ÿ“ˆ Performance Optimization ### Caching Strategy - API key responses cached for 30 seconds - User progress cached in memory - Database queries optimized ### Database Optimization - User-specific table indexing - Efficient query patterns - Connection pooling ### Resource Management - Proper database session handling - Memory-efficient data processing - Background task optimization ## ๐Ÿš€ Deployment Considerations ### Environment Variables ```bash # Required for onboarding CLERK_PUBLISHABLE_KEY=your_key CLERK_SECRET_KEY=your_secret GEMINI_API_KEY=your_gemini_key EXA_API_KEY=your_exa_key COPILOTKIT_API_KEY=your_copilotkit_key ``` ### Database Setup - User-specific tables created on demand - Progressive table creation based on onboarding progress - Automatic cleanup on user deletion ### Monitoring - Track onboarding completion rates - Monitor step abandonment points - Performance metrics for each service ## ๐Ÿ”„ Maintenance ### Regular Tasks - Review and update API key validation - Monitor service performance - Update documentation - Clean up abandoned onboarding sessions ### Version Updates - Maintain backward compatibility - Gradual feature rollouts - User migration strategies ## ๐Ÿ“š Additional Resources ### Related Documentation - [User Environment Setup](../services/user_workspace_manager.py) - [Progressive Setup Service](../services/progressive_setup_service.py) - [Authentication Middleware](../middleware/auth_middleware.py) ### External Dependencies - FastAPI for API framework - SQLAlchemy for database operations - Pydantic for data validation - Loguru for logging --- *This developer guide provides comprehensive information for maintaining and extending the ALwrity Onboarding System. For questions or contributions, please refer to the main project documentation.*