MeetMemo

MeetMemo client logo

An enterprise meeting note-taker with a distributed bot fleet, a custom auto-scaling orchestrator, accurate diarised transcription, and a chat-with-your-meetings layer. Shipped with live customers.

Status
Shipped
Context
AI meeting notes, transcription, and conversational search
Role
Creator and lead engineer. Built end-to-end under a partner company's umbrella.

Bill of materials

  • Node.js
  • Python
  • Docker
  • Redis
  • Postgres
  • Whisper
  • FFmpeg

MeetMemo is an AI meeting assistant — it joins your Zoom, Meet, or Teams call, records, transcribes, diarises, and produces templated summaries you can chat with afterwards. There’s a lot of product space here already (Fireflies, Read.ai, Otter), so the thing that matters isn’t the category but the engineering underneath. I built the whole stack — bot fleet, orchestration, transcription pipeline, memory layer, dashboards, DevOps.

The bot fleet

A meeting bot sounds simple until you look at the edge cases. The bot is a headless browser in a container that navigates to a meeting URL, handles the join flow (waiting rooms, host approvals, permission dialogs, auto-denied joins, spontaneous host-left-the-call states), starts recording screen + audio, and keeps track of who’s speaking by continuously reading the DOM of the active participant tile. Each of those steps has a dozen ways to fail, and they fail differently across Zoom, Meet, and Teams.

The orchestrator

Bots run on a pool of nodes. I built an orchestrator that distinguishes between two node types: perma-nodes (always on, statically scaled to baseline capacity) and temp-nodes (spawn above a threshold, drain and terminate when demand falls). Temp-node spawn time is optimised to about 55 seconds from cold, with an additional pre-warm buffer so calls never queue behind a cold start. The scheduler load-balances joins across the pool and handles bot crashes mid-meeting by re-spawning against a frozen participant state.

Transcription and diarisation

I use Whisper for timestamped transcription but build diarisation on top by correlating the audio timestamps with the bot’s live observation of the meeting UI — which tile is highlighted, when speakers change, who’s muted. This gives diarisation accuracy well above what audio-only speaker-clustering can produce, especially on 4+ person calls. All languages Whisper supports are supported.

Memory and Spaces

The output layer is more interesting than the recording layer. Every meeting is indexed into the user’s Memory — a retrievable, cross-meeting knowledge store. You can chat against a single meeting, against a Space (a user-created group of meetings — a project, a client, a deal), or against your whole Memory. Behind the scenes it’s a RAG pipeline with template-aware summarisation (action items, highlights, decisions, topics), chart generation from numeric content mentioned in calls, and a custom prompt layer that maintains speaker attribution through the retrieval step so the answers cite who said what.

Ops

Calendar sync, org-level team management, subscription billing, usage analytics, webhook integrations. Fully deployed under a partner company’s umbrella with live customers.