Files

18 KiB
Raw Permalink Blame History

The Complete Picture


What You're Building

A self-hosted AI marketing engine that researches trends, writes scripts, generates images, produces videos, writes copy, and publishes to Instagram, TikTok, and Nextdoor — autonomously — with you as the only human in the loop approving what goes live.

No marketing team. No freelancers. No design tools. No video editors. One prompt per campaign. ~20 minutes of your time. 20-30 ad assets out the other end.


Part 1: Setup (One Time)

What You Need Before Starting

  • A machine that runs Docker (Mac, Linux, or Windows with WSL)
  • Claude Max subscription (already have it)
  • Tavily AI free account (1,000 research credits/month)
  • Self-hosted Postiz (included in your Docker stack)
  • Instagram Business/Creator account connected to Postiz
  • TikTok developer app connected to Postiz
  • Nextdoor Ads API partnership (apply at developer.nextdoor.com)

Step 1: Clone and Configure

git clone https://github.com/your-repo/marketing-command-center.git
cd marketing-command-center
cp .env.example .env

Edit .env:

# Research
TAVILY_API_KEY=tvly-your-key

# Publishing
POSTIZ_API_KEY=your-postiz-key
POSTGRES_PASSWORD=a-secure-password

# Nextdoor (direct API — Postiz doesn't support it)
NEXTDOOR_API_TOKEN=your-token
NEXTDOOR_ADVERTISER_ID=your-id

# Dashboard login
NEXTAUTH_SECRET=generate-random-string
ADMIN_EMAIL=you@yourdomain.com
ADMIN_PASSWORD=your-password

That's it. 5 keys. No Anthropic API key — your Max plan handles Claude.

Step 2: Authenticate Claude Code

claude login
# Browser opens → log in with your Max plan → done

Step 3: Launch Everything

docker compose up -d

This starts 4 containers:

Container What It Does
app Your Next.js dashboard + Claude Code pipeline
postiz Social scheduling + media hosting for IG/TikTok
postiz-db Postgres for Postiz (you never touch this)
redis Cache for Postiz (you never touch this)

Step 4: Initialize

docker compose exec app npx prisma db push     # Create database tables
docker compose exec app npx prisma db seed     # Create your admin account

Step 5: Connect Social Accounts in Postiz

Open http://localhost:5000 → Postiz dashboard:

  1. Connect Instagram (OAuth login — Postiz handles tokens forever)
  2. Connect TikTok (OAuth login — Postiz handles daily token refresh)

Step 6: Write Your Brand Files

Open http://localhost:3000 → your dashboard, or edit directly:

pipeline/knowledge/brand_identity.md      ← Who your brand is
pipeline/knowledge/platform_guidelines.md ← How content looks per platform
pipeline/knowledge/product_campaign.md    ← What you're selling
pipeline/assets/                          ← Drop your logos, product shots, screenshots

You're live.


Part 2: Your Daily Process

Morning (~5 minutes)

1. Open http://localhost:3000
2. Check the Trends page
   → Trend Scout ran overnight (automated cron)
   → You see: "POV hooks trending on TikTok this week"
   → You see: "Competitor X running UGC-style ads about [topic]"
   → You see: "Carousel posts outperforming single images on IG this week"
3. Decide: "I want to run a campaign around [feature/angle]"

Campaign Creation (~2 minutes)

1. Click "New Campaign"
2. Fill in the form:
   - Name: "Snarky Competitor Takedown"
   - Platforms: ☑ Instagram  ☑ TikTok  ☐ Nextdoor
   - Goal: App downloads
   - Key message: "We do what [competitor] can't"
   - Social proof: "50K downloads, 4.8★"
   - Variations: 5 hooks per platform
   - Use latest trend report: ☑
3. Click "Launch Pipeline"

Pipeline Runs (~15-20 minutes, you do nothing)

You watch the pipeline progress page update in real-time:

✅ Trend Scout        12s    Pulled 5 trending hooks from this week
✅ Research Agent      2m     Market report: competitor gaps, audience pain points
✅ Script Writer       3m     15 ad scripts (5 hooks × 3 platforms)
✅ Ad Creative         3m     8 static ad images across 3 sizes
✅ Video Producer      5m     6 video ads (3 IG polished + 3 TikTok raw)
✅ Copywriter          2m     Captions + hashtags for every asset
✅ Distribution        1m     Publish manifest ready for review

