# CONTENT WORKFLOW & ENTRY POINTS **Complete Workflow Diagrams for Writer → Linker → Optimizer** --- ## WORKFLOW 1: WRITER → LINKER → OPTIMIZER → PUBLISH ``` ┌─────────────┐ │ Writer │ │ Generates │ │ Content │ └──────┬──────┘ │ ▼ ┌─────────────────────┐ │ Content Saved │ │ source='igny8' │ │ sync_status='native'│ │ status='draft' │ └──────┬──────────────┘ │ ▼ ┌─────────────────────┐ │ Linker Trigger │ │ (Auto or Manual) │ └──────┬──────────────┘ │ ▼ ┌─────────────────────┐ │ LinkerService │ │ - Finds candidates │ │ - Injects links │ │ - Updates content │ └──────┬──────────────┘ │ ▼ ┌─────────────────────┐ │ Content Updated │ │ linker_version++ │ │ internal_links[] │ │ status='linked' │ └──────┬──────────────┘ │ ▼ ┌─────────────────────┐ │ Optimizer Trigger │ │ (Auto or Manual) │ └──────┬──────────────┘ │ ▼ ┌─────────────────────┐ │ OptimizerService │ │ - Analyzes content │ │ - Optimizes │ │ - Stores results │ └──────┬──────────────┘ │ ▼ ┌─────────────────────┐ │ Content Updated │ │ optimizer_version++ │ │ status='optimized' │ └──────┬──────────────┘ │ ▼ ┌─────────────────────┐ │ PublisherService │ │ - WordPress │ │ - Sites Renderer │ │ - Shopify │ └─────────────────────┘ ``` --- ## WORKFLOW 2: WORDPRESS SYNC → OPTIMIZER → PUBLISH ``` ┌─────────────────┐ │ WordPress │ │ Plugin Syncs │ │ Posts to IGNY8 │ └────────┬────────┘ │ ▼ ┌─────────────────────────┐ │ ContentSyncService │ │ sync_from_wordpress() │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ Content Created │ │ source='wordpress' │ │ sync_status='synced' │ │ external_id=wp_post_id │ │ external_url=wp_url │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ Content Visible │ │ in Writer/Content List │ │ (Filterable by source) │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ User Selects Content │ │ Clicks "Optimize" │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ OptimizerService │ │ optimize_from_wordpress_│ │ sync(content_id) │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ Optimizer Processes │ │ (Same logic as IGNY8) │ │ - Analyzes │ │ - Optimizes │ │ - Stores results │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ OptimizationTask │ │ Created │ │ Original preserved │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ Optional: Sync Back │ │ to WordPress │ │ (Two-way sync) │ └─────────────────────────┘ ``` --- ## WORKFLOW 3: 3RD PARTY SYNC → OPTIMIZER → PUBLISH ``` ┌─────────────────┐ │ Shopify/API │ │ Syncs Content │ │ to IGNY8 │ └────────┬────────┘ │ ▼ ┌─────────────────────────┐ │ ContentSyncService │ │ sync_from_shopify() │ │ or sync_from_custom() │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ Content Created │ │ source='shopify'/'custom'│ │ sync_status='imported' │ │ external_id=external_id │ │ external_url=external_url│ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ Content Visible │ │ in Writer/Content List │ │ (Filterable by source) │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ User Selects Content │ │ Clicks "Optimize" │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ OptimizerService │ │ optimize_from_external_ │ │ sync(content_id) │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ Optimizer Processes │ │ (Same logic) │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ OptimizationTask │ │ Created │ └─────────────────────────┘ ``` --- ## WORKFLOW 4: MANUAL SELECTION → LINKER/OPTIMIZER ``` ┌─────────────────────────┐ │ User Views Content List │ │ (Any source) │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ User Selects Content │ │ (Can filter by source) │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ User Clicks Action: │ │ - "Add Links" │ │ - "Optimize" │ │ - "Link & Optimize" │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ LinkerService or │ │ OptimizerService │ │ (Works for any source) │ └────────┬────────────────┘ │ ▼ ┌─────────────────────────┐ │ Content Processed │ │ Results Stored │ └─────────────────────────┘ ``` --- ## CONTENT STORAGE STRATEGY ### Unified Content Model All content stored in same `Content` model, differentiated by flags: | Field | Values | Purpose | |-------|--------|---------| | `source` | `'igny8'`, `'wordpress'`, `'shopify'`, `'custom'` | Where content came from | | `sync_status` | `'native'`, `'imported'`, `'synced'` | How content was added | | `external_id` | String | External platform ID | | `external_url` | URL | External platform URL | | `sync_metadata` | JSON | Platform-specific data | ### Content Filtering **Frontend Filters**: - By source: Show only IGNY8, WordPress, Shopify, or All - By sync_status: Show Native, Imported, Synced, or All - By optimization status: Not optimized, Optimized, Needs optimization - By linking status: Not linked, Linked, Needs linking **Backend Queries**: ```python # Get all IGNY8 content Content.objects.filter(source='igny8', sync_status='native') # Get all WordPress synced content Content.objects.filter(source='wordpress', sync_status='synced') # Get all content ready for optimization Content.objects.filter(optimizer_version=0) # Get all content ready for linking Content.objects.filter(linker_version=0) ``` --- ## ENTRY POINT SUMMARY | Entry Point | Trigger | Content Source | Goes Through | |-------------|---------|----------------|--------------| | **Writer → Linker** | Auto or Manual | `source='igny8'` | Linker → Optimizer | | **Writer → Optimizer** | Auto or Manual | `source='igny8'` | Optimizer (skip linker) | | **WordPress Sync → Optimizer** | Manual or Auto | `source='wordpress'` | Optimizer only | | **3rd Party Sync → Optimizer** | Manual or Auto | `source='shopify'/'custom'` | Optimizer only | | **Manual Selection → Linker** | Manual | Any source | Linker only | | **Manual Selection → Optimizer** | Manual | Any source | Optimizer only | --- ## KEY PRINCIPLES 1. **Unified Storage**: All content in same model, filtered by flags 2. **Source Agnostic**: Linker/Optimizer work on any content source 3. **Flexible Entry**: Multiple ways to enter pipeline 4. **Preserve Original**: Original content always preserved 5. **Version Tracking**: `linker_version` and `optimizer_version` track processing 6. **Filterable**: Content can be filtered by source, sync_status, processing status --- **END OF DOCUMENT**