Building a Cross-Platform Content System With AI (One Workflow for Everything)
Back to Blog
Systems2026-03-08· 12 min read

Building a Cross-Platform Content System With AI (One Workflow for Everything)

I had 15 different tools and workflows. Now one AI-powered system handles everything—blog, video, social, email, podcast—all from a single content piece.

#content system#automation#workflow#AI integration#productivity

My Content Workflow was a mess.

  • Different tools for each platform.
  • Manual reformatting everywhere.
  • No central source of truth.
  • Constant context switching.
  • Spent more time managing tools than creating.

Then I built a unified cross-platform system.

  • One content piece → all platforms automatically.
  • Single workflow for everything.
  • AI handles adaptation.
  • Everything connected.
  • 10x more efficient.

The Master Content System Architecture

import openai
from datetime import datetime
import json
from pathlib import Path

class MasterContentSystem:
    """Unified content system for all platforms."""
    
    def __init__(self, config_file: str = "content_config.json"):
        self.client = openai.OpenAI()
        self.config = self.load_config(config_file)
        self.content_hub = []
    
    def load_config(self, config_file: str):
        default_config = {
            'platforms': {
                'blog': {'enabled': True, 'primary': True},
                'youtube': {'enabled': True, 'primary': False},
                'podcast': {'enabled': True, 'primary': False},
                'email': {'enabled': True, 'primary': False},
                'twitter': {'enabled': True, 'primary': False},
                'linkedin': {'enabled': True, 'primary': False},
                'instagram': {'enabled': True, 'primary': False},
                'tiktok': {'enabled': False, 'primary': False}
            },
            'brand_voice': "Helpful, conversational, specific, first-person",
            'target_audience': "Content creators learning AI automation",
            'content_types': ['tutorial', 'case-study', 'tool-review', 'strategy'],
            'automation_level': 'high'  # low, medium, high
        }
        
        try:
            with open(config_file, 'r') as f:
                config = json.load(f)
                return {**default_config, **config}
        except FileNotFoundError:
            return default_config
    
    def create_master_content(self, topic: str, content_type: str = 'tutorial'):
        """Create master content piece (the source of truth)."""
        
        print("📝 Creating master content: ", topic, "\n")
        
        # Step 1: Research
        research = self.research_topic(topic)
        
        # Step 2: Create comprehensive outline
        outline = self.create_master_outline(topic, content_type, research)
        
        # Step 3: Write master content (blog post format)
        master_content = self.write_master_content(topic, outline, research)
        
        # Step 4: Extract key elements
        elements = self.extract_content_elements(master_content)
        
        # Step 5: Store in content hub
        content_id = self.store_in_hub({
            'topic': topic,
            'type': content_type,
            'master_content': master_content,
            'elements': elements,
            'created_at': datetime.now().isoformat()
        })
        
        print("✅ Master content created: ID ", content_id, "\n")
        
        return content_id
    
    def research_topic(self, topic: str):
        """Quick research for master content."""
        
        from duckduckgo_search import DDGS
        
        ddgs = DDGS()
        results = ddgs.text(f"{topic} guide tutorial", max_results=10)
        
        research_summary = "\n".join([
            f"- {r['title']}: {r['body']}"
            for r in results[0:5]
        ])
        
        # AI synthesizes
        prompt = f"""
        Quick research summary for: {topic}
        
        {research_summary}
        
        Extract:
        - 5-7 key points
        - Current statistics
        - Best practices
        - Tools/resources
        
        Return as JSON.
        """
        
        response = self.client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            response_format={"type": "json_object"}
        )
        
        return json.loads(response.choices[0].message.content)
    
    def create_master_outline(self, topic: str, content_type: str, research: dict):
        """Create master outline."""
        
        prompt = f"""
        Create content outline for: {topic}
        
        Type: {content_type}
        Research: {json.dumps(research, indent=2)}
        
        Create comprehensive outline suitable for:
        - Blog post (2000 words)
        - Video script (10 min)
        - Podcast episode (20 min)
        - Email newsletter
        - Social content pieces
        
        Include:
        1. Hook/intro
        2. Main teaching points (5-7)
        3. Examples
        4. Action steps
        5. Conclusion
        
        Return as JSON.
        """
        
        response = self.client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            response_format={"type": "json_object"}
        )
        
        return json.loads(response.choices[0].message.content)
    
    def write_master_content(self, topic: str, outline: dict, research: dict):
        """Write master content (blog post format)."""
        
        prompt = f"""
        Write comprehensive content for: {topic}
        
        Outline: {json.dumps(outline, indent=2)[0:2000]}
        Research: {json.dumps(research, indent=2)[0:1000]}
        
        Brand voice: {self.config['brand_voice']}
        Audience: {self.config['target_audience']}
        
        Write as blog post (2000-2500 words):
        - Clear structure with headers
        - Specific and actionable
        - Examples and data
        - Conversational tone
        - First person
        
        This will be adapted for other platforms, so make it comprehensive.
        
        Format in Markdown.
        """
        
        response = self.client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.7
        )
        
        return response.choices[0].message.content
    
    def extract_content_elements(self, master_content: str):
        """Extract reusable elements from master content."""
        
        prompt = f"""
        Extract key elements from this content:
        
        {master_content[0:3000]}
        
        Extract:
        - headline
        - hook
        - key_points
        - examples
        - statistics
        - quotes
        - action_steps
        - tools_mentioned
        
        Return as JSON.
        """
        
        response = self.client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            response_format={"type": "json_object"}
        )
        
        return json.loads(response.choices[0].message.content)
    
    def store_in_hub(self, content_data: dict):
        """Store in content hub."""
        
        content_id = len(self.content_hub) + 1
        content_data['id'] = content_id
        self.content_hub.append(content_data)
        
        # Also save to file
        hub_file = Path("content_hub.json")
        
        if hub_file.exists():
            with open(hub_file, 'r') as f:
                hub = json.load(f)
        else:
            hub = []
        
        hub.append(content_data)
        
        with open(hub_file, 'w') as f:
            json.dump(hub, f, indent=2)
        
        return content_id
    
    def distribute_everywhere(self, content_id: int):
        """Distribute master content to all enabled platforms."""
        
        print("🚀 Distributing content ID ", content_id, " to all platforms\n")
        
        # Get content from hub
        content = self.get_content_from_hub(content_id)
        
        if not content:
            print("❌ Content not found")
            return
        
        # Adapt for each enabled platform
        adaptations = {}
        
        for platform, config in self.config['platforms'].items():
            if config['enabled']:
                print(f"  📤 Adapting for {platform}...")
                
                adapted = self.adapt_for_platform(
                    content=content,
                    platform=platform
                )
                
                adaptations[platform] = adapted
        
        # Create distribution plan
        plan = self.create_distribution_plan(adaptations)
        
        # Execute distribution
        results = self.execute_distribution(plan)
        
        print("\n✅ Distributed to ", len(results), " platforms")
        
        return results
    
    def get_content_from_hub(self, content_id: int):
        """Retrieve content from hub."""
        
        for content in self.content_hub:
            if content['id'] == content_id:
                return content
        
        # Try loading from file if not in memory
        try:
            with open("content_hub.json", 'r') as f:
                hub = json.load(f)
                for content in hub:
                    if content['id'] == content_id:
                        return content
        except:
            pass
        
        return None
    
    def adapt_for_platform(self, content: dict, platform: str):
        """Adapt master content for specific platform."""
        
        platform_specs = {
            'blog': {
                'format': 'Full blog post with SEO optimization',
                'length': '2000-2500 words',
                'special': 'Add meta description, tags, featured image'
            },
            'youtube': {
                'format': 'Video script with timestamps and B-roll notes',
                'length': '10-12 minute script',
                'special': 'Hook, intro, main content, CTA, outro'
            },
            'podcast': {
                'format': 'Podcast script/outline with conversation flow',
                'length': '20-25 minute outline',
                'special': 'Intro, segments, questions, outro'
            },
            'email': {
                'format': 'Newsletter email with clear sections',
                'length': '600-800 words',
                'special': 'Subject line, preview text, CTA'
            },
            'twitter': {
                'format': 'Twitter thread',
                'length': '8-12 tweets',
                'special': 'Hook tweet, value tweets, end CTA'
            },
            'linkedin': {
                'format': 'Professional post',
                'length': '1200-1500 characters',
                'special': 'Hook, insights, professional tone'
            },
            'instagram': {
                'format': 'Carousel post content (10 slides)',
                'length': '10 slides with titles and bullets',
                'special': 'Visual-first, easy to read'
            },
            'tiktok': {
                'format': 'Short video script',
                'length': '60-90 second script',
                'special': 'Hook first 1 sec, fast-paced'
            }
        }
        
        spec = platform_specs.get(platform, {})
        
        prompt = f"""
        Adapt this content for {platform}:
        
        MASTER CONTENT:
        {content['master_content'][0:2000]}
        
        KEY ELEMENTS:
        {json.dumps(content['elements'], indent=2)[0:1000]}
        
        PLATFORM SPECS:
        Format: {spec.get('format', 'Standard')}
        Length: {spec.get('length', 'Variable')}
        Special requirements: {spec.get('special', 'None')}
        
        Brand voice: {self.config['brand_voice']}
        
        Create optimized content for {platform}.
        Maintain core message but adapt style and format.
        
        Return as JSON with:
        - content
        - title
        - metadata
        """
        
        response = self.client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            response_format={"type": "json_object"}
        )
        
        return json.loads(response.choices[0].message.content)
    
    def create_distribution_plan(self, adaptations: dict):
        """Create timed distribution plan."""
        
        from datetime import timedelta
        
        plan = []
        now = datetime.now()
        
        # Stagger releases
        timing_offsets = {
            'blog': timedelta(hours=0),      # Publish now
            'youtube': timedelta(hours=2),   # 2 hours later
            'email': timedelta(hours=24),    # Next day
            'linkedin': timedelta(hours=26), # Next day morning
            'twitter': timedelta(hours=3),   # Few hours after blog
            'instagram': timedelta(hours=28),# Next day
            'podcast': timedelta(days=3),    # 3 days later
            'tiktok': timedelta(hours=12)    # Same day evening
        }
        
        for platform, content in adaptations.items():
            schedule_time = now + timing_offsets.get(platform, timedelta(0))
            
            plan.append({
                'platform': platform,
                'content': content,
                'scheduled_time': schedule_time.isoformat(),
                'status': 'scheduled'
            })
        
        # Sort by time
        plan.sort(key=lambda x: x['scheduled_time'])
        
        return plan
    
    def execute_distribution(self, plan: list):
        """Execute distribution plan (publish or queue)."""
        
        results = []
        
        for item in plan:
            print("\n", item['platform'].upper(), ":")
            print("  Scheduled: ", item['scheduled_time'])
            print("  Title: ", item['content'].get('title', 'N/A'))
            print("  Status: ", item['status'])
            
            # In real implementation:
            # - Call platform APIs
            # - Upload to CMS
            # - Schedule via Buffer/Hootsuite
            # - Track results
            
            results.append({
                'platform': item['platform'],
                'status': 'queued',
                'scheduled_time': item['scheduled_time']
            })
        
        return results
    
    def run_full_workflow(self, topic: str, content_type: str = 'tutorial'):
        """Complete workflow: create and distribute."""
        
        print("—" * 60)
        print("MASTER CONTENT SYSTEM - FULL WORKFLOW")
        print("—" * 60)
        print()
        
        # Step 1: Create master content
        content_id = self.create_master_content(topic, content_type)
        
        # Step 2: Distribute everywhere
        results = self.distribute_everywhere(content_id)
        
        print("\n" + "—" * 60)
        print("WORKFLOW COMPLETE")
        print("—" * 60)
        print(f"\nContent created: {topic}")
        print(f"Distributed to: ", len(results), " platforms")
        print()
        
        return content_id, results

