# Content Pipeline Workflow

**Last Verified:** December 25, 2025

---

## Overview

The IGNY8 content pipeline transforms raw keywords into published WordPress articles through a multi-stage workflow. This can run manually (step-by-step) or automatically via the Automation module.

---

## Pipeline Stages

```
┌─────────────────────────────────────────────────────────────────────────┐
│                         CONTENT PIPELINE                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐          │
│  │ KEYWORDS │───►│ CLUSTERS │───►│  IDEAS   │───►│  TASKS   │          │
│  │  Stage 1 │    │  Stage 2 │    │  Stage 3 │    │  Stage 4 │          │
│  └──────────┘    └──────────┘    └──────────┘    └──────────┘          │
│                                                                          │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐          │
│  │ CONTENT  │───►│  IMAGES  │───►│  REVIEW  │───►│ PUBLISH  │          │
│  │  Stage 5 │    │  Stage 6 │    │  Stage 7 │    │  Stage 8 │          │
│  └──────────┘    └──────────┘    └──────────┘    └──────────┘          │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘
```

---

## Stage 1: Keywords

**Module:** Planner  
**Status Values:** `pending`, `clustered`, `used`, `archived`

### Input
- Seed keywords (manually added or from SEO tools)
- Optional: search volume, difficulty, CPC data

### Process
1. User adds keywords via UI or bulk import
2. Keywords validated and deduplicated
3. Assigned to site + sector

### Output
- Keyword records in `Keyword` model
- Status: `pending`

### Credit Usage
- None (free operation)

---

## Stage 2: Clustering

**Module:** Planner  
**AI Function:** `AutoClusterKeywords`

### Input
- Selected pending keywords (2-100)

### Process
1. AI analyzes semantic relationships
2. Groups keywords by topic/intent
3. Creates cluster with name + description

### Output
- `Cluster` records created
- Keywords linked to clusters
- Keyword status → `clustered`

### Credit Usage
- 1 idea credit per clustering operation

---

## Stage 3: Ideas

**Module:** Planner  
**AI Function:** `GenerateContentIdeas`

### Input
- Cluster with 2+ keywords

### Process
1. AI generates content idea titles
2. Creates brief description for each
3. Suggests primary + secondary keywords

### Output
- `ContentIdea` records created
- Status: `pending`

### Credit Usage
- 1 idea credit per idea generated

---

## Stage 4: Tasks

**Module:** Writer  
**Status Values:** `pending`, `in_progress`, `completed`, `cancelled`

### Input
- Selected content ideas

### Process
1. Ideas converted to tasks
2. Task gets content brief + keywords
3. Optional: set due date, assign user

### Output
- `Task` records created
- Status: `pending`
- Ideas status → `used`

### Credit Usage
- None (free operation)

---

## Stage 5: Content Generation

**Module:** Writer  
**AI Function:** `GenerateContent`

### Input
- Task with title + keywords + brief

### Process
1. AI generates full article content
2. Creates structured HTML output
3. Adds meta title + description

### Output
- `Content` record created
- Full HTML body
- SEO metadata
- Task status → `completed`

### Credit Usage
- 1 content credit per generation

---

## Stage 6: Image Generation

**Module:** Writer  
**AI Function:** `GenerateImages`

### Input
- Content record
- Number of images (default: 1-3)

### Process
1. AI analyzes content for image prompts
2. Generates images via DALL-E/Runware
3. Creates thumbnail + full versions

### Output
- `ContentImage` records created
- Image URLs + alt text
- Featured image assigned

### Credit Usage
- 1 image credit per image generated

---

## Stage 7: Review

**Module:** Writer  
**Status Values:** `draft`, `review`, `approved`, `published`

### Input
- Generated content + images

### Process
1. Content displayed in rich editor
2. User reviews + edits if needed
3. User approves for publishing

### Output
- Content status → `approved`
- Any manual edits saved

### Credit Usage
- None (free operation)
- Regeneration costs additional credits

---

## Stage 8: Publishing

**Module:** Publisher  
**Integration:** WordPress REST API

### Input
- Approved content
- WordPress integration credentials

### Process
1. Content formatted for WordPress
2. Images uploaded to WP media
3. Post created with categories/tags
4. Status set to draft/published

### Output
- `PublishingRecord` created
- WordPress post ID stored
- Content status → `published`

### Credit Usage
- None (free operation)

---

## Automation Mode

When running via Automation module:

1. **Configuration** - Set limits per stage
2. **Execution** - Pipeline runs automatically
3. **Pacing** - Configurable delays between operations
4. **Monitoring** - Real-time status updates

### Automation Config Options

```
Stage Limits:
- clustering_limit: Max keywords to cluster
- ideas_limit: Max ideas to generate
- content_limit: Max content to generate
- image_limit: Max images to generate
- publish_limit: Max content to publish

Timing:
- delay_between_operations: Seconds between API calls
- max_runtime: Maximum run duration

Behavior:
- auto_approve: Skip review stage
- auto_publish: Publish immediately
- stop_on_error: Halt pipeline on failure
```

---

## Data Flow Diagram

```
Seed Keywords
     │
     ▼
┌─────────────────┐
│    Keyword      │ status: pending
│    Model        │ belongs_to: site, sector
└────────┬────────┘
         │ AI: AutoCluster
         ▼
┌─────────────────┐
│    Cluster      │ keywords: [...]
│    Model        │ belongs_to: site, sector
└────────┬────────┘
         │ AI: GenerateIdeas
         ▼
┌─────────────────┐
│  ContentIdea    │ primary_keyword, secondaries
│    Model        │ cluster_id, status
└────────┬────────┘
         │ Convert to Task
         ▼
┌─────────────────┐
│     Task        │ idea_id, brief
│    Model        │ assigned_to, status
└────────┬────────┘
         │ AI: GenerateContent
         ▼
┌─────────────────┐
│    Content      │ task_id, body, meta
│    Model        │ status: draft
└────────┬────────┘
         │ AI: GenerateImages
         ▼
┌─────────────────┐
│ ContentImage    │ content_id, url
│    Model        │ alt_text, is_featured
└────────┬────────┘
         │ User Review
         ▼
┌─────────────────┐
│    Content      │ status: approved
│    (updated)    │
└────────┬────────┘
         │ WordPress API
         ▼
┌─────────────────┐
│PublishingRecord │ content_id, wp_post_id
│    Model        │ status, published_at
└─────────────────┘
```

---

## Error Handling

| Stage | Common Errors | Recovery |
|-------|---------------|----------|
| Clustering | API timeout | Retry with smaller batch |
| Ideas | API rate limit | Wait and retry |
| Content | Insufficient credits | Add credits, retry |
| Images | Image API failure | Skip images, continue |
| Publish | WordPress auth fail | Reauth integration |

---

## Monitoring

### Pipeline Stats (Dashboard)

- Keywords pending clustering
- Ideas pending task creation
- Tasks pending generation
- Content pending review
- Content pending publish

### Automation Logs

- Run ID + timestamps
- Stage + item processed
- Success/failure status
- Credit deductions
- Error messages
