264 lines
7.2 KiB
Markdown
264 lines
7.2 KiB
Markdown
# Optimizer Module
|
|
|
|
**Last Verified:** January 20, 2026
|
|
**Version:** 1.8.4
|
|
**Status:** ⏸️ Inactive (Disabled by Default)
|
|
**Backend Path:** `backend/igny8_core/modules/optimizer/` + `backend/igny8_core/business/optimization/`
|
|
**Frontend Path:** `frontend/src/pages/Optimizer/`
|
|
|
|
---
|
|
|
|
## Module Status
|
|
|
|
| Aspect | Current State | Notes |
|
|
|--------|---------------|-------|
|
|
| Backend API | ✅ Implemented | Endpoints functional |
|
|
| Business Logic | ✅ Implemented | Optimization service exists |
|
|
| Frontend Pages | ✅ Implemented | UI exists |
|
|
| Sidebar Nav | ⚠️ Conditional | Hidden when disabled |
|
|
| Route Protection | ❌ Not Protected | Direct URL access still works |
|
|
| Dashboard References | ❌ Not Hidden | May show in dashboard |
|
|
| Default State | Disabled | `optimizer_enabled = True` in model, but typically disabled |
|
|
|
|
**⚠️ Pending Implementation:** Extend module disable to route-level protection and all page references.
|
|
|
|
---
|
|
|
|
## Quick Reference
|
|
|
|
| What | File | Key Items |
|
|
|------|------|-----------|
|
|
| Views | `modules/optimizer/views.py` | `OptimizerViewSet` |
|
|
| Models | `business/optimization/models.py` | `OptimizationTask` |
|
|
| Services | `business/optimization/services/*.py` | Optimization logic |
|
|
| AI Function | `ai/functions/optimize.py` | `OptimizeContentFunction` |
|
|
| Frontend Pages | `pages/Optimizer/index.tsx` | Optimizer overview |
|
|
| Frontend Pages | `pages/Optimizer/OptimizerContent.tsx` | Select content |
|
|
| Frontend Pages | `pages/Optimizer/OptimizerPreview.tsx` | Analysis preview |
|
|
| API Client | `api/optimizer.api.ts` | `optimizerApi` |
|
|
| Module Control | `modules/system/settings_models.py` | `ModuleEnableSettings.optimizer_enabled` |
|
|
|
|
---
|
|
|
|
## Purpose
|
|
|
|
The Optimizer module provides AI-powered content optimization:
|
|
- Analyze existing content for SEO improvements
|
|
- Suggest and apply optimizations
|
|
- Track before/after scores
|
|
|
|
---
|
|
|
|
## Data Models
|
|
|
|
### OptimizationTask
|
|
|
|
| Field | Type | Purpose |
|
|
|-------|------|---------|
|
|
| account | FK | Owner account |
|
|
| site | FK | Parent site |
|
|
| sector | FK | Parent sector |
|
|
| content | FK | Target content |
|
|
| entry_point | CharField | auto/igny8/wordpress/external/manual |
|
|
| status | CharField | pending/analyzing/optimizing/completed/failed |
|
|
| original_score | Integer | Score before optimization |
|
|
| optimized_score | Integer | Score after optimization |
|
|
| original_content | TextField | Content before changes |
|
|
| optimized_content | TextField | Content after changes |
|
|
| suggestions | JSON | Optimization suggestions |
|
|
| applied_changes | JSON | Changes that were applied |
|
|
| credits_used | Decimal | Credits consumed |
|
|
| created_at | DateTime | Creation date |
|
|
| completed_at | DateTime | Completion date |
|
|
|
|
---
|
|
|
|
## API Endpoints
|
|
|
|
| Method | Path | Handler | Purpose |
|
|
|--------|------|---------|---------|
|
|
| POST | `/api/v1/optimizer/optimize/` | `OptimizerViewSet.optimize` | Optimize single content |
|
|
| POST | `/api/v1/optimizer/batch_optimize/` | `OptimizerViewSet.batch_optimize` | Optimize multiple items |
|
|
| POST | `/api/v1/optimizer/analyze/` | `OptimizerViewSet.analyze` | Analyze without applying |
|
|
|
|
### Entry Points
|
|
|
|
| Entry Point | Description |
|
|
|-------------|-------------|
|
|
| `auto` | Auto-detect based on content source |
|
|
| `igny8` | IGNY8-generated content |
|
|
| `wordpress` | WordPress-synced content |
|
|
| `external` | External platform content |
|
|
| `manual` | Manual optimization trigger |
|
|
|
|
### Optimize Request
|
|
|
|
```json
|
|
{
|
|
"content_id": 123,
|
|
"entry_point": "igny8",
|
|
"optimization_goals": ["seo", "readability", "keyword_density"]
|
|
}
|
|
```
|
|
|
|
### Optimize Response
|
|
|
|
```json
|
|
{
|
|
"task_id": 456,
|
|
"content_id": 123,
|
|
"original_score": 65,
|
|
"optimized_score": 85,
|
|
"suggestions": [
|
|
{
|
|
"type": "keyword_density",
|
|
"description": "Increase keyword 'SEO' usage",
|
|
"applied": true
|
|
},
|
|
{
|
|
"type": "meta_description",
|
|
"description": "Meta description too short",
|
|
"applied": true
|
|
}
|
|
],
|
|
"credits_used": 15
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Business Logic
|
|
|
|
### Content Analysis
|
|
|
|
**Trigger:** User clicks "Analyze"
|
|
**Credit Cost:** None (analysis only)
|
|
|
|
**Checks:**
|
|
- Keyword density and distribution
|
|
- Meta title and description optimization
|
|
- Heading structure (H1, H2, H3)
|
|
- Readability score
|
|
- Content length
|
|
- Internal/external link count
|
|
- Image alt text presence
|
|
|
|
### Content Optimization (AI)
|
|
|
|
**Trigger:** User clicks "Optimize"
|
|
**AI Function:** `OptimizeContentFunction`
|
|
**Credit Cost:** Per 200 words
|
|
|
|
**Flow:**
|
|
1. Load content with metadata
|
|
2. Analyze current state
|
|
3. AIEngine executes `OptimizeContentFunction`:
|
|
- Reviews content against SEO best practices
|
|
- Suggests improvements
|
|
- Rewrites sections if needed
|
|
4. Create `OptimizationTask` record
|
|
5. Save original and optimized versions
|
|
6. Return comparison view
|
|
|
|
---
|
|
|
|
## Module Enable Control
|
|
|
|
### Backend Model
|
|
|
|
```python
|
|
# modules/system/settings_models.py
|
|
class ModuleEnableSettings(AccountBaseModel):
|
|
optimizer_enabled = models.BooleanField(default=True)
|
|
```
|
|
|
|
### Frontend Check
|
|
|
|
```typescript
|
|
// layout/AppSidebar.tsx
|
|
if (isModuleEnabled('optimizer')) {
|
|
workflowItems.push({
|
|
name: "Optimizer",
|
|
path: "/optimizer/content",
|
|
});
|
|
}
|
|
```
|
|
|
|
### Current Limitation
|
|
|
|
Direct URL access to `/optimizer/*` routes still works even when module is disabled.
|
|
|
|
---
|
|
|
|
## Frontend Pages
|
|
|
|
### Optimizer Overview (`/optimizer`)
|
|
|
|
- Module overview
|
|
- Quick stats
|
|
- Recent optimizations
|
|
|
|
### Select Content (`/optimizer/content`)
|
|
|
|
- List of content available for optimization
|
|
- Filter by score, status
|
|
- Start analysis button
|
|
- Batch optimize action
|
|
|
|
### Analysis Preview (`/optimizer/preview`)
|
|
|
|
- Side-by-side comparison
|
|
- Suggestion list
|
|
- Accept/reject changes
|
|
- Apply optimization button
|
|
|
|
---
|
|
|
|
## Optimization Scoring
|
|
|
|
| Metric | Weight | Description |
|
|
|--------|--------|-------------|
|
|
| Keyword Density | 20% | Target 1-3% density |
|
|
| Meta Quality | 15% | Title 50-60 chars, desc 150-160 chars |
|
|
| Heading Structure | 15% | Proper H1-H6 hierarchy |
|
|
| Readability | 15% | Flesch-Kincaid score |
|
|
| Content Length | 10% | Meets word count target |
|
|
| Internal Links | 10% | 2-5 internal links |
|
|
| Image Optimization | 10% | Alt text, sizing |
|
|
| Mobile Friendly | 5% | No wide elements |
|
|
|
|
---
|
|
|
|
## Integration Points
|
|
|
|
| From | To | Trigger |
|
|
|------|----|---------|
|
|
| Content | Optimizer | Manual analysis/optimize |
|
|
| WordPress | Optimizer | Synced content optimization |
|
|
| Optimizer | Content | Apply changes |
|
|
| Automation | Optimizer | Automated optimization (future) |
|
|
|
|
---
|
|
|
|
## Common Issues
|
|
|
|
| Issue | Cause | Fix |
|
|
|-------|-------|-----|
|
|
| Module visible when disabled | Only sidebar hidden | Pending: route protection |
|
|
| Optimization not improving | Content already good | Check original score |
|
|
| High credit usage | Large content | Optimize sections |
|
|
| Changes not saving | Apply not clicked | Click "Apply Changes" |
|
|
|
|
---
|
|
|
|
## Planned Changes
|
|
|
|
| Feature | Status | Description |
|
|
|---------|--------|-------------|
|
|
| Route-level protection | 🔜 Pending | Block access when module disabled |
|
|
| Dashboard card hiding | 🔜 Pending | Hide from dashboard when disabled |
|
|
| Automation integration | 🔜 Planned | Add to automation pipeline |
|
|
| Partial optimization | 🔜 Planned | Optimize specific sections only |
|
|
| Competitor analysis | 🔜 Planned | Compare against top-ranking content |
|
|
| A/B testing | 🔜 Planned | Track performance of optimizations |
|