What each agent actually did:

Agent Input What It Did Output
Trend Scout Automated web scan Searched TikTok/IG trends, competitor ads, viral hooks trend_report.json
Research Agent Your campaign brief + trend report Ran 5 Tavily searches (market, competitors, pain points, hooks, viral) research_results.json + interactive_report.html
Script Writer Research output + brand voice Wrote 15 ad scripts with timed Hook→Body→CTA structure scripts/ folder with 15 scripts
Ad Creative Scripts + brand assets Generated images via NanoBanana → built HTML layouts → Playwright screenshotted them 8 PNGs at platform-exact dimensions
Video Producer Scripts + brand assets Built Remotion compositions → rendered frame-by-frame 6 MP4s (polished IG + raw TikTok styles)
Copywriter Research + scripts + brand voice Wrote platform-tuned captions, hashtags, metadata instagram_captions.json, tiktok_captions.json
Distribution All of the above Assembled the publish manifest Publish_campaign_date.md

Review (~10-15 minutes)

1. Click the Assets tab
2. Browse the gallery:
   - 8 static ad images (IG feed 1080x1080, IG Stories 1080x1920, Nextdoor 1200x1200)
   - 6 video ads (IG Reels 1080x1920 polished, TikTok 1080x1920 raw/authentic)
   - Each card shows: preview, caption, hashtags, hook text, platform badge
3. Click to expand any asset → see full preview + all metadata
4. Approve the ones you like (green check)
5. Reject the ones you don't (red X)

Give Feedback (Optional, ~5 minutes)

Switch to the Claude tab if anything needs tweaking:

You: "Hook B is too corporate, make it snarkier"
Claude: *rewrites script, re-renders video* → new asset appears in gallery

You: "The colors on the static ads feel off, use more contrast"
Claude: *updates HTML/CSS, re-screenshots* → updated PNGs in gallery

You: "Create one more ad that directly calls out [competitor] by name"
Claude: *writes script, generates image + video* → 3 new assets appear

You: "Here are our actual competitors for future research: [list]"
Claude: *updates knowledge/product_campaign.md* → all future campaigns reflect this

Publish (~2 minutes)

1. Select approved assets
2. Click "Push to Postiz"
3. Modal shows:
   - Which platform each goes to
   - Caption preview
   - Suggested schedule time (from research data)
4. Adjust schedule if you want
5. Click "Confirm"
6. Postiz uploads media → schedules posts → handles publishing

What Happens Behind the Scenes

Your approved static ad (PNG) for Instagram:
  → Your app uploads PNG to Postiz (/upload endpoint)
  → Postiz stores it, returns public URL
  → Postiz creates scheduled post with caption + image
  → At scheduled time: Postiz calls Instagram Graph API
  → Instagram creates container → processes → publishes
  → Post is live on your Instagram

Your approved video for TikTok:
  → Your app uploads MP4 to Postiz
  → Postiz stores it, returns public URL
  → Postiz creates scheduled post with caption + video
  → At scheduled time: Postiz calls TikTok Content Posting API
  → TikTok processes and publishes
  → Video is live on TikTok

Your approved ad for Nextdoor:
  → Your app calls Nextdoor Ads API directly (GraphQL)
  → Creates campaign → ad group → uploads creative → creates ad
  → Nextdoor reviews → approves → ad goes live

Monitor

Queue page shows:
  ┌──────────────────────────────────────────────────┐
  │ Scheduled                                         │
  │  📷 IG Feed - "Still doing X?"      Tue 7:30 AM  │
  │  🎬 IG Reel - Hook A (polished)     Tue 12:00 PM │
  │  🎬 TikTok - Hook A (raw)           Tue 5:00 PM  │
  │  📷 IG Feed - "Your app sucks"      Wed 7:30 AM  │
  │                                                   │
  │ Published ✅                                       │
  │  📷 IG Feed - "Upgrade Your..."     Mon 7:30 AM  │
  │  🎬 TikTok - "POV: you found..."   Mon 5:00 PM  │
  └──────────────────────────────────────────────────┘

