Cloudflare-first monorepo for podcast feed registration, background episode processing, and canonical de-aded feed delivery.
ui: React + Vite frontend with CSS Modules and shared design tokensworkers/api: public API, RSS rendering, audio proxying, and scheduled feed refreshworkers/processor: queue consumer for transcript, ad-detection, and rewrite workpackages/shared: shared API contracts and queue message types
bun run dev:ui: start the frontend locallybun run typecheck: run TypeScript checks across the workspacebun run lint: run the current lint/type validation commandsbun run types: regenerate Cloudflare Worker binding types with Wrangler
Pushes to main trigger .github/workflows/deploy.yml, which:
- typechecks the Bun workspace
- typechecks
services/transcriber - builds and deploys
uito Cloudflare Pages - deploys
workers/apito Cloudflare Workers - deploys
workers/processorto Cloudflare Workers - deploys
services/transcriberto Railway
Required GitHub repository secrets:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_IDDISCORD_PROCESSING_FAILURE_WEBHOOK_URLfor processor failure alertsRAILWAY_TOKEN
The initial D1 schema lives at workers/api/schema/001_initial.sql.
The API worker is configured with migrations_dir: "./schema" so future wrangler d1 migrations commands target that directory.
No migrations are applied automatically from this repo. Apply them intentionally when you are ready.