# Usage Example
system = MasterContentSystem()

# Run complete workflow
content_id, results = system.run_full_workflow(
    topic="How to Use AI to Automate Your Content Workflow",
    content_type="tutorial"
)

print("Content ID:", content_id)
print("\nDistribution Results:")
for result in results:
    print(f"  • {result['platform']}: {result['status']}")

System Configuration

Customize for your setup:

{
  "platforms": {
    "blog": {"enabled": true, "primary": true, "cms": "wordpress"},
    "youtube": {"enabled": true, "channel_id": "your-channel"},
    "podcast": {"enabled": true, "host": "transistor"},
    "email": {"enabled": true, "provider": "convertkit"},
    "twitter": {"enabled": true, "handle": "@yourhandle"},
    "linkedin": {"enabled": true, "profile_id": "your-id"},
    "instagram": {"enabled": true, "username": "yourusername"},
    "tiktok": {"enabled": false}
  },
  "brand_voice": "Helpful, conversational, specific, first-person",
  "target_audience": "Content creators learning AI automation",
  "automation_level": "high",
  "scheduling": {
    "auto_publish": false,
    "review_required": true,
    "stagger_timing": true
  }
}

Content Hub Dashboard

Track everything in one place:

class ContentDashboard:
    """Dashboard for content system."""
    
    def __init__(self):
        self.system = MasterContentSystem()
    
    def show_content_hub(self):
        """Display all content in hub."""
        
        print("\n📚 CONTENT HUB\n")
        print("—" * 60)
        
        for content in self.system.content_hub:
            print(f"\nID: {content['id']}")
            print(f"Topic: {content['topic']}")
            print(f"Type: {content['type']}")
            print(f"Created: {content['created_at']}")
            print(f"Status: {content.get('status', 'Draft')}")
            print("—" * 60)
    
    def show_distribution_status(self, content_id: int):
        """Show where content has been distributed."""
        
        # Load distribution records
        # Show platform-by-platform status
        pass
    
    def show_performance(self, content_id: int):
        """Show performance across platforms."""
        
        # Aggregate stats from all platforms
        # Views, engagement, conversions
        pass

