ClipGo: Turning Podcast Episodes into Daily Social Clips
Every Megashift episode held 8–12 moments worth sharing. But finding, cutting, captioning and posting them by hand took hours, so most episodes never got clipped at all.
The challenge
Make clip production hands-off without lowering the quality.
What I did
I wrote a spec and a CLAUDE.md instruction file first, then built a Python pipeline with Claude Code:
- Transcribe each episode with Groq Whisper.
- Pick the clips with Claude, scoring moments on hook strength and whether they’re a complete thought. A second Claude pass tightens each clip’s start and end using the surrounding context.
- Render 16:9 and 9:16 versions with FFmpeg, with burned-in subtitles and title cards.
- Publish one clip a day through a GitHub Actions schedule to Buffer, with media in Cloudflare R2 and status synced to Notion.
The bug that taught me the most
While pulling a clip from the schedule, my script reported every delete as successful, but the posts were still sitting in Buffer. The cause: Buffer’s API returns rate-limit and auth errors at the top level with an empty data field, and my code only checked the nested message, so errors read as success. I rewrote the operator scripts to return an explicit ok, error or rate-limited result and stop on rate limits, made deletes resumable (a clip is archived only once every delete succeeds), and documented the rate-limit budget in CLAUDE.md.
What changed
Twelve episodes processed, and a clip goes out every day without me touching it. Content that wasn’t worth producing by hand now ships daily.
What I took away
When you hand work to automation, verify its success signals, not just its outputs.
More about the show: Megashift.