···7788- React + Vite + TypeScript app with Tailwind + shadcn-style UI primitives
99- PDS-aware data fetching: resolves the repo DID in PLC directory, then fetches records from that PDS
1010-- HLS playback via `hls.js` with custom controls and mobile swipe-down dismiss
1111-- Search by talk title with instant client-side filtering
1010+- HLS playback via `hls.js` with native controls and mobile swipe-down dismiss
1111+- Search by title + AI-generated tags/topics with `/tag/{tag}` routes
1212- Mobile-first navigation: bottom tabs on mobile, sidebar on desktop
1313- PWA setup with `vite-plugin-pwa` and Workbox runtime caching
1414···2424```bash
2525npm run build
2626```
2727+2828+## Generate AI taxonomy (one-time or refresh)
2929+3030+The app can enrich talks with tags/topics generated through OpenRouter.
3131+3232+1. Put your key in `.env` as `OPENROUTER_API_KEY=...`.
3333+2. Run:
3434+3535+```bash
3636+npm run taxonomy:generate
3737+```
3838+3939+This updates `src/lib/video-taxonomy.json`, which is bundled into the app and used by search + tag routes.
27402841## Deploy to Vercel
2942