When I first started podcasting, I thought the hard part was hitting the record button. I was wrong. The real nightmare began the moment I stopped talking. Suddenly, I was staring at a 45-minute audio file, dreading the admin work. I had to write show notes, brainstorm titles that didn't sound incredibly cheesy, format transcripts, and figure out SEO keywords. I was spending three hours on post-production admin for every single hour of recording. I tried a few existing AI tools, but they were either too generic, required complex API setups, or just spit out robotic text. I was burning out. So, I decided to build something.
The Invisible Work of Podcasting
Podcasting has a massive drop-off rate for creators, and it’s rarely because of bad audio quality. It’s because of the "invisible work." It’s the post-production admin that kills momentum. If you ignore this work, your podcast gets buried in directories with no context for new listeners. But as a solo dev or indie podcaster, you don't have a team of producers or a dedicated marketing department. The cost of ignoring this invisible work is burnout, and eventually, a dead podcast. I needed a way to automate the boring stuff without losing the human touch or resorting to spammy AI-generated fluff. I wanted tools that actually understood the context of a conversation, not just a generic text spinner.
Architecting on the Edge
I decided to build PodCrisp. For the architecture, I made a deliberate choice to build entirely on Cloudflare Workers. Running AI inference at the edge meant I didn't have to manage heavy, expensive GPU servers, and it kept latency incredibly low for users globally.
But it wasn't all smooth sailing. My biggest early mistake was treating the LLM like a simple text-in, text-out pipe. I quickly learned that prompt engineering is less about asking the AI to do something and more about building strict guardrails.
Take the show notes generator, for example. If you just pass a raw transcript and ask for "show notes," the AI will give you a giant wall of text. I had to enforce strict structural constraints. Here is the actual Cloudflare Worker code I use for the show notes pipeline:
// 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 defining the exact markdown headers in the system prompt, the AI knows exactly how to format the output. I apply this same philosophy to the episode description writer and the script outline generator.
The title generator was another lesson in guardrails. Initially, the titles were painfully generic. I had to rewrite the prompt logic to force specific structures. I ended up writing a helper function just to inject tone and constraints dynamically:
// 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.`
};
}
The trade-off with edge AI is that you have to be hyper-vigilant about token limits and output formatting, but the speed and cost benefits are absolutely worth it.
What Worked, What Surprised Me
Looking back, what worked really well was the edge deployment. Zero cold starts for the API meant the tools felt instant, which is crucial when you're in a creative flow state. The structured show notes actually saved me hours of tedious formatting every week, allowing me to focus back on actually recording.
What surprised me, however, was how much the title generator needed babysitting. Left to its own devices, the AI would generate incredibly clickbaity, exaggerated titles that felt like YouTube spam. Adding the "No clickbait that overpromises" rule in the prompt above was a game changer for keeping the output authentic.
If I could do it all over again, I’d change how I approached the SEO keyword suggestions. I initially over-engineered the NLP pipeline, spending weeks tweaking complex extraction logic and vector databases when a simpler, prompt-based approach worked just as well for episode pages. As indie devs, we tend to over-engineer because we love the tech. But shipping a simple solution that actually works is always better than a complex one that sits in development.
Try the Free Title Generator
If you're currently staring at a blank screen trying to name your next episode, I extracted the title generator into a standalone free tool. It gives you multiple style options without any paywalls or signups. You can try the free Podcast Title Generator at https://podcrisp.com/free-tools/title-generator.
Full disclosure: I'm the developer of PodCrisp. I built this because I needed it myself.
Top comments (0)