Your personal AI podcast digest - delivered daily to your favorite podcast app
Podgest transforms your podcast subscriptions into personalized daily audio digests. Subscribe to unlimited podcasts, and each morning receive a professionally narrated summary of what matters most - delivered directly to Apple Podcasts, Spotify, or any podcast app via your personal RSS feed.
Live at dash.podgest.app
flowchart TB
subgraph User["👤 User"]
PodcastApp["Podcast App<br/>(Apple/Spotify/etc)"]
Dashboard["Web Dashboard<br/>dash.podgest.app"]
end
subgraph Cloudflare["☁️ Cloudflare"]
API["podgest-api Worker"]
MCP["podgest-mcp Worker"]
Pages["Cloudflare Pages"]
Queue["Cloudflare Queue"]
end
subgraph Supabase["🗄️ Supabase"]
DB[(PostgreSQL)]
Storage["Storage<br/>(audio files)"]
Cron["pg_cron<br/>(daily triggers)"]
end
subgraph Modal["⚡ Modal (GPU)"]
Whisper["faster-whisper<br/>Transcription"]
TTS["OpenAI/ElevenLabs<br/>Text-to-Speech"]
end
subgraph AI["🤖 AI Services"]
Claude["Claude<br/>(script generation)"]
OpenAI["OpenAI<br/>(TTS & embeddings)"]
end
Dashboard --> Pages
Pages --> API
PodcastApp -->|RSS Feed| API
Cron -->|6 AM daily| Queue
Queue --> API
API --> DB
API --> Storage
API --> Whisper
API --> Claude
API --> TTS
Whisper --> Storage
TTS --> Storage
MCP --> DB
MCP --> OpenAI
| Feature | Description |
|---|---|
| 🎧 Personal RSS Feed | Subscribe in any podcast app - Apple Podcasts, Spotify, Overcast, etc. |
| ⏱️ Configurable Length | Choose digest length from 5-20 minutes based on your commute |
| 🕐 Custom Schedule | Pick your delivery time and timezone (6 AM default) |
| 📡 Any Podcast RSS | Add any podcast via RSS URL or browse popular feeds |
| 🔗 ListenNotes Integration | Import your Listen Later playlist - auto-detects individual podcasts |
| 🎯 Smart Prioritization | Less frequent podcasts (weekly shows) get priority over daily ones |
| 🔐 BYOK (Bring Your Own Keys) | Use your own OpenAI, Anthropic, and ElevenLabs API keys |
| 🔒 Encrypted Storage | API keys encrypted at rest with AES-256-GCM |
| 🧠 Semantic Memory | All transcripts embedded via pgvector - search and query across your entire podcast history |
| 👥 Multi-tenant | Each user has isolated data and personalized digests |
| 🎙️ MCP Server | Query your podcast knowledge via Claude Desktop or Cursor |
- Subscribe - Add your favorite podcasts via RSS URL in the dashboard
- Configure - Set your preferred digest length (5-20 min), delivery time, and timezone
- Add API Keys - Provide your OpenAI and Anthropic keys (encrypted and stored securely)
- Listen - Add your personal RSS feed to any podcast app
- Enjoy - Wake up to a personalized audio digest every morning
6:00 AM (your timezone)
│
▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Poll RSS │────▶│ Transcribe │────▶│ Extract │
│ Feeds │ │ (Modal) │ │ Topics │
└─────────────┘ └─────────────┘ └─────────────┘
│
┌──────────────────────────────────────────┘
│
▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Generate │────▶│ Text-to- │────▶│ Publish │
│ Script │ │ Speech │ │ to RSS │
│ (Claude) │ │ (OpenAI) │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
| Component | Technology |
|---|---|
| Frontend | React + TypeScript + Tailwind (Cloudflare Pages) |
| API | Cloudflare Workers (TypeScript) |
| Database | Supabase PostgreSQL |
| Storage | Supabase Storage (audio files) |
| Scheduling | pg_cron + Cloudflare Queues |
| Transcription | Modal (faster-whisper on GPU) |
| Script Generation | Claude (Anthropic) |
| Text-to-Speech | OpenAI TTS (ElevenLabs optional) |
| Auth | Supabase Auth (Magic Link) |
podgest/
├── apps/
│ ├── web/ # React dashboard (Cloudflare Pages)
│ │ └── src/
│ │ ├── pages/
│ │ │ ├── Settings.tsx # API keys, digest prefs, manual generation
│ │ │ ├── Subscriptions.tsx # Podcast management
│ │ │ └── onboarding/ # First-time user setup
│ │ └── lib/
│ │ └── supabase.ts # Supabase client
│ │
│ ├── worker/
│ │ └── podgest-api/ # Main API (Cloudflare Worker)
│ │ └── src/
│ │ ├── index.ts # API endpoints, digest pipeline, RSS feed
│ │ └── user-keys.ts # API key encryption/validation
│ │
│ └── mcp-server/ # MCP Server (Cloudflare Worker)
│ └── src/
│ └── index.ts # MCP protocol handler
│
├── modal/
│ ├── transcribe.py # GPU transcription (faster-whisper)
│ └── tts.py # Text-to-speech generation
│
├── supabase/
│ └── migrations/ # Database schema + RLS policies
│
├── docs/
│ └── IMPLEMENTATION.md # Detailed design docs & implementation plan
│
└── .cursor/
└── agents/ # Reusable Cursor agents
├── security.md # Security review agent
├── verification.md # System verification agent
└── ui.md # UI testing agent
- Node.js 18+
- pnpm
- Cloudflare account (Workers + Pages)
- Supabase project
- Modal account (for GPU transcription)
Copy .env.example to .env and configure:
| Variable | Description |
|---|---|
SUPABASE_URL |
Supabase project URL |
SUPABASE_ANON_KEY |
Supabase anonymous key |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service role key (server-side only) |
Worker secrets (set via wrangler secret put):
| Secret | Description |
|---|---|
API_KEY_ENCRYPTION_KEY |
AES-256 key for encrypting user API keys |
ADMIN_API_KEY |
Admin endpoint authentication |
# Install dependencies
pnpm install
# Run web dashboard locally
pnpm --filter web dev
# Deploy API worker
cd apps/worker/podgest-api && npx wrangler deploy
# Deploy web dashboard
cd apps/web && npm run build && npx wrangler pages deploy dist --project-name=podgest-web- Implementation Plan & Design Docs - Detailed architecture, design decisions, roadmap
- Security Agent - Reusable security review configuration
Private - All rights reserved.