I was struggling with the post-production grind. I’d spend three hours recording a great episode, only to spend another four hours staring at a blinking cursor trying to write a catchy title, format show notes, and extract SEO keywords. The creative burnout was real. I started dreading the publishing day. The transition from an energetic, creative recording mindset to an analytical, SEO-focused writing mindset was just too jarring. So I decided to build something.
The problem isn't just the raw time it takes to write these assets; it's the context switching. When you ignore this friction, you either end up publishing inconsistent show notes, using generic titles that don't get clicks, or worse, burning out and stopping the podcast altogether. The cost of ignoring this workflow bottleneck is your consistency and your audience growth. Listeners want to know what an episode is about before they hit play, and search engines need structured text to rank your show. If your show notes are just a copy-pasted transcript, you're leaving discoverability on the table.
I needed a way to handle the heavy lifting without losing the authentic voice of the show. I built PodCrisp, leveraging Cloudflare Workers to run AI inference right at the edge. Running AI inference at the edge means the heavy lifting happens geographically closer to the user. This drastically reduces latency compared to traditional cloud APIs that might route requests across the country.
Let's talk about prompt engineering for titles. It's not just "give me a title." You need strict constraints to prevent the AI from generating generic fluff. Here is the function I use to structure the prompt:
// Prompt engineering for podcast title generation function buildTitlePrompt(topic, tone, count) { return { system: `You are an expert podcast producer. Generate compelling titles. Rules: - 5-10 words each - Use curiosity gaps, numbers, or strong hooks - Match the tone: ${tone} - No clickbait that overpromises - Format as numbered list`, user: `Episode topic: ${topic} Generate ${count} title options that make someone want to click play.` }; } // Example: generate 5 titles for a bootstrapping episode const prompt = buildTitlePrompt( "How to start a podcast with zero budget", "inspirational", 5 ); The system prompt sets strict rules regarding word count, curiosity gaps, and tone matching. The user prompt provides the specific context. This structured approach prevents the AI from generating clickbait that overpromises. By explicitly forbidding overpromising, we keep the titles honest, which builds long-term listener trust.
Next is the show notes pipeline. This is where edge computing really shines. We take the raw transcript and convert it into structured, scannable notes.
// Show notes generation pipeline (Cloudflare Workers + AI) export default { async fetch(request, env) { const { transcript } = await request.json(); // Call AI model for structured show notes const response = await env.AI.run('@cf/meta/llama-3-8b-instruct', { messages: [ { role: 'system', content: `Convert podcast transcripts to show notes: ## Episode Summary (2-3 sentences) ## Key Takeaways (5-7 bullet points) ## Timestamps (estimate from content flow) ## Resources Mentioned` }, { role: 'user', content: transcript } ], max_tokens: 800, }); return new Response(JSON.stringify(response), { headers: { 'Content-Type': 'application/json' }, }); }, }; By passing the raw transcript to a Llama 3 model running on Cloudflare Workers, we can process the text locally without routing it through multiple centralized servers. The system prompt forces a specific markdown structure. Notice how I ask it to estimate timestamps from the content flow. This turns a wall of text into a highly usable asset in seconds. The trade-off, however, is managing context windows. When dealing with two-hour podcast transcripts, you can't just pass the whole thing to the model at once. We had to implement a chunking strategy, summarizing segments of the transcript before feeding them into the final show notes pipeline.
Beyond titles and notes, the architecture also powers an episode script outline generator for pre-production, and an SEO keyword suggestion tool that analyzes the transcript context to surface niche, long-tail keywords.
What worked? The structured prompts drastically reduced hallucinations. By forcing the AI to estimate timestamps based on content flow rather than making them up from thin air, the show notes became genuinely useful for listeners navigating long episodes. The episode description writer also saved me hours, turning messy brain dumps into coherent, engaging summaries.
The episode script outline generator has been a massive help for my pre-production. Instead of starting with a blank page, I input my core topic and target audience, and it generates a logical flow with intro hooks, main discussion points, and outro calls to action. It doesn't write the script for me, but it builds the scaffolding so I can just focus on the conversation.
What surprised me? The SEO keyword suggestions. I initially thought it would just give generic terms like "podcast" or "tech." But by analyzing the specific transcript context, it surfaces highly relevant, long-tail keywords that actually match the episode's specific discussion.
What would I change? I'd love to add more granular control over the tone sliders for the episode description writer. Right now, it handles "professional" and "casual" well, but allowing for more nuanced adjustments would help match highly specific brand voices.
If you're looking to streamline your own podcast workflow and see how structured prompting changes the output, I've made the core title generation logic available to the community. You can test out the Podcast Title Generator to get some immediate inspiration for your next episode.
You can try it here: https://podcrisp.com/free-tools/title-generator
Full disclosure: I'm the developer of PodCrisp. I built this because I needed it myself.

