7.2 KiB
7.2 KiB
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
{
"content_id": 123,
"entry_point": "igny8",
"optimization_goals": ["seo", "readability", "keyword_density"]
}
Optimize Response
{
"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:
- Load content with metadata
- Analyze current state
- AIEngine executes
OptimizeContentFunction:- Reviews content against SEO best practices
- Suggests improvements
- Rewrites sections if needed
- Create
OptimizationTaskrecord - Save original and optimized versions
- Return comparison view
Module Enable Control
Backend Model
# modules/system/settings_models.py
class ModuleEnableSettings(AccountBaseModel):
optimizer_enabled = models.BooleanField(default=True)
Frontend Check
// 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 |