An AI-powered note-taking application that transcribes and summarizes audio recordings using AssemblyAI and OpenAI. Built as an example application for the Render AI Agent example library.
Want to run this locally in 5 minutes? → QUICKSTART.md
The quickstart guide walks you through getting everything running with Docker Compose in just a few commands!
- Deploy to Render
- Features
- Repository Structure
- Quick Start with Docker
- Docker Commands
- Troubleshooting
- Additional Documentation
- Contributing
- License
This project is pre-configured for one-click deployment to Render using the included render.yaml blueprint.
What you get:
- ✅ Next.js frontend with browser-based audio recording
- ✅ Flask backend with AssemblyAI and OpenAI integration
- ✅ Separate frontend and backend services
- ✅ Auto-scaling and health checks
- ✅ Environment variable management
Deployment steps:
-
Fork this repository to your GitHub account
-
Create a new Blueprint Instance on Render:
- Go to Render Dashboard
- Click "New" → "Blueprint Instance"
- Connect your forked repository
- Select branch (usually
main)
-
Configure environment variables:
- Render will auto-detect
render.yaml - You'll be prompted to enter:
ASSEMBLYAI_API_KEY(Get one here)OPENAI_API_KEY(Get one here)
- Optional:
OPENAI_MODEL(defaults togpt-4o-mini)
- Render will auto-detect
-
Deploy:
- Click "Apply" to create all services
- Render will:
- Build and deploy Flask backend
- Build and deploy Next.js frontend
- Automatically link services together (frontend will auto-connect to backend!)
-
Access your deployed app:
- Frontend:
https://your-app-name-frontend.onrender.com - Backend API:
https://your-app-name-backend.onrender.com - That's it! The app works immediately - no manual configuration needed! 🎉
- Frontend:
Cost Estimate (Render Free Tier):
- 2 Web Services (frontend + backend): Free
- AssemblyAI API: Pay-per-use (~$0.05 per audio hour)
- OpenAI API: Pay-per-use (~$0.01-0.05 per summary)
- Total: ~$0/month recurring (free tier) + usage-based API costs
- 🎤 Browser-based audio recording - Record directly in your browser, no downloads needed
- ⚡ Lightning-fast transcription - Powered by AssemblyAI for accurate speech-to-text
- 🤖 AI-powered summaries - Get key insights, important points, and action items with OpenAI
- 📊 Intelligent chunking - Handles transcriptions of any length with automatic text chunking (no context overflow!)
- 🎨 Beautiful UI - Inspired by Render.com's clean, modern design with markdown support
- 🐳 Docker-ready - Easy deployment with Docker Compose
- ☁️ Render-optimized - Deploy to production with a single blueprint file
.
├── backend/ # Flask + Python API (transcription + summarization)
│ ├── app.py # Flask application
│ ├── pyproject.toml # uv dependencies
│ ├── services/ # AssemblyAI and OpenAI integrations
│ │ ├── assemblyai_service.py
│ │ └── openai_service.py
│ ├── Dockerfile # Backend container
│ └── ...
├── frontend/ # Next.js app (audio recorder + results viewer)
│ ├── app/
│ │ ├── page.tsx # Main page
│ │ ├── layout.tsx # App layout
│ │ └── globals.css # Global styles
│ ├── components/
│ │ ├── AudioRecorder.tsx # Audio recording component
│ │ └── ResultsViewer.tsx # Results display
│ ├── lib/
│ │ └── api.ts # API client
│ ├── Dockerfile # Nginx-served production build
│ └── next.config.ts # Next.js configuration
├── docker-compose.yml # Full-stack local development
├── render.yaml # Production deployment configuration (Render.com)
├── QUICKSTART.md # Quick start guide
└── README.md
For detailed step-by-step instructions, see QUICKSTART.md
TL;DR:
# 1. Clone the repo
git clone <your-repo-url>
cd render-meeting-notes-agent
# 2. Create .env file with your API keys
cat > .env << 'EOF'
ASSEMBLYAI_API_KEY=your-key-here
OPENAI_API_KEY=sk-your-key-here
OPENAI_MODEL=gpt-4o-mini
BACKEND_PORT=3100
FRONTEND_PORT=3000
EOF
# 3. Start everything
docker compose up -d
# 4. Open http://localhost:3000This starts:
- ✅ Flask backend API (port 3100)
- ✅ Next.js frontend UI (port 3000)
- ✅ Browser-based audio recording ready to use
Start all services:
docker compose up -dStop all services:
docker compose downView logs:
# All services
docker compose logs -f
# Specific service
docker compose logs -f backend
docker compose logs -f frontendRebuild after code changes:
docker compose up -d --build1. Docker port conflicts:
# Check what's using the port
lsof -i :3100 # or :3000
# Change ports in .env file or docker-compose.yml2. Backend connection errors:
# Ensure backend is running
docker compose ps
# Check backend logs
docker compose logs backend3. AssemblyAI API errors:
- Verify your API key is valid at https://www.assemblyai.com/
- Check your AssemblyAI account has credits
- Ensure API key is properly set in
.envor environment variables
4. OpenAI API errors:
- Verify your API key is valid at https://platform.openai.com/api-keys
- Check your OpenAI account has credits
- Ensure correct model name in configuration (e.g.,
gpt-4o-mini)
5. Frontend can't reach backend:
- For local dev: Frontend should connect to
http://localhost:3100 - For Docker: Check
NEXT_PUBLIC_API_URLindocker-compose.ymlbuild args - For Render: Services are auto-linked via
render.yaml
Getting more help:
- Check service logs:
docker compose logs <service-name> - Verify all environment variables are set correctly
- Ensure Docker containers are healthy:
docker compose ps - See detailed troubleshooting in
backend/README.md
- QUICKSTART.md - 🚀 Get started in 5 minutes with Docker Compose
- ARCHITECTURE.md - 🏗️ System architecture and design decisions
backend/README.md- Backend API documentationfrontend/README.md- Frontend component documentation
Contributions are welcome! Please feel free to submit a Pull Request.
MIT