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.
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.
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.
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.
| Layer | Technology | Why it was chosen |
|---|---|---|
| Record and files | Supabase Postgres and Storage | Stores people, conversations, raw payloads and review decisions; public client access is denied by default. |
| Meeting import | Fathom API | Brings in full transcripts and participants using stable source IDs. |
| Chat import | Read-only WhatsApp bridge | Built for messages, files and voice notes, with batches about every minute. Paused pending reconnection. |
| Assistant | Hermes on Telegram · OpenRouter | Answers questions on his phone, using a fixed set of search and write actions instead of open access to the database. |
| Related-idea search | GBrain · PGLite · OpenRouter embeddings | A separate search service on the server finds related ideas. It can be rebuilt from the main database. |
| Review dashboard | Next.js 15 · React 19 · Tailwind · Vercel | The people list, source history and name review all work on a phone. |
| Access | Signed session cookie · server-side proxy | The browser gets a session cookie, not database keys or API tokens. |
| Scheduling | systemd timers · health checks | Runs imports and alerts Telegram when a monitored process stops. |
| Tests | pytest | Checks contracts, imports, review decisions, the dashboard API and health monitoring. |
4 engineering decisions that matteredThe problem, what was done, and what it changed.
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.
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.
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.
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
Or write to care@brownmind.com