My Automated Content Pipeline
Every week, 15 pieces of content go live across 5 platforms. Most of the work happens without me touching a keyboard. Here's exactly how it works.
Week 23 theme
AI Creative Without the Slop
How marketing teams use AI as a draft layer without shipping the visual and voice tells that mark generic AI output.
- 01
Scan crosslink channel
2026-05-19 · Cloud Claude Code session
- 02
Write scripts
2026-05-19 · Cloud Claude Code session
- 03
Film
- 04
Process & render clips
2026-05-20 10:47 ET · launchd watcher (Mac Mini)
- 05
Upload and schedule
2026-05-20 · Local Mac Mini Claude Code session
- 06
Generate post copy
2026-05-20 · Local Mac Mini Claude Code session
- 07
Draft blog post
2026-05-19 · Cloud Claude Code session
- 08
Draft + Schedule Newsletter
2026-05-20 · Local Mac Mini Claude Code session
- 09
Publish blog
2026-05-20 · Local Mac Mini Claude Code session
- 10
Schedule Blog Promo
2026-05-20 · Local Mac Mini Claude Code session
- 11
Post back to crosslink channel
- 12
Live week
- 13
Health check
Write Anchor Script
GatedVoice DNA: Writing style compliance. Every sentence checked against banned phrases, em dash rules, paragraph length limits, and contraction requirements. The anchor video script also follows the simplified video-script standard ('a sharp business owner who isn't a marketer').Brand Standards: Brand identity and platform formatting. Correct naming, hashtag order, account selection, link placement, and the no-repost rule.Internal. AI drafts the weekly anchor script: a 15-second topic intro and a 2-3 minute simplified body carrying at least 3 self-contained hook moments Opus can pull as Shorts. Plus the two words-only prompter files William films from.
•One anchor script per week: a 15-second topic intro ("This week we're talking about X, because Y") + a 2-3 minute body.
•The body is pitched to "a sharp business owner who isn't a marketer" (Voice DNA video-script standard): plain language, lower density. The blog and newsletter keep their fuller depth.
•The body carries at least 3 self-contained hook-pattern moments (Open Loop, Specific Number, Pattern Break, Name the Pain), each marked '# HOOK MOMENT: <pattern>' and able to stand alone as a 20-40 second clip Opus can pull. The throat-clear anti-pattern is a hard reject anywhere in the body.
•Stage 1 self-check (brand-standards SKILL > Shorts Hook Framework > Anchor Script Self-Check) must pass before filming.
•Prompter files (effective W27): run `python3 scripts/shorts-renderer/extract_prompter_clips.py --week N --targets repo` to emit W{N}-intro.txt + W{N}-body.txt (words-only, the two takes) + W{N}-full.txt (consolidated) into scripts/produced/shorts/prompter/. Pure derivatives of the master; never hand-edited. The Mac Mini launchd watcher mirrors them into iCloud tools/shorts-processor/prompter/ for filming.
Film
Manual StepInternal. The only manual step. William films two takes in one batch — the 15-second intro and the body. Raw clips sync to the cloud automatically.
•The only step in the pipeline that requires human action
•Two takes filmed in one batch: the intro and the body. Horizontal 1080p.
•Raw clips sync to iCloud raw/ automatically after filming wraps
The only step in the pipeline that requires human action. Everything before and after is automated.
Process & Combine Clips
Internal. A local Python step trims dead air and normalizes audio on the two raw takes, then concatenates intro + brand interstitial + body + interstitial into the anchor and emits the three Opus inputs. Opus then handles the 9:16 reframe, captions, and viral short-picks.
•Auto-fires when raw clips land in iCloud raw/ (launchd WatchPaths + settle + iCloud-download-readiness gate); posts status to Slack on every fire
•Trims dead air + normalizes audio to -16 LUFS on the raw intro and raw body (process_shorts.py), and normalizes both to the 1080p30 / AAC spec
•Concatenates intro + PLGlitchingLogo interstitial + body + PLGlitchingLogo outro into the combined anchor
•Emits three outputs: trimmed intro (YouTube intro-teaser Short), trimmed body (TikTok + YouTube meat Shorts), and the combined anchor (sent to Opus for subtitles)
•Opus owns the rest from W27: 9:16 reframe, ALL captions (Shorts + anchor subtitles), and viral short-pick selection. The local renderer's Whisper transcription, content-match, and hook-overlay compositing retire because Opus owns them again. See hub/decisions/2026-06-01-w27-strategic-pivot.md; the rendering role of 2026-05-18-local-shorts-renderer.md is superseded (re-scoped to trim+concat).
•Opus brittleness accepted: no Opus API yet, so the render loop is Chrome-MCP / manual and runs in a local Claude Code session only until API access lands.
Upload & Schedule
GatedBrand Standards: Brand identity and platform formatting. Correct naming, hashtag order, account selection, link placement, and the no-repost rule.Push content. The Opus-rendered anchor + Shorts are scheduled via the Postiz Cloud CLI. The YouTube anchor publishes Monday with a custom thumbnail; the LinkedIn anchor Tuesday on both accounts; 4 YouTube Shorts and 3 TikTok Shorts across Mon/Wed/Fri; 2 LinkedIn Shorts Wed/Fri on Personal.
•Push content: each post stays on its scheduled slot, fired by the host platform on the calendar day
•Distribution via Postiz Cloud CLI to YouTube, TikTok, and LinkedIn (PL company + WD personal). X is killed (see hub/decisions/2026-06-01-kill-x-channel.md).
•Schedule grid: YouTube anchor Mon + intro-teaser Short Mon + meat Shorts Mon/Wed/Fri; TikTok meat Shorts Mon/Wed/Fri; LinkedIn anchor Tue (both accounts) + meat Shorts Wed/Fri (Personal only)
•Shorts on-screen CTAs: the intro teaser says 'click the link in the description to see more' (drives to the anchor); the meat Shorts say 'Follow for more'
•The 3 meat Shorts intentionally cross-post to YouTube + TikTok + LinkedIn Personal the same day; the no-duplicate-same-day rule is retired for Shorts (the no-repost rule still holds)
•Custom YouTube thumbnail (1280x720, generated from the canonical base + the week's headline) is attached to the anchor. Postiz-first; if Postiz can't attach a custom thumbnail to a scheduled long-form, the anchor publishes via YouTube Studio. See reference/skills/brand-standards/SKILL.md > Thumbnail.
•Opus renders (reframe + captions + picks); Postiz distributes. Runs in a local Claude Code session only (Opus UI + downloaded files + Postiz CLI are all local).
Generate Post Copy
GatedVoice DNA: Writing style compliance. Every sentence checked against banned phrases, em dash rules, paragraph length limits, and contraction requirements. The anchor video script also follows the simplified video-script standard ('a sharp business owner who isn't a marketer').Brand Standards: Brand identity and platform formatting. Correct naming, hashtag order, account selection, link placement, and the no-repost rule.Internal. AI writes platform-specific text for the anchor and every Short: LinkedIn descriptions with inline links, YouTube titles and descriptions, TikTok captions. Drafted into the week's upload-prep doc and passed as the copy argument to each Postiz posts:create call in Stage 4.
•The YouTube anchor description and LinkedIn anchor body carry the blog URL with a compelling description and a CTA to the blog + Beehiiv; never 'link in comments'
•Short captions carry the on-screen CTA's written companion + #ProfessorLeads as the first hashtag
•Every external URL pointing back to professorleads.com is UTM-tagged per the convention in reference/skills/brand-standards/SKILL.md (utm_source, utm_medium, utm_campaign=w{N}-{theme}, utm_content). Effective W20.
•Every piece of copy passes both Voice DNA and Brand Standards checks
•Drafted in hub/pipeline/weekN-upload-prep.md for traceability before being applied to scheduled posts
Draft Blog Post
GatedVoice DNA: Writing style compliance. Every sentence checked against banned phrases, em dash rules, paragraph length limits, and contraction requirements. The anchor video script also follows the simplified video-script standard ('a sharp business owner who isn't a marketer').Brand Standards: Brand identity and platform formatting. Correct naming, hashtag order, account selection, link placement, and the no-repost rule.Internal. AI writes a deep-dive blog post on the week's theme. The draft passes voice and brand compliance checks before moving to publish. The blog keeps its full analytical depth (the simplification applies only to the video script).
•Long-form blog post tied to the week's content theme, at the existing McKinsey-level depth
•Includes the Forbes Further Reading section and the discoverability triad per brand-standards
•Passes Voice DNA and Brand Standards before moving to Stage 8
•Drafted into content-drafts/blog/, then promoted to content/blog/ in Stage 8
Draft + Schedule Newsletter
GatedVoice DNA: Writing style compliance. Every sentence checked against banned phrases, em dash rules, paragraph length limits, and contraction requirements. The anchor video script also follows the simplified video-script standard ('a sharp business owner who isn't a marketer').Brand Standards: Brand identity and platform formatting. Correct naming, hashtag order, account selection, link placement, and the no-repost rule.Push content. AI drafts both newsletter editions (Beehiiv full + LinkedIn 'Playbook Preview' teaser), then schedules them via Chrome MCP for the Tuesday morning send. Beehiiv delivers; the Playbook Preview publishes 5 minutes after Beehiiv hits send.
•Full edition drafted for Beehiiv email subscribers, scheduled for the Tuesday 10:00 AM ET send
•Teaser edition drafted for LinkedIn Newsletter (The Playbook Preview), scheduled for 10:05 AM ET
•Both scheduled via Chrome MCP in the same session as the drafting (single-session pattern)
•The 5-minute lag exists so the LinkedIn body's archive link resolves to a populated Beehiiv archive page on first click
•Playbook Preview body includes a prominent single-sentence Beehiiv cross-over CTA at peak interest (effective Issue 9, per 2026-04-23 health-check rule in brand-standards/SKILL.md)
•Beehiiv issue must have a one-sentence post description (Excerpt / Subtitle field) populated before the Schedule click; the field renders on every archive card at newsletter.professorleads.com (effective 2026-04-23, after the audit caught multiple blank cards)
•Beehiiv email Subject Line caps at 60 characters so the hook lands before Gmail / Apple Mail / Outlook truncation; the Beehiiv counter reads /200 but the rule is 60 (effective 2026-04-27, after the Apr 21 108-char send lost ~16pp open rate)
•Beehiiv email Subject Line and LinkedIn Newsletter headline are separate instruments effective W19 (2026-05-05): write the Subject Line for inbox curiosity-gap framing and the LinkedIn headline for article-card payoff framing; they can match, but only on purpose. Evidence: W17 curiosity gap opened 34.88% on Beehiiv vs W18 numbers/dollar at 22.73% on the same 44-recipient list, while W18 numbers/dollar tripled LinkedIn Newsletter impressions WoW (487 vs 173) on the same audience arc
Publish Blog
GatedVoice DNA: Writing style compliance. Every sentence checked against banned phrases, em dash rules, paragraph length limits, and contraction requirements. The anchor video script also follows the simplified video-script standard ('a sharp business owner who isn't a marketer').Brand Standards: Brand identity and platform formatting. Correct naming, hashtag order, account selection, link placement, and the no-repost rule.Pull content. The blog publishes as soon as Stage 6 finishes and all checks pass, not on a calendar date. The file is moved into content/blog/, committed, pushed; Vercel auto-deploys within 60 seconds.
•Publish-on-completion: fires the moment Voice DNA + Brand Standards self-checks pass AND all links verify live
•Frontmatter date stays at the canonical week-of date even when the file lands earlier
•Markdown committed and pushed to main; Vercel auto-deploys within 60 seconds
•Pull content has no audience notification, so early publish is invisible to subscribers and improves SEO indexing time
•After Vercel deploy: submit the new blog URL to Google Search Console for indexing via the URL Inspection tool (see CLAUDE.md > Google Search Console Indexing)
Schedule Blog Promo
GatedVoice DNA: Writing style compliance. Every sentence checked against banned phrases, em dash rules, paragraph length limits, and contraction requirements. The anchor video script also follows the simplified video-script standard ('a sharp business owner who isn't a marketer').Brand Standards: Brand identity and platform formatting. Correct naming, hashtag order, account selection, link placement, and the no-repost rule.Push content. AI drafts a LinkedIn text post promoting the new blog, then schedules it via Chrome MCP from the William DeCourcy personal profile for the Monday morning slot. LinkedIn delivers on schedule.
•Push content: drafted and scheduled in advance, fired by LinkedIn on the Monday morning slot
•LinkedIn text post with a direct link to the new blog article, posted from the William DeCourcy personal profile
•Drafted and scheduled in the same Chrome MCP session that publishes the blog (single-session pattern)
•Voice DNA and Brand Standards self-checks gate the draft before scheduling
•Not event-triggered by the blog publish: the calendar slot is the source of truth
Live Week
Operational. Content publishes automatically across all platforms based on the schedules set in earlier stages. A 15-minute daily engagement routine runs (comment responses, outbound engagement, collaboration outreach).
•Host platforms fire scheduled content on their slots — nothing new is created here
•15-minute daily engagement routine: respond to comments, engage with others, reach out for collaborations
•No manual intervention needed unless the health check flags something
Health Check
Internal. A comprehensive Friday audit covering content delivery, site traffic, search performance, social channel activity across every brand-owned account, technical SEO, and deployment health. Emails a full report with a one-page PDF infographic attached.
•Verifies every scheduled piece published across all platforms
•Pulls GA4 traffic data with social breakdown by platform (LinkedIn, YouTube, TikTok) plus YTD totals since Jan 1
•Pulls Google Search Console indexing, clicks, rankings, and YTD impressions/clicks
•Pulls YouTube channel stats, subscribers, per-video performance, and YTD aggregates via YouTube Data API
•Pulls Beehiiv subscriber growth, open rates, click rates, and YTD rollups via Beehiiv API
•Scrapes LinkedIn Personal, LinkedIn Company, LinkedIn Newsletter, and TikTok analytics dashboards via Chrome MCP (canonical playbook: scripts/health-check/social-collection-playbook.md) — falls back to a manual-fill email if a platform's auth expires or selectors drift
•Merges all per-channel blobs into a single social_metrics.json with WoW deltas per channel and YTD totals rolled up across channels
•Claude reviews the merged numbers and writes insights (why the numbers moved) and recommendations (per-channel one-liners + overall bullets) into the same JSON
•Renders a one-page portrait PDF infographic (@react-pdf/renderer) with hero stats, per-channel grid, traffic-flow strip, recommendations panel, and YTD footer
•Runs technical SEO checks: sitemap validation, key page status codes, SSL, Core Web Vitals
•Checks Vercel deployment health and build status
•Emails the full HTML report with the PDF attached to Professor@ProfessorLeads.com via the Resend API
Weekly Output
Want the Playbook?
The newsletter breaks down one piece of this system every week. Real frameworks, real metrics, no fluff.
What you're signing up for: One email per week. That's it. You'll get actionable performance marketing insights, frameworks I've built over 15 years in the field, and the occasional resource I think is worth your time.
What I won't do: Sell your email address. Spam you with daily pitches. Pretend we're best friends so I can push affiliate links. Your inbox is already a mess. I'm not here to make it worse.
The fine print: By clicking 'Subscribe', you consent to receive weekly marketing emails from Professor Leads (ProfessorLeads.com). Every email includes an unsubscribe link that actually works (because nothing erodes trust faster than a broken opt-out). You can leave anytime, no questions asked.
Sponsored content: If I ever recommend a product or service I've been compensated for, I'll tell you. Clearly. Every time.
Oh, and one more thing: this page is generated from the same pipeline definition file that runs the actual production process. When a stage gets added, removed, or renamed, this diagram updates itself on the next deploy. The page about the automation is, itself, automated. Couldn't help it.
Last deployed June 6, 2026 at 1:47:02 PM EDT

