An AI-powered meeting intelligence application that records internal audio (Discord, Google Meet, etc.), transcribes it in real-time, and provides AI-powered analysis including summaries, action items, and more.
- 🎙️ Real-time Audio Recording - Capture meeting audio directly from your browser
- 📝 Live Transcription - Get real-time transcripts using Deepgram or OpenAI Whisper
- 🤖 AI Analysis - Automatic meeting summaries, action items, key topics, and sentiment analysis
- 💬 Interactive Q&A - Ask questions about your meetings and get AI-powered answers
- 📊 Meeting Dashboard - View and manage all your meeting recordings
meeting-llm/
├── apps/
│ ├── api/ # Fastify API server with WebSocket support
│ ├── web/ # Next.js frontend application
│ └── worker/ # Background job processor (BullMQ)
├── packages/
│ ├── asr/ # Speech recognition (Deepgram, Whisper)
│ ├── llm/ # LLM integration (OpenAI, Anthropic, Ollama)
│ ├── types/ # Shared TypeScript types
│ └── ui/ # Shared UI components
- Node.js 20+
- pnpm 10+
- Redis (for worker queue) - optional for basic usage
-
Install dependencies:
pnpm install
-
Set up environment variables:
# API cp apps/api/.env.example apps/api/.env # Worker (optional) cp apps/worker/.env.example apps/worker/.env
-
Configure API keys: Edit the
.envfiles with your API keys:DEEPGRAM_API_KEY- For real-time transcription (recommended)OPENAI_API_KEY- For Whisper transcription and GPT analysisANTHROPIC_API_KEY- For Claude analysis (optional)
-
Build shared packages:
pnpm build:packages
-
Start development servers:
# Run all apps pnpm dev # Or run individually pnpm dev:api # API on http://localhost:3001 pnpm dev:web # Web on http://localhost:3000 pnpm dev:worker # Background worker
| Method | Endpoint | Description |
|---|---|---|
| GET | /health |
Health check |
| POST | /meetings |
Create a new meeting |
| GET | /meetings |
List all meetings |
| GET | /meetings/:id |
Get meeting details |
| GET | /meetings/:id/transcript |
Get meeting transcript |
| POST | /meetings/:id/end |
End a meeting |
| POST | /meetings/:id/analyze |
Analyze meeting with AI |
| POST | /meetings/:id/ask |
Ask a question about the meeting |
| POST | /meetings/:id/transcribe |
Transcribe uploaded audio |
Connect to ws://localhost:3001/ws/:meetingId for real-time transcription:
const ws = new WebSocket('ws://localhost:3001/ws/meeting-123')
// Send audio chunks
ws.send(JSON.stringify({
type: 'audio_chunk',
payload: { chunk: base64AudioData },
timestamp: Date.now()
}))
// Receive transcripts
ws.onmessage = (event) => {
const { type, payload } = JSON.parse(event.data)
if (type === 'transcript_segment') {
console.log('Transcript:', payload.text)
}
}- Real-time streaming support
- High accuracy with Nova-2 model
- Speaker diarization
- Best for batch/file transcription
- No streaming support
- Good for post-processing
- GPT-4o for analysis
- Best balance of speed and quality
- Claude for analysis
- Excellent for long transcripts
- Run models locally
- Privacy-focused option
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test
# Lint code
pnpm lint
# Clean build artifacts
pnpm cleanThe web app uses the Web Audio API to capture microphone audio. For capturing system audio (Discord, Google Meet, etc.), you have several options:
- Browser Extension - Use a browser extension that enables system audio capture
- Virtual Audio Device - Route system audio through a virtual microphone
- Electron App - Build a desktop app with system audio capture capabilities
- Frontend: Next.js 16, React 19, Tailwind CSS 4
- Backend: Fastify 5, WebSockets
- Worker: BullMQ, Redis
- ASR: Deepgram SDK, OpenAI Whisper
- LLM: OpenAI, Anthropic Claude
- Monorepo: pnpm workspaces, Turborepo
ISC