Meeting intelligence
Production platform shipped in 6 weeks (Nov 2025 to Jan 2026)
Zeta
Meeting intelligence for Google Meet and Teams. Live transcription with speaker diarization, Gemini summaries, and the notes emailed before anyone asks.
Problem
Meetings on Google Meet and Microsoft Teams leave nothing behind but memory and whoever volunteered to take notes. Transcripts, when they exist, arrive after the fact and never say who said what. Summaries are a manual chore, and the follow-up email is the first thing to slip.
Zeta had to make the record automatic: capture the call as it happens, know who is speaking, produce a summary worth reading, and put it in people's inboxes without a human in the loop.
Approach
A Chrome extension captures the meeting from inside Meet or Teams and streams audio to the backend over WebSockets, so the transcript builds in real time instead of after upload. Transcription and speaker diarization run in workers behind a BullMQ queue on Redis, which keeps the live path responsive while the heavy processing scales independently.
Once a meeting ends, Gemini turns the diarized transcript into a structured summary. Supabase holds auth, meetings, and collections, calendar integration attaches context to each session, and the summary goes out by email automatically. The whole thing runs in Docker on AWS.
Architecture
1. Capture
The extension joins the call inside Meet or Teams and the web app is where meetings live afterward.
2. Stream
Audio flows over a WebSocket into the Node.js API while the meeting is still happening.
3. Process
The API hands each chunk to BullMQ; workers on Redis run transcription and speaker diarization off the live path.
4. Summarize
Gemini reads the diarized transcript and writes the summary. Supabase stores meetings, users, and collections.
5. Deliver
Calendar context is attached, the summary is emailed automatically, and everything runs in Docker on AWS.
Stack
- React
- Node.js
- WebSockets
- BullMQ
- Redis
- Supabase
- Gemini
- Docker
- AWS
Outcome
Zeta went from empty repo to a working production platform in six weeks: live transcription over WebSockets, diarization, Gemini summaries, automated email distribution, calendar integration, collections, and the extension that makes capture one click.
What I'd do differently
Putting the transcription work behind a queue from the first week is what kept the live path stable while everything else was still moving. Next time I would design worker backpressure and retries on day one instead of adding them when the first long meeting exposed the gap.