Part 3: What You're Getting

Per Campaign (from one prompt)

Asset Type Quantity Details
Static image ads 6-10 IG Feed (1080x1080), IG Stories (1080x1920), Nextdoor (1200x1200, 1200x628)
Video ads (motion graphic) 4-6 IG Reels (polished), TikTok (raw/authentic) — 15-30s each
Ad scripts 15+ 5 hook variations × 3 platform styles
Captions 1 per asset per platform Platform-tuned tone, hashtags, CTAs
Research report 1 Interactive HTML dashboard with market data, competitor analysis, keywords
Trend report 1 What's working right now on each platform
Publish manifest 1 Complete publishing plan with schedule recommendations

Per Week (running 2-3 campaigns)

Output Quantity
Static ads 15-30
Video ads 10-18
Unique scripts 30-45
Published posts 15-25 across platforms
Your time invested ~1 hour total

Per Month

Output Quantity
Static ads 60-120
Video ads 40-72
Published posts 60-100
Research reports 8-12
Your time invested ~4 hours total

Part 4: What This Is Supplying

The Full Marketing Stack, Replaced

Traditional Role What They Cost Your System Replaces It With
Market Researcher $60-100/hr Trend Scout + Research Agent (Tavily, automated)
Creative Director $80-150/hr Script Writer agent (knowledge files drive brand decisions)
Graphic Designer $50-100/hr Ad Creative Designer (NanoBanana + Playwright)
Video Editor $50-120/hr Video Ad Producer (Remotion, auto-rendered)
Copywriter $50-100/hr Copywriter Agent (platform-tuned, brand-voiced)
Social Media Manager $40-80/hr Distribution Agent + Postiz (scheduling, publishing)
Total team cost $5,000-15,000/mo ~$50/mo (Max plan + Tavily free + Postiz self-hosted)

What You're Actually Paying

Service Cost What It Does
Claude Max $100/mo (or $200 for Max 5x) Powers all 7 agents — research, writing, image gen, video gen, copy, distribution
Tavily AI Free (1,000 credits/mo) Web research for trends + market data
Postiz Free (self-hosted) Media hosting + scheduling + publishing to IG/TikTok
NanoBanana ~$5-15/mo (image generation) AI images for static ads
Docker hosting Free (your machine) or ~$5-20/mo (VPS) Runs everything
Total ~$110-235/mo

Part 5: Your Competitive Advantage

1. Speed

A human marketing team takes 1-2 weeks to go from brief to published campaign. You do it in 20 minutes. That's not an incremental improvement — it's a category change. You can react to trends the same day they emerge.

2. Volume

Human teams produce 5-10 ad variations per campaign. You produce 20-30 per campaign, 2-3 campaigns per week. More variations = more data on what works = faster optimization. The platforms reward volume — their algorithms need creative variety to test and optimize delivery.

3. Consistency

Every asset is generated through the same knowledge files. Brand voice never drifts. Platform specs are never wrong. CTAs always follow the rules. A human team has bad days, misremembers guidelines, and cuts corners under deadline pressure. Your system doesn't.

4. Cost Structure

Your competitors are paying $5,000-15,000/month for a marketing team or agency. You're paying ~$150/month for the same output volume. That's a 97% cost reduction. That gap doesn't close as you scale — it widens. More campaigns cost you almost nothing extra.

5. Institutional Memory

Every trend report, every research finding, every winning hook gets captured. Your knowledge files accumulate intelligence over time. After 3 months, your system knows your market, competitors, and audience better than any new hire could learn in a year.

6. Test Everything

You can't afford to have a human team create 20 hook variations to find the one that converts. You can. The research says top-performing TikTok ads hit 40-45% hook rates, but finding those hooks requires testing 10-20 variations. Your system generates them in minutes.

7. Platform-Native at Scale

Each platform gets content optimized for how it actually works:

  • Instagram: Polished, aspirational, branded motion graphics
  • TikTok: Raw, authentic, trend-driven, sounds-on
  • Nextdoor: Neighborly, local, community-first

A human team tends to create one asset and resize it. Your system creates genuinely different content per platform because each agent applies platform-specific rules from the knowledge files.

