987 recorded meetings turned into a searchable list of 563 people

In the pilot, the CEO could ask an assistant who he knew and what they had talked about. Each answer links back to the meeting it came from. This pilot brought together 987 recorded meetings and 563 people, before production handover.

Client: A digital agency CEOAgencies · Relationship selling

CreditDesigned and built by our founder, as lead developer for a partner agency's CEO.

Follow one contact

From a name check to a suggested introduction

Follow one contact from a name check to a draft introduction that waits for the CEO.

Relationship record

Jordan Lee and Jo Lee are linked only after the CEO chooses Same person. Meeting A records a website need; meeting C records Taylor Morgan's offer. The introduction remains a draft. Sending needs separate approval.

A similar name is not treated as a match. Only identical names link automatically. Other pairs wait for review.

About A digital agency CEO

Finding details about a contact meant searching old recordings and separate chats.

The CEO meets clients, suppliers, contractors and other founders. A good contact is often worth introducing to someone else. But the details were only in his memory, in old recordings and in separate WhatsApp chats. Keeping a contact list up to date by hand would have been another job.

Client
A digital agency CEOHe still does much of the selling himself
Business
A digital agency selling retainers
Sales process
Conversations, referrals and repeat relationships
Source
Recorded meetingsA WhatsApp connection was built and tested, then paused until WhatsApp is reconnected.

The problem

Useful details about contacts sat in recordings nobody reopened

  • Old recordings were not searched

    The answer existed, but finding it meant listening to old meetings again.

  • One person appeared under several names

    A short name in one call and a full name in another split the same person's history in two.

  • A need and an offer were in different calls

    One contact needed a web designer and another contact was one. His meeting tool could only search inside each call.

  • He had no time to type in contacts

    A system that needed the CEO to enter every contact by hand would not get used.

What was built

Meetings are added automatically, and the CEO makes the decisions

  • Answers that link back to the meeting

    An assistant on Telegram, a messaging app, searches people and conversations. Each answer lists the meetings it came from. It says “no match” when nothing fits.

  • New meetings are added every 30 minutes

    Transcripts and the people in each call come from Fathom, the CEO's meeting recorder. Each meeting keeps one ID, so a repeat import updates it instead of adding a copy.

  • The CEO decides about similar names

    A review page that works on a phone shows two buttons: “Same person” or “Different people”. His answer is saved, and a link can be undone.

  • Suggested introductions show their evidence

    A morning brief and a separate list suggest people who could be introduced. The CEO reads the quotes behind each one, approves or dismisses it, and can ask for a draft message.

Control and safety

The software searches and drafts, but the CEO decides

Searching and drafting run on their own. Sending, deleting and scheduled jobs need the CEO's clear yes. The assistant does not send an introduction just because it finds a possible match.

  • Similar names are not linked automatically. Only identical names link automatically. Every other near-match waits for the CEO, because earlier nickname rules linked the wrong people.
  • Links can be undone. People are linked, not merged or deleted. The CEO can unlink them or remove a “different people” decision.
  • An introduction needs a quote first. An introduction can be reviewed only when at least one quote from a stored meeting or chat is attached. Text taken from meetings is treated as evidence, never as instructions to the assistant.
  • The browser does not receive database keys. The review page needs a password and a signed session. Public access to the database is blocked, and database keys never reach the browser.

For technical readers

How the system works

Meeting transcripts feed one database of people, conversations and sources. The name review page and the search both use that database. The Telegram assistant can find related ideas, and every result links back to a stored source.

Recorded meetingsFathom · every 30 minutes
WhatsApp bridgeBuilt and tested · paused
People + conversationsSupabase database and files
Review name matchesCEO decides near-matches
Find related ideasSearch rebuilt from the record
Answer with sourcesTelegram + review dashboard

Dashed lines show supporting connections, or parts that are paused or not yet built.

In more detail

Technology used (9 parts)Each part of the system, and why it was chosen.
LayerTechnologyWhy it was chosen
Record and filesSupabase Postgres and StorageStores people, conversations, raw payloads and review decisions; public client access is denied by default.
Meeting importFathom APIBrings in full transcripts and participants using stable source IDs.
Chat importRead-only WhatsApp bridgeBuilt for messages, files and voice notes, with batches about every minute. Paused pending reconnection.
AssistantHermes on Telegram · OpenRouterAnswers questions on his phone, using a fixed set of search and write actions instead of open access to the database.
Related-idea searchGBrain · PGLite · OpenRouter embeddingsA separate search service on the server finds related ideas. It can be rebuilt from the main database.
Review dashboardNext.js 15 · React 19 · Tailwind · VercelThe people list, source history and name review all work on a phone.
AccessSigned session cookie · server-side proxyThe browser gets a session cookie, not database keys or API tokens.
Schedulingsystemd timers · health checksRuns imports and alerts Telegram when a monitored process stops.
TestspytestChecks contracts, imports, review decisions, the dashboard API and health monitoring.
4 engineering decisions that matteredThe problem, what was done, and what it changed.
  1. Stop guessing from nicknames

    Early nickname and surname rules linked some people incorrectly. That automatic tier was retired. Only identical names now link automatically; other pairs go to the CEO's queue.

  2. Check imports on real meetings

    Empty polls looked healthy while imports failed. The timer could not find its database credentials, and a bulk insert mixed incompatible row shapes. Both were fixed, then a full run was verified on the server.

  3. Make search replaceable

    Search uses a separate copy of the database records, updated as records change. Each result links back to a stored meeting or chat. That search copy can be rebuilt without changing the original records.

  4. Keep retrieved text out of the instructions

    Meeting and chat text is wrapped as untrusted evidence before summarising. Count questions use actual totals and a “has more” flag, rather than the length of a capped list.

Testing and build recordHow it was tested, and the build by the numbers.

Quality and reliability

  • The source records 176 automated tests across 14 files, covering imports and failure cases, person-link vetoes, the dashboard API, briefs, WhatsApp batching and health checks.
  • Dated end-to-end runs traced a marker message from its source through the database to search.
  • Stable source IDs let imports update existing meetings and messages instead of adding duplicates.
  • A health check monitors importers, the WhatsApp worker and search sync, with Telegram alerts when a process stops.

By the numbers (build)

  • 987 meetings and 584,766 transcript lines imported into a record of 563 people, covering about 30 months.
  • Five spellings of one contact were linked to one combined history of 52 meetings. This is a recorded pilot example, not a rule for automatic name matching.
  • 43 database tables and views, 10 migrations and a 12-endpoint read API.
  • 1,551 pages and 6,548 chunks in the search layer at first load.
  • 62 commits from 11 May to 30 June 2026; about 5 weeks to the dashboard and about 2 weeks to the Telegram assistant on its server.

Is it a fit?

Could this work for your team?

  • You still sell through relationships. Your agency, consultancy or B2B company wins work through conversations and referrals.
  • Your team asks who knows whom. The answer is often in one person's memory or an old meeting recording.
  • You introduce clients and partners. You want the evidence behind a possible connection before putting your name to it.
  • Your sources and access rules differ. The setup can be adapted to your customer system, email or calendar, with rules for who can ask and what they can see.

Who did you meet that you should speak to again?

Conducted by Apurva · Not a sales call