A NestJS backend for real-time meeting transcription, AI-powered Q&A, and calendar integration.
-
Real-time Transcription - Ingests and processes live meeting transcripts
-
AI-Powered Q&A - Ask questions about meetings using RAG (Retrieval-Augmented Generation)
-
Automatic Summaries - Generates meeting summaries with Google Gemini
-
Calendar Sync - Google Calendar integration with push notifications
-
Calendar Provider Auth - Google OAuth support (Zoom, Microsoft planned)
-
Real-time Updates - Server-Sent Events for live transcript and status updates
| Category | Technology |
|----------|------------|
| Framework | NestJS 11 |
| Database | PostgreSQL + TypeORM |
| Vector DB | Qdrant |
| AI/ML | Google Gemini, Xenova Transformers |
| Auth | Firebase Admin |
| Worker Threads | Piscina |
-
Node.js 18+
-
PostgreSQL 12+
-
Qdrant instance
-
Firebase project
-
Google Cloud project (OAuth + Gemini API)
# Install dependencies
npm install
# Copy environment file
cp .env.example .env
# Configure environment variables (see below)
# Run database migrations (if applicable)
# Start development server
npm run start:dev
# Server
PORT=8001
NODE_ENV=development
CLIENT_URL=http://localhost:3000
# PostgreSQL
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=password
DATABASE_NAME=proxyai
# Firebase
FIREBASE_PROJECT_ID=your-project-id
FIREBASE_CLIENT_EMAIL=[email protected]
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
# Qdrant
QDRANT_URL=http://localhost:6333
QDRANT_API_KEY=your-api-key
# Google Gemini
GEMINI_API_KEY=your-gemini-key
# Google OAuth
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REDIRECT_URI=http://localhost:3000/oauth/google
GOOGLE_CALENDAR_WEBHOOK_URL=https://your-server/webhook/calendar
# Attendee Bot Service
BOT_SERVICE_API_KEY=your-bot-key
BOT_SERVICE_URL=https://app.attendee.dev/api/v1/bots
src/
├── auth/ # Firebase authentication
├── meetings/ # Meeting management & Q&A
├── transcripts/ # Transcript buffering & processing
├── rag/ # Vector storage & RAG Q&A
├── gemini/ # Summary generation
├── providers/ # OAuth & calendar integration
├── webhook/ # Bot & calendar webhooks
├── workers/ # Embedding worker threads
├── users/ # User management
├── entities/ # TypeORM entities
└── config/ # Configuration files
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /meetings | List meetings by status |
| POST | /meetings/sync | Sync meetings from calendar |
| GET | /meetings/:id/summaries | Get meeting summaries |
| GET | /meetings/:id/transcript-segments | Get transcript segments |
| GET | /meetings/:id/qa-history | Get Q&A history |
| POST | /meetings/:id/ask-question | Ask a question about a meeting |
| GET | /meetings/sse | SSE stream for real-time updates |
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | /webhook/bots | Bot transcript & state updates |
| POST | /webhook/calendar | Google Calendar notifications |
Meeting Start
↓
[Webhook: Attendee Bot Joins and Records]
↓
[Webhook: transcript.update]
↓
TranscriptsService (1-minute buffer)
↓
┌─────────────────────────────┐
│ Background Processing │
├─────────────────────────────┤
│ • RAG Vector Storage │ ← Worker Pool (embeddings)
│ • Summary Generation │ ← Gemini API
└─────────────────────────────┘
↓
[SSE] → Frontend Updates
npm run start:dev # Development with hot reload
npm run start:prod # Production mode
npm run build # Compile TypeScript
npm run lint # ESLint
npm run test # Unit tests
npm run test:e2e # End-to-end tests
| Entity | Purpose |
|--------|---------|
| User | Firebase-authenticated users |
| Meeting | Calendar events with bot status |
| TranscriptEntry | Batched transcripts (1-min groups) |
| TranscriptSegment | Individual speaker segments |
| Summary | AI-generated summaries |
| QAEntry | Q&A history with sources |
| Provider | OAuth credentials & watch state |
Connect to /meetings/sse?userId=<userId> for:
-
connected- Connection confirmation -
heartbeat- Keep-alive (every 15s) -
meeting_status_update- Status changes -
transcript_update- New transcript segments -
summary_update- Generated summaries
| Service | Purpose | Status |
|---------|---------|--------|
| Google Calendar | Event sync & webhooks | Active |
| Google Gemini | Summaries & Q&A | Active |
| Qdrant | Vector search | Active |
| Firebase | Authentication | Active |
| Attendee Bot | Transcription | Active |
| Zoom | Calendar sync | Planned |
| Microsoft | Calendar sync | Planned |
-
Create a feature branch from
main -
Make your changes with clear commit messages
-
Test thoroughly in development environment
-
Submit a pull request with detailed description
For issues and questions:
-
Create an issue in the repository
-
Contact the development team