todos docs
This commit is contained in:
308
to-do-s/PRICING-SIMPLIFICATION-ANALYSIS.md
Normal file
308
to-do-s/PRICING-SIMPLIFICATION-ANALYSIS.md
Normal file
@@ -0,0 +1,308 @@
|
|||||||
|
# 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**:
|
||||||
|
- ✅ `CreditCostConfig` with `tokens_per_credit` ratio per operation
|
||||||
|
- ✅ `min_credits` per 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:**
|
||||||
|
|
||||||
|
```python
|
||||||
|
# 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:**
|
||||||
|
|
||||||
|
```python
|
||||||
|
# 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:**
|
||||||
|
|
||||||
|
```python
|
||||||
|
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 brief
|
||||||
|
- `generate_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
|
||||||
|
|
||||||
|
1. **Update CreditCostConfig** in database with new values
|
||||||
|
2. **Add target_word_count** to ContentSettings model
|
||||||
|
3. **Update prompts** to include word count
|
||||||
|
4. **Remove monthly limit checks** from services
|
||||||
|
5. **Update frontend** Usage page and CreditCostsPanel
|
||||||
|
6. **Migration** to remove deprecated fields
|
||||||
Reference in New Issue
Block a user