Automation Levels

Choose your level of automation:

Level 1: Semi-Automated (Recommended for starting)

  • AI creates all adaptations
  • You review each before publishing
  • Manual approval required
  • Learn what works

Level 2: High Automation

  • AI creates and queues all content
  • Automated publishing to some platforms
  • Review only high-priority items
  • Trust but verify

Level 3: Full Automation

  • Complete end-to-end automation
  • AI creates, optimizes, and publishes
  • Monitoring/alerts only
  • For established workflows

Tools & Costs

Complete system stack:

  • [AFFILIATE: ChatGPT Plus]: $20/month - Content generation
  • Notion/Airtable: Free-$10/month - Content hub
  • Buffer/Hootsuite: $25-50/month - Cross-platform scheduling
  • Zapier/Make: $20-30/month - Workflow automation
  • WordPress: Free - Blog CMS

Total: $65-130/month

ROI:

  • Saves 15-20 hours/week
  • Value: $750-1,000/week
  • Pays for itself 10x

My Results

Before unified system:

  • Time per content piece: 8-12 hours total (all platforms)
  • Platforms reached: 3-4 max
  • Content per week: 1-2 pieces
  • Tools: 15+ different tools
  • Consistency: Low

After unified system:

  • Time per content piece: 2-3 hours total (all platforms)
  • Platforms reached: 8-10 every time
  • Content per week: 5-7 pieces
  • Tools: 5 core tools
  • Consistency: 100%

