How I Built a Meeting Memory System That Never Forgets

Matthias Heim · 2025-12-30

A client asked what we decided about auth flow 3 months ago. I answered in 8 seconds. Here's the system behind it.

"What did we decide about the auth flow 3 months ago?" My client asked during a call. I typed the question into Claude, and 8 seconds later had the exact answer: with the date, who said it, and the reasoning behind the decision. No searching through notes. No scrolling through Slack. Just the answer.

The Problem

Meeting context disappears. You have a great discussion, make decisions, assign action items, and two weeks later, nobody remembers the details. I was a copy-paste monkey between Otter.ai and Claude, manually feeding transcripts into conversations to get answers about past meetings.

Decisions made in meetings vanish within days

Action items fall through the cracks

Context gets lost between calls: same discussions repeat

Manual transcript searching is slow and unreliable

What I Tried First

Before building this system, I tried the obvious solutions:

Better note-taking: inconsistent. Some meetings got detailed notes, others got nothing. Depends entirely on discipline in the moment.

Otter.ai / Fireflies: good transcription, but your data is locked in their system. For a Swiss healthcare client, that's a non-starter. Data sovereignty matters.

Manual summaries in Notion: time-consuming, always behind, and searching across months of notes is painful.

The Architecture That Works

After months of iteration, I landed on a five-component pipeline. Each piece does one thing well.

Recording

A macOS menu bar app. One click starts recording both system audio and microphone. No browser extensions, no meeting bot joining your call. Works with Zoom, Teams, Google Meet, phone calls: anything that makes sound.

Transcription

Whisper running locally on my machine. Speaker diarization identifies who said what. No audio ever leaves the computer. The entire transcription pipeline runs on-device, critical for clients in regulated industries.

Analysis

LLM processing via Gemini Flash through n8n. The transcript gets broken down into: summary, action items, decisions made, open questions, sentiment analysis, and topic tags. Structured output, every time.

Storage

PostgreSQL with pgvector for semantic search. Both raw transcript chunks and structured analysis are stored with embeddings. This means you can search by meaning, not just keywords: "discussions about authentication" finds results even if nobody used that exact word.

Retrieval

An MCP server connecting directly to Claude. Ask a question in natural language, get an answer with source attribution: which meeting, which speaker, what date. No extra UI needed, it lives right where I already work.

The Privacy Piece

This was non-negotiable, especially for Swiss healthcare clients:

No audio leaves the computer: Whisper runs 100% locally

Only structured text output goes to PostgreSQL on controlled infrastructure

No third-party transcription services in the loop

Full control over data retention and deletion

When a client asks where their meeting data lives, the answer is simple: on infrastructure we control, processed on-device.

What Changed

The day-to-day difference is significant:

Meeting prep takes 2 minutes: ask "what happened in my last 3 calls with Client X?" and get a complete briefing

Follow-ups don't slip: every action item is captured and searchable

Full context in every call: I can reference specific decisions from months ago with confidence

Onboarding new team members is faster: they can query the entire meeting history for a project

Rough Edges (Honest Assessment)

This system works well, but it's not polished software. Here's what's still rough:

UI is bare-bones: it's a menu bar app and a CLI. No fancy dashboard.

Speaker diarization is about 80% accurate: good enough for search, not perfect for attribution.

n8n needs nudges on long transcripts: anything over 90 minutes sometimes requires manual re-processing of chunks.

Initial setup takes a weekend: Whisper, PostgreSQL, n8n, MCP server all need configuration.

Build Your Own

You don't need to replicate my exact setup. Start simple and expand. Here are the components:

Local transcription: noScribe (free, open source) or Whisper directly

Storage: PostgreSQL + pgvector (free, handles semantic search)

Processing: n8n (self-hosted, visual workflow builder)

Retrieval: MCP server (connect to Claude or any LLM client)

Start with just local transcription. Even without the full pipeline, having searchable transcripts of every meeting changes how you work.

How we work · Work · Insights