Feature: Complete Admin UI Overhaul, Content Factory Showcase Mode, and Site Management
This commit is contained in:
312
docs/CONTENT_FACTORY_PLAN.md
Normal file
312
docs/CONTENT_FACTORY_PLAN.md
Normal file
@@ -0,0 +1,312 @@
|
||||
# 🏭 Spark Content Factory - Implementation Plan
|
||||
|
||||
## Overview
|
||||
|
||||
Transform the three intelligence files into a fully automated content generation system that creates **hyper-personalized articles** by combining:
|
||||
- **WHO** (Avatar + Niche)
|
||||
- **WHERE** (City + Wealth Cluster)
|
||||
- **WHAT** (Offer Block + Spintax)
|
||||
|
||||
---
|
||||
|
||||
## 📊 Architecture Diagram
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ DIRECTUS SCHEMA │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
│ │ SITES │────▶│ CAMPAIGNS │────▶│ ARTICLES │ │
|
||||
│ │ (Your Sites)│ │(What to build│ │(Generated) │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||
│ │ │ │ │
|
||||
│ │ ┌──────┴──────┐ │ │
|
||||
│ │ ▼ ▼ ▼ │
|
||||
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
|
||||
│ │ │ AVATARS │ │ NICHES │ │ LOCATIONS │ │
|
||||
│ │ │ (Who) │ │ (Industry)│ │ (Where) │ │
|
||||
│ │ └───────────┘ └───────────┘ └───────────┘ │
|
||||
│ │ │ │ │ │
|
||||
│ │ └──────┬──────┘ │ │
|
||||
│ │ ▼ │ │
|
||||
│ │ ┌─────────────┐ │ │
|
||||
│ └──────────▶│OFFER BLOCKS │◀─────────────┘ │
|
||||
│ │(Messaging) │ │
|
||||
│ └─────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────┐ │
|
||||
│ │ SEO ENGINE │ │
|
||||
│ │• Meta Title │ │
|
||||
│ │• Meta Desc │ │
|
||||
│ │• Schema.org │ │
|
||||
│ └─────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Directus Collections to Create
|
||||
|
||||
### 1. **avatars** (FROM: avatar_intelligence.json)
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| id | uuid | Primary key |
|
||||
| slug | string | `scaling_founder`, `elite_consultant`, etc. |
|
||||
| base_name | string | "The Tech Titan / Scaling Founder" |
|
||||
| wealth_cluster | string | "Tech-Native" |
|
||||
| psychographics | text | Long description of mindset |
|
||||
| tech_stack | json | ["Zapier", "Slack", "AWS"] |
|
||||
| pronoun_male | string | "he" |
|
||||
| pronoun_female | string | "she" |
|
||||
| identity_male | string | "bottlenecked technical founder" |
|
||||
| identity_female | string | "bottlenecked technical founder" |
|
||||
|
||||
### 2. **niches** (FROM: avatar_intelligence.json → business_niches)
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| id | uuid | Primary key |
|
||||
| name | string | "Vertical SaaS (B2B)" |
|
||||
| slug | string | "vertical-saas-b2b" |
|
||||
| avatar | m2o → avatars | Which avatar owns this niche |
|
||||
| keywords | json | SEO keywords for this niche |
|
||||
| pain_points | json | Common pains in this niche |
|
||||
|
||||
### 3. **wealth_clusters** (FROM: geo_intelligence.json)
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| id | uuid | Primary key |
|
||||
| slug | string | `tech_native`, `financial_power` |
|
||||
| name | string | "The Silicon Valleys" |
|
||||
| tech_adoption_score | integer | 1-10 |
|
||||
| primary_need | string | "Advanced Custom Automation & SaaS" |
|
||||
| matching_avatars | m2m → avatars | Which avatars match this cluster |
|
||||
|
||||
### 4. **elite_cities** (FROM: geo_intelligence.json → cities)
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| id | uuid | Primary key |
|
||||
| name | string | "Atherton" |
|
||||
| state | string | "CA" |
|
||||
| full_name | string | "Atherton, CA" |
|
||||
| wealth_cluster | m2o → wealth_clusters | Which cluster |
|
||||
| landmarks | json | Local landmarks for spintax |
|
||||
|
||||
### 5. **offer_blocks** (FROM: offer_engine.json)
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| id | uuid | Primary key |
|
||||
| slug | string | `block_01_zapier_fix` |
|
||||
| title | string | "The $1,000 Fix" |
|
||||
| hook | text | "Stop the bleeding in your {{NICHE}} business." |
|
||||
| spintax | text | Full spintax template |
|
||||
| avatar_pains | json | { avatar_slug: [pain1, pain2, pain3] } |
|
||||
| meta_title_template | string | "{{OFFER}} for {{NICHE}} in {{CITY}}" |
|
||||
| meta_desc_template | text | SEO description template |
|
||||
|
||||
### 6. **content_campaigns** (User creates these)
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| id | uuid | Primary key |
|
||||
| site | m2o → sites | Which site to publish to |
|
||||
| name | string | "Q1 2025 - Tech Founders" |
|
||||
| target_avatars | m2m → avatars | Which avatars to target |
|
||||
| target_niches | m2m → niches | Which niches |
|
||||
| target_cities | m2m → elite_cities | Which cities |
|
||||
| offer_blocks | m2m → offer_blocks | Which offers to use |
|
||||
| velocity_mode | select | RAMP_UP, STEADY, SPIKES |
|
||||
| target_count | integer | How many articles |
|
||||
|
||||
### 7. **generated_articles** (Factory output)
|
||||
| Field | Type | Description |
|
||||
|-------|------|-------------|
|
||||
| id | uuid | Primary key |
|
||||
| site | m2o → sites | Published to this site |
|
||||
| campaign | m2o → content_campaigns | Source campaign |
|
||||
| avatar | m2o → avatars | Target avatar |
|
||||
| niche | m2o → niches | Target niche |
|
||||
| city | m2o → elite_cities | Target city |
|
||||
| offer | m2o → offer_blocks | Offer used |
|
||||
| headline | string | Generated headline |
|
||||
| meta_title | string | SEO title (60 chars) |
|
||||
| meta_description | string | SEO desc (160 chars) |
|
||||
| full_html_body | text | The article content |
|
||||
| schema_json | json | Schema.org markup |
|
||||
| sitemap_status | select | ghost, queued, indexed |
|
||||
| date_published | datetime | Backdate or now |
|
||||
|
||||
---
|
||||
|
||||
## 🔄 How It All Connects
|
||||
|
||||
### Page Generation Flow
|
||||
|
||||
```
|
||||
USER SELECTS:
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ Site: la.christopheramaya.work │
|
||||
│ Avatar: scaling_founder │
|
||||
│ Niche: Vertical SaaS (B2B) │
|
||||
│ City: Palo Alto, CA │
|
||||
│ Offer: The $1,000 Fix │
|
||||
│ Count: 50 articles │
|
||||
└─────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
FACTORY GENERATES:
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ FOR EACH COMBINATION: │
|
||||
│ │
|
||||
│ 1. Pull avatar psychographics │
|
||||
│ 2. Pull niche-specific pains │
|
||||
│ 3. Pull city landmarks │
|
||||
│ 4. Pull offer spintax │
|
||||
│ 5. Replace all {{TOKENS}} │
|
||||
│ 6. Spin the spintax │
|
||||
│ 7. Generate SEO meta │
|
||||
│ 8. Create schema.org JSON │
|
||||
│ 9. Save to generated_articles │
|
||||
│ 10. Apply Gaussian scheduling │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Token Replacement Map
|
||||
|
||||
| Token | Source | Example |
|
||||
|-------|--------|---------|
|
||||
| `{{NICHE}}` | niches.name | "Vertical SaaS" |
|
||||
| `{{CITY}}` | elite_cities.name | "Palo Alto" |
|
||||
| `{{STATE}}` | elite_cities.state | "CA" |
|
||||
| `{{AVATAR}}` | avatars.identity_male | "bottlenecked technical founder" |
|
||||
| `{{PRONOUN}}` | avatars.pronoun_male | "he" |
|
||||
| `{{TECH_STACK}}` | avatars.tech_stack[random] | "Zapier" |
|
||||
| `{{LANDMARK}}` | elite_cities.landmarks[random] | "Stanford University" |
|
||||
| `{{AGENCY_NAME}}` | sites.name | "Spark Digital" |
|
||||
| `{{AGENCY_URL}}` | sites.domain | "sparkdigital.com" |
|
||||
| `{{CURRENT_YEAR}}` | context | "2024" |
|
||||
| `{{WEALTH_VIBE}}` | wealth_clusters.primary_need | "Advanced Custom Automation" |
|
||||
|
||||
---
|
||||
|
||||
## 📋 SEO Meta Generation
|
||||
|
||||
For each article, auto-generate:
|
||||
|
||||
### Meta Title (60 chars)
|
||||
```
|
||||
{{OFFER_TITLE}} for {{NICHE}} Businesses in {{CITY}}, {{STATE}}
|
||||
```
|
||||
Example: "The $1,000 Fix for Vertical SaaS Businesses in Palo Alto, CA"
|
||||
|
||||
### Meta Description (160 chars)
|
||||
```
|
||||
{{AVATAR_IDENTITY}} in {{CITY}}? {{OFFER_HOOK}} We {{SOLUTION}}. Get your free audit today.
|
||||
```
|
||||
Example: "Bottlenecked technical founder in Palo Alto? Stop the bleeding in your SaaS business. We rebuild broken automation. Get your free audit today."
|
||||
|
||||
### Schema.org JSON-LD
|
||||
```json
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
"headline": "{{META_TITLE}}",
|
||||
"description": "{{META_DESC}}",
|
||||
"author": {
|
||||
"@type": "Organization",
|
||||
"name": "{{AGENCY_NAME}}"
|
||||
},
|
||||
"datePublished": "{{DATE_PUBLISHED}}",
|
||||
"dateModified": "{{DATE_MODIFIED}}",
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{{AGENCY_NAME}}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 User Workflow in Directus
|
||||
|
||||
### Step 1: Add Your Site
|
||||
```
|
||||
Sites → + New
|
||||
- Name: "Spark Digital LA"
|
||||
- Domain: "la.christopheramaya.work"
|
||||
```
|
||||
|
||||
### Step 2: Create Campaign
|
||||
```
|
||||
Content Campaigns → + New
|
||||
- Site: (dropdown) Spark Digital LA
|
||||
- Target Avatars: ☑️ scaling_founder ☑️ saas_overloader
|
||||
- Target Niches: ☑️ Vertical SaaS ☑️ Fintech
|
||||
- Target Cities: ☑️ Palo Alto ☑️ Austin ☑️ Seattle
|
||||
- Offer Blocks: ☑️ Zapier Fix ☑️ Market Domination
|
||||
- Velocity: RAMP_UP
|
||||
- Target Count: 100
|
||||
```
|
||||
|
||||
### Step 3: Click "Generate"
|
||||
```
|
||||
→ Factory creates 100 unique articles
|
||||
→ Each article = unique combo
|
||||
→ SEO meta auto-generated
|
||||
→ Gaussian scheduling applied
|
||||
```
|
||||
|
||||
### Step 4: Review & Publish
|
||||
```
|
||||
Generated Articles → Filter by Campaign
|
||||
→ Preview any article
|
||||
→ Approve test batch
|
||||
→ Click "Publish to Site"
|
||||
→ Articles go live
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Combination Math
|
||||
|
||||
With full data:
|
||||
- 10 Avatars × 10 Niches each = 100 Avatar-Niche combos
|
||||
- 50 Elite Cities
|
||||
- 10 Offer Blocks
|
||||
|
||||
**Maximum unique articles: 100 × 50 × 10 = 50,000 pages**
|
||||
|
||||
For a focused campaign:
|
||||
- 2 Avatars × 3 Niches × 10 Cities × 2 Offers = **120 articles**
|
||||
|
||||
---
|
||||
|
||||
## ✅ Implementation Tasks
|
||||
|
||||
### Phase 1: Schema Setup
|
||||
- [ ] Create `avatars` collection
|
||||
- [ ] Create `niches` collection
|
||||
- [ ] Create `wealth_clusters` collection
|
||||
- [ ] Create `elite_cities` collection
|
||||
- [ ] Create `offer_blocks` collection
|
||||
- [ ] Update `content_campaigns` with relations
|
||||
- [ ] Update `generated_articles` with relations
|
||||
|
||||
### Phase 2: Data Import
|
||||
- [ ] Import 10 avatars
|
||||
- [ ] Import 100 niches (10 per avatar)
|
||||
- [ ] Import 5 wealth clusters
|
||||
- [ ] Import 50 elite cities
|
||||
- [ ] Import offer blocks
|
||||
|
||||
### Phase 3: Factory Engine
|
||||
- [ ] Update token processor
|
||||
- [ ] Build campaign generator
|
||||
- [ ] Add SEO meta templates
|
||||
- [ ] Add schema.org generator
|
||||
|
||||
### Phase 4: Testing
|
||||
- [ ] Generate test batch
|
||||
- [ ] Verify token replacement
|
||||
- [ ] Verify SEO meta quality
|
||||
191
docs/CONTENT_FACTORY_TASKS.md
Normal file
191
docs/CONTENT_FACTORY_TASKS.md
Normal file
@@ -0,0 +1,191 @@
|
||||
# 🏭 Content Factory - Task Checklist
|
||||
|
||||
## Status Legend
|
||||
- [ ] Not started
|
||||
- [x] Complete
|
||||
- [~] In progress
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Schema Setup in Directus
|
||||
|
||||
### New Collections
|
||||
- [ ] **avatars** - Target customer personas
|
||||
- [ ] slug (string, unique)
|
||||
- [ ] base_name (string)
|
||||
- [ ] wealth_cluster (string)
|
||||
- [ ] psychographics (text)
|
||||
- [ ] tech_stack (json)
|
||||
- [ ] pronoun_male, pronoun_female (string)
|
||||
- [ ] identity_male, identity_female (string)
|
||||
|
||||
- [ ] **niches** - Business industries per avatar
|
||||
- [ ] name (string)
|
||||
- [ ] slug (string)
|
||||
- [ ] avatar (m2o → avatars)
|
||||
- [ ] keywords (json)
|
||||
- [ ] pain_points (json)
|
||||
|
||||
- [ ] **wealth_clusters** - Geographic wealth segments
|
||||
- [ ] slug (string)
|
||||
- [ ] name (string)
|
||||
- [ ] tech_adoption_score (integer)
|
||||
- [ ] primary_need (string)
|
||||
|
||||
- [ ] **elite_cities** - High-value target cities
|
||||
- [ ] name (string)
|
||||
- [ ] state (string)
|
||||
- [ ] full_name (string)
|
||||
- [ ] wealth_cluster (m2o → wealth_clusters)
|
||||
- [ ] landmarks (json)
|
||||
|
||||
- [ ] **offer_blocks** - Messaging templates
|
||||
- [ ] slug (string)
|
||||
- [ ] title (string)
|
||||
- [ ] hook (text)
|
||||
- [ ] spintax (text)
|
||||
- [ ] avatar_pains (json)
|
||||
- [ ] meta_title_template (string)
|
||||
- [ ] meta_desc_template (text)
|
||||
|
||||
### Update Existing Collections
|
||||
- [ ] **content_campaigns** (was campaign_masters)
|
||||
- [ ] Add target_avatars (m2m → avatars)
|
||||
- [ ] Add target_niches (m2m → niches)
|
||||
- [ ] Add target_cities (m2m → elite_cities)
|
||||
- [ ] Add target_offers (m2m → offer_blocks)
|
||||
|
||||
- [ ] **generated_articles**
|
||||
- [ ] Add avatar (m2o → avatars)
|
||||
- [ ] Add niche (m2o → niches)
|
||||
- [ ] Add city (m2o → elite_cities)
|
||||
- [ ] Add offer (m2o → offer_blocks)
|
||||
- [ ] Add schema_json (json)
|
||||
|
||||
### Admin UI Organization
|
||||
- [ ] Create "Intelligence" folder
|
||||
- [ ] Move avatars, niches, wealth_clusters, elite_cities
|
||||
- [ ] Create "Messaging" folder
|
||||
- [ ] Move offer_blocks
|
||||
- [ ] Update Site Content folder
|
||||
- [ ] Move content_campaigns, generated_articles
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Data Import
|
||||
|
||||
### Avatar Intelligence (10 avatars)
|
||||
- [ ] scaling_founder - The Tech Titan
|
||||
- [ ] elite_consultant - The Wall Street Elite
|
||||
- [ ] ecom_high_roller - The New Money
|
||||
- [ ] high_end_agency_owner - The Media Mogul
|
||||
- [ ] multi_location_ceo - The Legacy Operator
|
||||
- [ ] real_estate_power_player - The RE Power Player
|
||||
- [ ] saas_overloader - The SaaS Overloader
|
||||
- [ ] medical_practice_ceo - The Medical CEO
|
||||
- [ ] coaching_empire_builder - The Coaching Empire
|
||||
- [ ] enterprise_innovator - The Enterprise Innovator
|
||||
|
||||
### Niches (100 total, 10 per avatar)
|
||||
- [ ] Import all niches linked to avatars
|
||||
|
||||
### Geo Intelligence
|
||||
- [ ] Import 5 wealth clusters
|
||||
- [ ] tech_native (Silicon Valleys)
|
||||
- [ ] financial_power (Wall Street Corridors)
|
||||
- [ ] media_influence (Hollywood & Brand Hubs)
|
||||
- [ ] new_money_growth (Growth & Tax Havens)
|
||||
- [ ] legacy_sovereign (Old Money & Quiet Wealth)
|
||||
- [ ] Import 50 elite cities linked to clusters
|
||||
|
||||
### Offer Blocks
|
||||
- [ ] block_01_zapier_fix - The $1,000 Fix
|
||||
- [ ] block_04_market_domination - Market Domination
|
||||
- [ ] block_09_sovereign_capi - Sovereign CAPI
|
||||
- [ ] (More blocks as provided)
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Factory Engine Updates
|
||||
|
||||
### Token Processor
|
||||
- [ ] Add {{NICHE}} token replacement
|
||||
- [ ] Add {{AVATAR}} token replacement
|
||||
- [ ] Add {{PRONOUN}} token replacement
|
||||
- [ ] Add {{TECH_STACK}} token replacement
|
||||
- [ ] Add {{WEALTH_VIBE}} token replacement
|
||||
- [ ] Add {{AGENCY_NAME}} from site
|
||||
- [ ] Add {{AGENCY_URL}} from site
|
||||
|
||||
### SEO Meta Generator
|
||||
- [ ] Create meta_title from template (60 chars max)
|
||||
- [ ] Create meta_description from template (160 chars max)
|
||||
- [ ] Generate schema.org JSON-LD
|
||||
- [ ] Add canonical URL generation
|
||||
|
||||
### Campaign Generator
|
||||
- [ ] Accept avatar multi-select
|
||||
- [ ] Accept niche multi-select
|
||||
- [ ] Accept city multi-select
|
||||
- [ ] Accept offer multi-select
|
||||
- [ ] Generate all valid combinations
|
||||
- [ ] Deduplicate combinations
|
||||
- [ ] Apply Gaussian scheduling
|
||||
- [ ] Create articles with full SEO
|
||||
|
||||
### API Endpoints
|
||||
- [ ] POST /api/factory/generate-campaign
|
||||
- [ ] GET /api/factory/preview-article
|
||||
- [ ] POST /api/factory/publish-batch
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: Testing & Validation
|
||||
|
||||
### Test Batch
|
||||
- [ ] Create test campaign with:
|
||||
- [ ] 1 avatar (scaling_founder)
|
||||
- [ ] 2 niches
|
||||
- [ ] 3 cities
|
||||
- [ ] 1 offer
|
||||
- [ ] = 6 articles
|
||||
- [ ] Verify all tokens replaced
|
||||
- [ ] Verify SEO meta quality
|
||||
- [ ] Verify schema.org valid
|
||||
- [ ] Verify no duplicate content
|
||||
- [ ] Check slug uniqueness
|
||||
|
||||
### Full Campaign Test
|
||||
- [ ] Generate 50+ articles
|
||||
- [ ] Verify Gaussian distribution
|
||||
- [ ] Verify sitemap drip works
|
||||
- [ ] Test publish to site
|
||||
|
||||
---
|
||||
|
||||
## Phase 5: Documentation
|
||||
|
||||
- [ ] Update README with factory usage
|
||||
- [ ] Document token reference
|
||||
- [ ] Document campaign workflow
|
||||
- [ ] Create video walkthrough (optional)
|
||||
|
||||
---
|
||||
|
||||
## Estimated Timeline
|
||||
|
||||
| Phase | Time |
|
||||
|-------|------|
|
||||
| Schema Setup | 1 hour |
|
||||
| Data Import | 30 mins |
|
||||
| Factory Engine | 2 hours |
|
||||
| Testing | 30 mins |
|
||||
| Documentation | 30 mins |
|
||||
| **Total** | **~4.5 hours** |
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
_Add any notes or blockers here during implementation_
|
||||
|
||||
Reference in New Issue
Block a user