Category
Technical Notes
- ·3 min read
Building a provider-switching LLM client: one interface, three providers, task-tier routing
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.

- ·3 min read
Entity resolution for guests: fuzzy matching first, LLM disambiguation second
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.

- ·3 min read
Structured extraction with Pydantic + Claude: guests, topics, and quotes from raw transcripts
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.

- ·3 min read
Ingesting YouTube transcripts: yt-dlp for subs, Whisper when subs don't exist
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.

- ·3 min read
Building an AI Podcast Index: the Project, the Stack, and What You'll Have at the End
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.

- ·3 min read
Taming a polyglot monorepo: Taskfile, selective CI, and reproducible setup
A monorepo's developer experience is mostly a Taskfile plus a CI workflow. Both should answer one question: what changed, and what depends on what changed?

- ·3 min read
A Vite + React SPA inside a uv monorepo: pnpm-workspace, dev proxy, shared types
Two workspace managers minding their own business — uv for Python, pnpm for JS, with a thin Taskfile on top so you never have to remember both.

- ·3 min read
The killer monorepo argument: Pydantic models, codegen'd to TypeScript, consumed by React
A 20-line codegen pipeline turns Pydantic into JSON Schema into TypeScript. Rename a field on the backend and the frontend stops compiling. That's the whole point of a polyglot monorepo.

- ·3 min read
Designing a uv workspace: package boundaries that survive contact with reality
The hardest part of a Python monorepo isn't the tooling — it's deciding where one package ends and another begins. Two rules — change boundaries and interface boundaries — and a worked example.

- ·3 min read
Why a Python Monorepo: What uv Workspaces Actually Gives You
Most Python monorepo pain in 2024 came from gluing pip-tools, tox, and path hacks together. uv workspaces makes the seam between packages a first-class concept — one lockfile, one resolver, one venv. That's what makes the monorepo worth doing.
