Podverse is a web app that brings AI superpowers to podcasts.
This project is meant as a demonstration of a full-stack webapp that leverages AI capabilities.
- Import a podcast by providing its RSS feed URL
- Automatic transcript generation using Deepgram
- Automatic AI-generated diarization and speaker identification
- Automatic AI-generated episode summaries
- LLM-powered chatbot with RAG
- Full-text search against podcast transcripts, metadata, and summaries
Podverse is an entirely serverless architecture. It is built using Next.js and can be deployed using Vercel. It uses TailwindCSS for styling and ShadCN for UI components.
It uses the following services:
- Supabase as the back-end database
- Clerk for authentication
- Inngest for background data processing
- Deepgram for transcript generation
- OpenAI models for LLMs
- Stripe for billing
- Mailgun for sending emails
- Ensure you have
npmandyarninstalled. - Clone this repo
- Run:
yarnto install all package dependencies
These instructions assume you will be deploying to Vercel. This is not strictly necessary but will simplify configuration.
- Create a Vercel project for your deployment.
- Add the Supabase and Inngest integrations to your Vercel project. This should add the various environment variables needed for Supabase, Inngest, and Postgres.
- Create an OpenAI API key and add it as the environment variable
OPENAI_API_KEYin your Vercel project's environment variables. - Create a Deepgram API key and add it as the environment variable
DEEPGRAM_API_KEYin your Vercel project's environment variables. Also add the key identifier asDEEPGRAM_API_KEY_IDENTIFIER. - Create a Clerk API key and add the environment variables
CLERK_SECRET_KEYandNEXT_PUBLIC_CLERK_PUBLISHABLE_KEYto your Vercel project. - Create a Mailgun API key and add the environment variables
MAILGUN_DOMAINandMAILGUN_API_KEYto your Vercel project.
Optionally, if you want to enable billing, you can set up a Stripe
account, and set the environment variables NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY,
STRIPE_SECRET_KEY, and STRIPE_WEBHOOK_SECRET.
The file supabase-schema.sql contains a dump of the Supabase schema for Podverse,
generated using supabase db dump. Once you have initialized your Supabase project,
you can restore it using:
$ psql -h YOUR_SUPABASE_DB_HOST -U YOUR_DB_USER -d YOUR_DB_NAME -f supabase-schema.sql
For local development, you will need to create the file packages/webapp/.env.local
containing the following values.
SUPABASE_URL=<Supabase URL>
SUPABASE_API_KEY=<Supabase API key>
SUPABASE_SERVICE_ROLE_KEY=<Supabase service role key>
NEXT_PUBLIC_SUPABASE_URL=<Supabase URL>
NEXT_PUBLIC_SUPABASE_ANON_KEY=<Supabase anon key>
DEEPGRAM_API_KEY=<Deepgram API key>
DEEPGRAM_API_KEY_IDENTIFIER=<Deepgram API key identifier>
INNGEST_EVENT_KEY=<Inngest event key>
INNGEST_SIGN_KEY=<Inngest sign key>
OPENAI_API_KEY=<OpenAI key>
STRIPE_SECRET_KEY=<Stripe secret key>
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=<Stripe publishable key>
CLERK_SECRET_KEY=<Clerk secret key>
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=<Clerk publishable key>
You can run the service locally using:
$ yarn workspace webapp dev
Note that background processing tasks (e.g., ingesting a new podcast) are executed using Inngest. For this to work locally, you need to run the Inngest dev server locally as well, which can be done with:
$ npx inngest-cli@latest dev
Please file an issue if you have any problems or need help!
