Content Operating System
Full stack: ideation → ranking → production → distribution. Every carousel and reel produced by this system. Every lead generated by the funnel below it.
System Overview
batch_runner.py, produces the reels. System handles everything else.Content Pillars
Every carousel and reel must map to one of three pillars. P2 gets the highest ranking priority — most direct revenue signal.
Proof Points (rotate across pillars)
| Client | Result | Best for |
|---|---|---|
| Riley | 47x ROI | P2 lead capture stories |
| Ashley | $717K closed revenue | P1 authority building |
| Valerie | $676K + 300+ appts / 90 days | P2 volume stories |
| Thrasher Crawl Space | $360K quarter | P3 data / scale stories |
| TWF | $45K in 30 days from Messenger alone | P2 speed stories |
Topics Bank
Single source of truth for all carousel and reel topics. 48 rows, versioned and scored.
File: Projects/StPierre/carousel-production/topics_bank.csv
| Column | Purpose | Values |
|---|---|---|
id | Unique topic ID | 1–48 |
pillar_code | Maps to P1/P2/P3 | P1, P2, P3 |
topic | Full topic string fed to generator | — |
hook_angle | Default hook framing | Platform reveal, Data reveal, etc. |
featured_result | Proof point to anchor the carousel | Riley 47x ROI, Ashley $717K, etc. |
keyword | ManyChat comment trigger (ALL CAPS) | AICAROUSEL, MESSENGER, etc. |
niche | Target niche for this topic | crawl space, waterproofing, both |
status | Lifecycle stage | pending, done, winner |
score | Ranker output (max 14 before multiplier) | Float |
ranking_notes | Score breakdown per dimension | proof=2|pillar=3|brain=1|age=1 |
Weekly Ranker
Scores all pending topics across 6 dimensions. Writes scores back to CSV. Returns top 10 + reserve 5 with diversity cap.
File: ranker.py · Run: python ranker.py or auto via weekly_brief.py
Scoring Dimensions (max 14 before multiplier)
| Dimension | Points | Logic |
|---|---|---|
| Proof strength | +2 | featured_result contains real $, %, or x figure |
| Pillar priority | P2=+3, P1/P3=+2 | P2 highest — most direct revenue signal |
| Brain match | >0.75 sim=+3 · >0.5=+1 | Semantic search vs video_notes — content you've studied |
| Winner multiplier | ×2 | Applied to entire score if status = 'winner' |
| Age bonus | +1 | Pending > 14 days without being ranked |
| Recency penalty | −2 | Same pillar produced in last 7 days |
Diversity Cap
Max 2 topics per pillar in the top 10. Prevents the brief from being dominated by a single pillar.
python ranker.py --dry-run to preview scores without writing to CSV. Brain semantic search is skipped in dry-run (fast mode).Weekly Creative Brief
Auto-generated every Monday at 9pm ET. Posts to Slack #akash-notes. Pick 3–5 topics, run batch_runner.
File: weekly_brief.py · Schedule: Monday 9pm ET
Per-Topic Enrichment (GPT-4o-mini)
| Field | What it generates | Token budget |
|---|---|---|
| Hook angle | Sharper, more specific hook than the CSV default (≤8 words) | 50 |
| Contrarian take | Challenge the obvious angle — founder who's seen 1000s of contractor accounts | 120 |
| Pattern connection | Best-matching insight from brain.video_notes via semantic search | — |
| Slide 1 draft | 60-char max opening line, scroll-stopping, no emojis | 30 |
outputs/creative_brief_YYYY-MM-DD.md saved locally. Zero research required Tuesday morning.Carousel System
8-slide Instagram carousel. 1080×1350px portrait. Green screen zone lower 35% for talking head. Text/visuals upper 65%.
Generator: generator.py --topic-id N · Batch: batch_runner.py --topic-ids 1 5 12
8-Slide Structure (strict — do not deviate)
Copy Rules
- Headline: max 7 words, punchy
- Body: max 2 sentences, conversational
- Every slide has one visual prompt (Higgsfield / AI image gen)
- Every slide has one voiceover cue (spoken tone)
- CTA keyword = ALL CAPS (feeds ManyChat trigger)
- No corporate speak, no hedging, no "just wanted to check in"
- No AI-zesty enthusiasm or filler warmth
Generator Output
JSON file in outputs/<id>_<slug>.json — includes slides array, caption, hashtags, production notes. Status auto-updated to done in topics_bank.csv after generation.
Reel Format — @angus.sewell Model
Canonical video style for all St. Pierre AI reels. No exceptions. If it reads like LinkedIn, rewrite it.
Format Spec
Never Do
- Start with "Hey guys"
- End with "smash that like button" or any engagement beg
- Use music or b-roll (pure talking head only)
- Over-explain — trust the audience to keep up
- Sound scripted — read aloud test mandatory
Infrastructure
--topic-ids 1 5 12 after picking from the brief. Processes in sequence.AI Models Used
| Task | Model | Why |
|---|---|---|
| Carousel copy (8 slides) | GPT-4o | Full context, best instruction-following for structured JSON |
| Brief enrichment (hook / contrarian / slide 1) | GPT-4o-mini | Fast, cheap — 30–120 token outputs per call |
| Brain pattern matching | pgvector | Semantic search over brain.video_notes |
brain.video_notes — Knowledge Base
Transcripts and summaries from manually-submitted YouTube videos feed the ranker's brain match score. Richer brain = more differentiated topic scoring. Add new videos via youtube-summarizer skill in Claude.
Distribution Funnel
Every carousel and reel feeds this funnel. The CTA on every Slide 8 drives a comment. ManyChat handles the rest.
Content → Revenue Timeline
| Phase | Weeks | Focus | Expected closes |
|---|---|---|---|
| Warming | W20–W25 | Content streak, brand building, warm DM convos | 0 — funnel not warm yet |
| Pipeline seeding | W25–W28 | First qualified leads in DM pipeline | 1–2 prospects |
| First closes | W26+ | Akash closes from warm pipeline | 1–2 closes/mo target |
| 5 clients | By W52 | Compound — each client = case study = more proof | 5 by Dec 1, 2026 |
Weekly Cadence
| Day | Content Action | System Action |
|---|---|---|
| Mon (Creative day) | Review brief, pick 3–5 topics, plan week's reels | Weekly brief auto-posts to #akash-notes at 9pm |
| Tue | Run batch_runner, review carousel JSON outputs | Ranker scores written to topics_bank.csv |
| Wed–Thu | Film reels (green screen or selfie cam) | — |
| Fri | Edit + schedule posts. Set ManyChat keywords. | — |
| Daily | Reply to warm DMs, move convos toward call | — |
| Thu (auto) | Drop YouTube links for transcript ingestion | yt_discovery scheduled (disabled — manual only) |
Content KPIs
What "Working" Looks Like
- Monday brief in Slack every week without fail
- 3–5 carousel JSONs generated per week
- Every post has a keyword CTA → ManyChat wired
- At least 1 new video ingested to brain.video_notes per week
- Warm DM convos increasing week-over-week by W24
- Producing content without a ManyChat keyword wired (no conversion path)
- Going off-pillar (P1/P2/P3 only — no lifestyle, no EyeFly ops content)
- Skipping the brief — manual topic selection defeats the ranker system