ContentGuardianAgent consolidation:
- Merge 3 duplicate classes into single source in specialized/content_guardian.py
- Watchdog audit_committee() with heuristic scoring, coverage gaps, overlaps, alerts
- Remove misleading rejection_rate() helper; use acceptance_rate directly
- Integrate audit + alerts + trend signals into today_workflow_service.py
Team Activity page:
- QualityAuditPanel: health ring, per-agent critiques, coverage gaps, overlaps
- TrendSignalsPanel: opportunity cards with urgency/impact/coverage bars
- AlertBanner: persistent dismiss via POST /alerts/{id}/mark-read
- AgentHelpModal: dialog showing all 8 agents with descriptions, tools, schedule
- QualityAuditPanel action buttons: Fill gap -> /content-planning, Resolve overlap, View CTA on alerts/issues
- TrendSignalsPanel action buttons: Create content from this trend -> /blog-writer with trend context state
Onboarding system:
- Step 4 validation: no auto-pass via basic_ready; requires persona data or explicit progression
- Step 5 validation: logs warning on auto-pass without integration data
- OnboardingCompletionService: single DB session, transactional task creation, upsert pattern
- Business-without-website: nullable website_url on SIFIndexingTask and MarketTrendsTask
- DeepCompetitorAnalysisExecutor: 5-min timeout, 10-competitor cap, asyncio.wait_for
- Persona generation: async with 30s timeout, falls back to scheduler
- OnboardingProgressService.reset_onboarding(): resets session + pauses all DB tasks
- OnboardingControlService.reset_onboarding(): also cancels APScheduler jobs
- FinalStep TaskSchedulingPanel: shows scheduled/failed tasks after completion, 8s auto-redirect
- onboarding_completed agent activity event logged to feed
Documentation:
- docs-site/features/onboarding/: overview, steps, scheduler-tasks, technical-reference (4 pages)
- docs-site/mkdocs.yml: added Onboarding System nav section
- docs-site/features/sif-agents/: overview, agent-directory, committee-system, content-guardian (4 pages)
- docs-site/features/team-activity/: overview, quality-audit, trend-signals, alert-system (4 pages)
- docs-site/features/todays-workflow/: updated overview, technical-architecture, workflow-guide, api-reference
Onboarding Services Package
This package contains all onboarding-related services and utilities for ALwrity. All onboarding data is stored in the database with proper user isolation, replacing the previous file-based JSON storage system.
Architecture
Database-First Design
- Primary Storage: PostgreSQL database with proper foreign keys and relationships
- User Isolation: Each user's onboarding data is completely separate
- No File Storage: Removed all JSON file operations for production scalability
- Local Development: API keys still written to
.envfor developer convenience
Service Structure
backend/services/onboarding/
├── __init__.py # Package exports
├── database_service.py # Core database operations
├── progress_service.py # Progress tracking and step management
├── data_service.py # Data validation and processing
├── api_key_manager.py # API key management + progress tracking
└── README.md # This documentation
Services
1. OnboardingDatabaseService (database_service.py)
Purpose: Core database operations for onboarding data with user isolation.
Key Features:
- User-specific session management
- API key storage and retrieval
- Website analysis persistence
- Research preferences management
- Persona data storage
- Brand analysis support (feature-flagged)
Main Methods:
get_or_create_session(user_id)- Get or create user sessionsave_api_key(user_id, provider, key)- Store API keyssave_website_analysis(user_id, data)- Store website analysissave_research_preferences(user_id, prefs)- Store research settingssave_persona_data(user_id, data)- Store persona information
2. OnboardingProgressService (progress_service.py)
Purpose: High-level progress tracking and step management.
Key Features:
- Database-only progress tracking
- Step completion validation
- Progress percentage calculation
- Onboarding completion management
Main Methods:
get_onboarding_status(user_id)- Get current statusupdate_step(user_id, step_number)- Update current stepupdate_progress(user_id, percentage)- Update progresscomplete_onboarding(user_id)- Mark as complete
3. OnboardingDataService (data_service.py)
Purpose: Extract and use onboarding data for AI personalization.
Key Features:
- Personalized AI input generation
- Website analysis data extraction
- Research preferences integration
- Default fallback data
Main Methods:
get_personalized_ai_inputs(user_id)- Generate personalized inputsget_user_website_analysis(user_id)- Get website dataget_user_research_preferences(user_id)- Get research settings
4. OnboardingProgress + APIKeyManager (api_key_manager.py)
Purpose: Combined API key management and progress tracking with database persistence.
Key Features:
- Database-only progress persistence (no JSON files)
- API key management with environment integration
- Step-by-step progress tracking
- User-specific progress instances
Main Classes:
OnboardingProgress- Progress tracking with database persistenceAPIKeyManager- API key managementStepData- Individual step data structureStepStatus- Step status enumeration
Database Schema
Core Tables
onboarding_sessions- User session trackingapi_keys- User-specific API key storagewebsite_analyses- Website analysis dataresearch_preferences- User research settingspersona_data- Generated persona information
Relationships
- All data tables reference
onboarding_sessions.id - User isolation via
user_idforeign key - Proper cascade deletion and updates
Usage Examples
Basic Progress Tracking
from services.onboarding import OnboardingProgress
# Get user-specific progress
progress = OnboardingProgress(user_id="user123")
# Mark step as completed
progress.mark_step_completed(1, {"api_keys": {"openai": "sk-..."}})
# Get progress summary
summary = progress.get_progress_summary()
Database Operations
from services.onboarding import OnboardingDatabaseService
from services.database import SessionLocal
db = SessionLocal()
service = OnboardingDatabaseService(db)
# Save API key
service.save_api_key("user123", "openai", "sk-...")
# Get website analysis
analysis = service.get_website_analysis("user123", db)
Progress Service
from services.onboarding import OnboardingProgressService
service = OnboardingProgressService()
# Get status
status = service.get_onboarding_status("user123")
# Update progress
service.update_step("user123", 2)
service.update_progress("user123", 50.0)
Migration from File-Based Storage
What Was Removed
- JSON file operations (
.onboarding_progress*.json) - File-based progress persistence
- Dual persistence system (file + database)
What Was Kept
- Database persistence (enhanced)
- Local development
.envAPI key writing - All existing functionality and APIs
Benefits
- Production Ready: No ephemeral file storage
- Scalable: Database-backed with proper indexing
- User Isolated: Complete data separation
- Maintainable: Single source of truth
Environment Variables
Required
- Database connection (via
services.database) - User authentication system
Optional
ENABLE_WEBSITE_BRAND_COLUMNS=true- Enable brand analysis featuresDEPLOY_ENV=local- Enable local.envAPI key writing
Error Handling
All services include comprehensive error handling:
- Database connection failures
- User not found scenarios
- Invalid data validation
- Graceful fallbacks to defaults
Performance Considerations
- Database queries are optimized with proper indexing
- User-specific caching where appropriate
- Minimal database calls through efficient service design
- Connection pooling via SQLAlchemy
Testing
Each service can be tested independently:
- Unit tests for individual methods
- Integration tests with database
- Mock database sessions for isolated testing
Future Enhancements
- Real-time progress updates via WebSocket
- Progress analytics and reporting
- Bulk user operations
- Advanced validation rules
- Progress recovery mechanisms