8. You Own Everything

No SaaS vendor lock-in. No monthly platform fees that increase. No API changes that break your workflow overnight. The dashboard is yours. The pipeline is yours. Postiz is self-hosted. The database is a SQLite file you can back up with cp. If Postiz dies, you swap in Buffer's API. If Tavily dies, you swap in Exa. The architecture is modular — every piece is replaceable.


Part 6: The Architecture (Final State)

┌─────────────────────────────────────────────┐
│              YOUR BROWSER                    │
│                                              │
│  Dashboard → Campaigns → Assets → Claude     │
│              Gallery     Chat    Queue        │
└──────────────────┬──────────────────────────┘
                   │
                   ▼
┌──────────────────────────────────────────────┐
│     YOUR DOCKER HOST (single machine)        │
│                                              │
│  ┌────────────────────────────────────────┐  │
│  │  Next.js App (port 3000)               │  │
│  │  ├─ SQLite database (campaigns/assets) │  │
│  │  ├─ NextAuth (login)                   │  │
│  │  ├─ SSE (realtime pipeline progress)   │  │
│  │  ├─ File server (preview outputs)      │  │
│  │  └─ Claude subprocess spawner          │  │
│  └─────────────────┬──────────────────────┘  │
│                    │                          │
│     ┌──────────────┼──────────────┐          │
│     │              │              │          │
│     ▼              ▼              ▼          │
│  ┌──────┐   ┌───────────┐   ┌────────┐      │
│  │Claude│   │  Postiz   │   │Pipeline│      │
│  │Code  │   │  (5000)   │   │Outputs │      │
│  │(Max) │   │  ├─Postgres│   │(volume)│      │
│  │      │   │  └─Redis  │   │        │      │
│  └──┬───┘   └─────┬─────┘   └────────┘      │
│     │             │                          │
└─────┼─────────────┼──────────────────────────┘
      │             │
      │             ├──→ Instagram API (posts go live)
      │             └──→ TikTok API (videos go live)
      │
      ├──→ Tavily API (research)
      ├──→ NanoBanana/Gemini API (images)
      └──→ Nextdoor API (ads)

Data Flow: Prompt to Post

You type a campaign prompt in the browser
  │
  ▼
Next.js API spawns Claude Code subprocess (uses Max plan)
  │
  ▼
Claude reads CLAUDE.md → loads skills → reads knowledge files
  │
  ├─→ Trend Scout: scans web via Tavily → trend_report.json
  ├─→ Research Agent: 5 Tavily queries → research_results.json + report.html
  ├─→ Script Writer: reads research → writes 15 scripts
  ├─→ Ad Creative: NanoBanana generates images → Claude builds HTML → Playwright screenshots → PNGs
  ├─→ Video Producer: Claude writes Remotion compositions → renders → MP4s
  ├─→ Copywriter: reads everything → writes platform-tuned captions
  └─→ Distribution: assembles publish manifest
  │
  ▼
All outputs saved to pipeline/outputs/{campaign}/
Next.js detects new files → creates asset records in SQLite
SSE pushes updates to your browser in real-time
  │
  ▼
You browse the asset gallery → approve what you like
  │
  ▼
Click "Push to Postiz" → Next.js uploads media to Postiz → schedules post
  │
  ▼
Postiz publishes at scheduled time → content is live on Instagram/TikTok
  │
  ▼
Person scrolling Instagram sees your ad → downloads your app

Part 7: What's in Each File

Here's every document we've built and what to use it for:

File Use It For
FULL_SYSTEM_ANALYSIS.md Reference if you want to see how the original AndyNoCode system worked
BEST_PRACTICES_GUIDE.md Official Anthropic skill-writing guidelines, 60+ linked resources
PLATFORM_SPECS.md Instagram, TikTok, Nextdoor API details, dimensions, creative specs
AUTONOMOUS_MARKETING_PLAN.md 7-agent pipeline design, ad creative frameworks, what makes people download
FRONTEND_ARCHITECTURE.md Next.js dashboard architecture, database schema, Docker Compose, Claude/Postiz integration code
THE_COMPLETE_PICTURE.md This document — the executive overview of everything
transcript_clean.txt Original video transcript for reference