DEV Community

seller-mind
seller-mind

Posted on

I Was Drowning in Podcast Admin, So I Built an Edge AI Tool

I love recording podcasts. Sitting down with a guest, diving into a technical topic, and capturing that raw energy is the best part of the process. But the moment the recording stops? That’s when the dread sets in.

I was spending upwards of three hours after every single episode just doing admin work. I’d stare at a blinking cursor trying to come up with a catchy title, manually scrubbing through a 45-minute transcript to pull out key takeaways, and writing SEO-friendly descriptions. It was draining the joy out of podcasting. I realized I was spending more time marketing the episode than actually making it.

So I decided to build something.

The Hidden Tax of Podcast Admin

The post-production admin for podcasts is a hidden tax on creators. We often talk about audio quality or editing, but metadata is what actually gets your show discovered. A weak title means a low click-through rate on Apple Podcasts or Spotify. Poorly structured show notes mean you lose out on search engine traffic.

But doing this manually is unsustainable. If you ignore it, your podcast stagnates. If you try to do it all yourself, you burn out. I needed a way to offload the cognitive load of writing titles, summaries, and show notes without sacrificing quality or relying on clunky, disconnected tools. I wanted a unified pipeline that could take a raw transcript and instantly output structured, high-quality metadata.

Building an Edge AI Pipeline

I named the project PodCrisp. My main technical goal was to keep things incredibly fast and lightweight. I didn't want to manage heavy backend servers or deal with cold starts. I decided to build the entire stack on Cloudflare Workers, leveraging their AI inference capabilities at the edge.

Running AI models at the edge means the inference happens close to the user, drastically reducing latency. But it also means you have to be very intentional about how you structure your prompts, since you're working with specific model constraints.

Let’s look at how I approached the Podcast Title Generator. The biggest challenge with LLMs and titles is that they tend to default to generic, clickbaity nonsense. I needed to engineer a prompt that forced the model to be compelling but honest.

// 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
);
Enter fullscreen mode Exit fullscreen mode

By explicitly defining the rules in the system prompt—especially the "no clickbait that overpromises" constraint—I found the output quality improved dramatically. The tone variable also allows users to shift the vibe from "educational" to "conversational" without rewriting the core logic.

For the show notes generator, the challenge was structure. Raw transcripts are messy. I needed the AI to parse the conversational flow and extract specific sections. Here is the Cloudflare Worker handling that 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' },
    });
  },
};
Enter fullscreen mode Exit fullscreen mode

Using Llama 3 at the edge via Cloudflare was a practical choice. It’s fast enough to handle the 800-token limit for show notes without timing out, and the structured system prompt keeps the output predictable. I also built in features for episode script outlines and SEO keyword suggestions using similar edge-based prompt patterns.

Practical Results and Lessons Learned

Building PodCrisp taught me a lot about the realities of edge AI. What worked beautifully was the latency. Because the inference happens at the edge, the tools feel practically instant. Users don't have to sit around watching a loading spinner while a centralized server processes their transcript.

What surprised me was how much the initial prompt tuning mattered. I initially thought I could just pass the transcript and ask for "show notes," but the AI would just summarize the whole thing in one paragraph. Breaking it down into explicit markdown headers in the system prompt was the turning point.

If I were to start over, I’d probably implement a streaming response for the show notes generator. Even though it’s fast, watching the markdown render in real-time would make the UX feel even snappier. I'd also love to add more granular controls for the SEO keyword suggestions, perhaps letting users input their target audience niche to refine the output.

Try It Out

If you’re a podcaster struggling with the post-production admin, or just a developer curious about edge AI pipelines, I’d love for you to try it out. I’ve made the Podcast Title Generator completely free to use, no sign-up required. You can check it out and generate some titles for your next episode here: Podcast Title Generator.


Full disclosure: I'm the developer of PodCrisp. I built this because I needed it myself.

Top comments (0)