8.4 KiB
IGNY8 Pricing System - Final Simplified Plan
Date: December 26, 2025
Status: APPROVED DIRECTION
1. Current System Assessment ✅
The existing token-based credit system is correct and safe:
- ✅
CreditCostConfigwithtokens_per_creditratio per operation - ✅
min_creditsper operation (floor protection) - ✅ Actual tokens calculated after AI call (accurate margin)
- ✅ Model-aware pricing (different models = different costs)
Keep this system. Just simplify the limits and UI.
2. Actual Cost Analysis (From Production Data)
Per-Article Cost Breakdown (GPT-4.1 pricing)
| Stage | Input Tokens | Output Tokens | Actual Cost |
|---|---|---|---|
| Clustering (per article share*) | ~400 | ~400 | $0.005 |
| Idea Generation (per article share*) | ~900 | ~1000 | $0.012 |
| Content Writing | 2500 | 3500 | $0.041 |
| Image Prompt Extraction | 500 | 1100 | $0.012 |
| Text Subtotal | $0.07 | ||
| Images (3 avg @ $0.04) | $0.12 | ||
| TOTAL PER ARTICLE | $0.19 |
*With 6 images (max): $0.31 per article
Target Markup: 10-15x
| Scenario | Our Cost | 10x Price | 15x Price |
|---|---|---|---|
| Article (3 images) | $0.19 | $1.90 | $2.85 |
| Article (6 images) | $0.31 | $3.10 | $4.65 |
3. Simplified Credit Pricing (10x Markup)
3.1 Credit Cost per Operation
Using 1 credit = $0.01 and 10x markup:
| Operation | Actual Cost | Target Price | Credits |
|---|---|---|---|
| Clustering | $0.005 | $0.05 | 5 |
| Idea Generation | $0.012 | $0.12 | 10 |
| Content Writing | $0.041 | $0.41 | 40 |
| Image Prompts | $0.012 | $0.12 | 10 |
| Image (per image) | $0.04 | $0.40 | 40 |
| Linking | $0.003 | $0.03 | 3 |
| Optimization | $0.005 | $0.05 | 5 |
3.2 Full Article Workflow Cost
| Workflow | Calculation | Total Credits |
|---|---|---|
| Text only | 5 + 10 + 40 + 10 = 65 | 65 credits |
| + 3 images | 65 + (3 × 40) = 185 | 185 credits |
| + 6 images | 65 + (6 × 40) = 305 | 305 credits |
| + linking + optimization | +3 +5 = +8 | +8 credits |
Typical article: ~200 credits = $2.00 (at 10x margin)
4. Simplified Plan Structure
4.1 Remove All Limits Except Keywords
DELETE:
- ❌ max_content_ideas
- ❌ max_content_words
- ❌ max_images_basic
- ❌ max_images_premium
- ❌ max_image_prompts
- ❌ max_clusters (soft limit via credits)
- ❌ All usage tracking fields
KEEP:
- ✅ Credits (token-based, monthly allocation)
- ✅ max_keywords (storage limit, defines plan tier)
- ✅ max_sites, max_users (account management)
4.2 New Plan Tiers
| Plan | Price | Credits/Month | Keywords | Sites | Users | ~Articles |
|---|---|---|---|---|---|---|
| Free | $0 | 200 | 100 | 1 | 1 | ~1 |
| Starter | $29 | 3,000 | 1,000 | 3 | 3 | ~15 |
| Growth | $79 | 10,000 | 5,000 | 10 | 10 | ~50 |
| Scale | $199 | 30,000 | Unlimited | ∞ | ∞ | ~150 |
Simple value proposition:
- Starter:
15 full articles/month for $29 ($2/article) - Growth:
50 full articles/month for $79 ($1.60/article) - Scale:
150 full articles/month for $199 ($1.33/article)
4.3 Credit Top-Up Pricing
| Package | Credits | Price | Per Credit |
|---|---|---|---|
| Small | 500 | $7 | $0.014 |
| Medium | 2,000 | $25 | $0.0125 |
| Large | 5,000 | $55 | $0.011 |
| Bulk | 15,000 | $150 | $0.01 |
5. Content Length Feature (New)
5.1 Add Word Count Selection
Content Settings (Site-level default):
Target Article Length: [Short ~800] [Medium ~1500] [Long ~2500] [Custom: ___]
Idea Generation (per-idea):
- Include target word count in idea brief
- AI considers length when generating outline
Content Generation (per-content):
- Pass word count to prompt
- Affects token usage (longer = more credits)
5.2 Credit Adjustment for Length
| Length | Words | Token Estimate | Credits |
|---|---|---|---|
| Short | ~800 | 2000 | 25 |
| Medium | ~1500 | 3500 | 40 |
| Long | ~2500 | 5500 | 60 |
| Extra Long | ~4000 | 8000 | 90 |
User sees: "Short article: ~150 credits, Long article: ~250 credits"
6. Implementation Plan
Phase 1: Backend Updates (Day 1-2)
6.1 Update CreditCostConfig values:
# New fixed credit costs (min_credits = display value)
CREDIT_CONFIGS = {
'clustering': {'tokens_per_credit': 160, 'min_credits': 5},
'idea_generation': {'tokens_per_credit': 190, 'min_credits': 10},
'content_generation': {'tokens_per_credit': 150, 'min_credits': 25}, # Base for short
'image_prompt_extraction': {'tokens_per_credit': 160, 'min_credits': 10},
'image_generation': {'tokens_per_credit': 1, 'min_credits': 40}, # Fixed per image
'linking': {'tokens_per_credit': 300, 'min_credits': 3},
'optimization': {'tokens_per_credit': 200, 'min_credits': 5},
}
6.2 Remove monthly limit fields:
# Plan model - DELETE these fields
- max_content_ideas
- max_content_words
- max_images_basic
- max_images_premium
- max_image_prompts
# Account model - DELETE these fields
- usage_content_ideas
- usage_content_words
- usage_images_basic
- usage_images_premium
- usage_image_prompts
- usage_period_start
- usage_period_end
6.3 Remove LimitService monthly methods:
- Delete
check_monthly_limit() - Delete
increment_usage() - Delete monthly reset task
- Keep
check_hard_limit()for sites/users/keywords
Phase 2: Content Length Feature (Day 2-3)
6.4 Add ContentSettings.target_word_count:
class ContentSettings(models.Model):
# ... existing fields ...
target_word_count = models.IntegerField(
default=1500,
choices=[(800, 'Short'), (1500, 'Medium'), (2500, 'Long'), (4000, 'Extra Long')],
help_text="Default target word count for articles"
)
6.5 Update AI prompts:
generate_ideas.py- Include word count in idea briefgenerate_content.py- Pass word count target
Phase 3: Frontend Updates (Day 3-4)
6.6 Update Content Settings page:
- Add word count selector
6.7 Update Usage page:
- Show credits only (remove monthly limit bars)
- Show keywords used vs limit
- Show simple cost reference
6.8 Fix/Replace CreditCostsPanel.tsx:
- Show fixed credit costs (not token-based confusion)
- Simple table: "Content: 40 credits, Image: 40 credits"
6.9 Update Pricing page:
- New plan structure
- "~X articles/month" messaging
Phase 4: Migration & Cleanup (Day 4-5)
6.10 Database migration:
- Remove deprecated fields
- Update existing plans to new structure
6.11 Clean up dead code:
- Remove LimitService monthly tracking
- Remove usage increment calls in services
7. User Experience (After Simplification)
What User Sees:
Dashboard:
Credits: 2,847 / 3,000 remaining
Keywords: 234 / 1,000
Before generating content:
Estimated cost: ~185 credits
- Content (medium): 40 credits
- Image prompts: 10 credits
- 3 images: 120 credits
- Clustering share: ~5 credits
- Ideas share: ~10 credits
Content Settings:
Article Length: [Short] [Medium ✓] [Long] [Extra Long]
Images per Article: [3 ▼]
What Admin Sees:
Plans admin:
- Credits/month
- Keywords limit
- Sites/Users limits
- Price
No more:
- 5 different monthly limit fields
- Usage tracking complexity
- Monthly reset management
8. Summary
| Before | After |
|---|---|
| Credits + 5 monthly limits | Credits only |
| 9 limit fields per plan | 3 limit fields (credits, keywords, sites) |
| 5 usage tracking fields | 1 field (credits balance) |
| Complex monthly resets | Simple credit allocation |
| Unpredictable costs | Clear cost estimates |
| No length control | Word count selection |
Result:
- ✅ Safe margins (token-based calculation preserved)
- ✅ Simple for user (one number to track)
- ✅ Simple for admin (fewer fields to manage)
- ✅ Predictable (show estimated costs upfront)
- ✅ Flexible (manual or automation workflows work same way)
9. Immediate Actions
- Update CreditCostConfig in database with new values
- Add target_word_count to ContentSettings model
- Update prompts to include word count
- Remove monthly limit checks from services
- Update frontend Usage page and CreditCostsPanel
- Migration to remove deprecated fields