Impact:

  • Time saved: 75% (12 hours → 3 hours per piece)
  • Platform coverage: 3x more platforms
  • Content output: 3-5x increase
  • Reach: 8x total reach
  • Sanity: Preserved

Getting Started

Week 1: Foundation

  • Day 1-2: Create master content template
  • Day 3-4: Set up adaptation prompts
  • Day 5: Test with one piece of content

Week 2: Automation

  • Day 1-2: Connect platforms
  • Day 3-4: Build distribution workflow
  • Day 5: Test end-to-end

Week 3-4: Optimization

  • Refine based on results
  • Add more platforms
  • Increase automation level

Common Mistakes

1. Over-complicating

  • Start simple
  • Add complexity gradually
  • Don't automate everything day one

2. Same content everywhere

  • Must adapt per platform
  • Different audiences/contexts
  • Respect platform norms

3. No review process

  • Always review initially
  • Gradually increase trust
  • Maintain quality control

4. Ignoring analytics

  • Track what works where
  • Double down on winners
  • Cut what doesn't work

5. Tool overload

  • Don't need every tool
  • 5-7 core tools sufficient
  • Integration > features

The Bottom Line

Disconnected workflows kill productivity.

Different tools, processes, and workflows for each platform = chaos.

Unified system solves this:

  • One master content piece
  • AI adapts for all platforms
  • Automated distribution
  • Single source of truth
  • Connected workflows

Results:

  • 3 hours vs. 12 hours per piece
  • 8-10 platforms vs. 3-4
  • 3-5x content output
  • 8x total reach
  • One workflow for everything

Build system once.

Use for every piece of content.

Scale without chaos.

Check out my real AI tools at axon.nepa-ai.com