Course · 8 chapters

Build an AI Podcast Index

Eight chapters, one working artifact. You'll go from an empty repo to a Python + FastAPI + React app running on your laptop — ingesting transcripts, extracting structured data with Claude, resolving guest identities, full-text searching without embeddings, and generating grounded questions for the next episode.

0 of 8 complete0%
Start chapter 1 →
Build an AI Podcast Index
  1. 01

    Project & stack overview

    An eight-part build-along: a local tool that ingests a YouTube podcast channel, extracts guests and topics with Claude, lets you clip-search by intent, and generates grounded questions for future episodes. Post 1: the demo, the architecture, and one paragraph per stack choice.

    10 min
  2. 02

    Ingesting YouTube transcripts

    YouTube's Data API gives you channel discovery but not third-party caption text — that endpoint is OAuth-only in practice. The honest pipeline is yt-dlp in subs-only mode for captions, and local Whisper as a deeper fallback when no captions exist at all.

    20 min
  3. 03

    Structured extraction with Claude

    Schema-first prompting with Pydantic + Anthropic tool use, a Haiku triage pass that gates Sonnet extraction, prompt caching for the system block, and a single retry that feeds the validation error back into the prompt.

    12 min
  4. 04

    Guest entity resolution

    The same person shows up as 'Bibhusan Bista', 'Bibhusan B.', and 'B. Bista' across three episodes. Don't ask the LLM first — try cheap deterministic matching, then escalate only the ambiguous cases.

    10 min
  5. 05

    Provider-switching LLM client

    A small adapter package lets you swap Anthropic, OpenAI, and local Ollama via an env var, route cheap classification to Haiku and synthesis to Opus, and add prompt caching without touching call sites.

    9 min
  6. 06

    Search without embeddings

    For a few hundred podcast episodes, Postgres full-text search plus an LLM rerank beats embedding-based RAG on both quality and operational simplicity. No vector DB, no embedding pipeline.

    9 min
  7. 07

    React frontend

    A Vite + React SPA with three real pages — popular guests, guest detail, search — wired to FastAPI through codegen'd TypeScript types from a shared Pydantic schema. No UI framework, three pages, type-safe end to end.

    7 min
  8. 08

    Question generator & shipping locally

    Grounded question generation is one prompt away. Wrap the project with a local cron, a one-line backup, and a popular-guests landing query — and the podcast index runs on its own.

    9 min
0:000:00