How a voice note becomes a searchable network
FOLKO is a personal CRM built around voice notes. After you meet someone, you record what they told you; FOLKO transcribes it, pulls out the facts, and later answers questions about your network — including about people you have not met yourself, because your contacts mentioned them. The database is on your phone.
Four steps, and you only do the first one
You talk, 60–90 s
One button on the home screen starts the recorder: a waveform, a timer, stop and cancel. You say who you met, where, and what they told you. Spoken register is the expected input — the recordings it was measured on are exactly that.
The audio is transcribed
The file goes through our proxy to a speech-recognition service and comes back as text. The proxy exists for one reason: so that API keys are not compiled into the app, where anyone who unpacks the .apk would find them. The audio is never written down on our side: it exists only for the seconds the request is open. On the phone it is deleted too, as soon as the note is saved — only the text stays.
The text becomes records
The transcript goes to Claude and comes back as structure: the person, their role, company and city; the facts; the third people who were mentioned; the promises in both directions; the next action; the tags. Each fact is written twice — as it was said, and normalised. That second copy is what makes search work later.
You approve or fix it
The review screen shows everything the model produced. The person — name, role, company, city — you can edit; the facts and the mentions you can read, and the low-confidence ones are marked. Nothing is saved until you say so — that is a step in the loop, not a setting you can turn off. Every saved record also carries the model and prompt version that produced it.
Which means a bad extraction is a correctable one: when the extraction gets better, we know exactly which records were made by the version that was worse.
The mention is the part no other app has
A mention is a third person who came up in a conversation and whom you have never met. It is a record of its own, in its own table, with the same standing as a contact. It can have no surname, no number and no company — “his wife works at a bank” is a valid mention, and it is enough to answer a question about who works at a bank.
A sales CRM stores deals, and this person will never be a deal. LinkedIn stores the graph, and it will never store what was said. There is no field anywhere for “Mantas’s brother, handles contracts, Klaipėda” — which is why the useful half of a conversation has never been written down.
Text search doesn’t work in the way people talk
Text search compares characters. People don’t repeat characters — they use a synonym, a paraphrase, or the same word with a different ending. So the word in the note and the word in your question almost never match, and the search that works perfectly on your own writing fails on somebody else’s speech.
| THE NOTE SAID | YOU ASKED | TEXT SEARCH | FOLKO |
|---|---|---|---|
| “handles contracts” | “lawyer” | no match — paraphrase | found |
| “attorney” | “solicitor” | no match — synonym | found |
| “teisininkas Klaipėdoje” lawyer, in Klaipėda, locative case | “advokatą Klaipėdoje” attorney, in Klaipėda, accusative case | no match — synonym and case ending | found |
| “his brother” | “who knows a lawyer?” | nothing to match — he was never a contact | found, with the chain |
| “werkt bij een advocatenkantoor” works at a law firm | “lawyer” | no match — compound word | found |
| “es abogada” she is a lawyer, feminine | “abogado” lawyer, masculine | no match — gender ending | found |
Spanish and Dutch are planned, and those two rows show what the approach has to handle, not what has been measured. Only Lithuanian and English have been measured, and English on three recordings.
Two layers, not one
First, at extraction time, every fact gets a normalised form beside the spoken one: “Klaipėdoje” becomes “Klaipėda”, “dirba teisininku” becomes “teisininkas”. The profession itself is left as it was said. Second, at search time, a language model reads the question against those facts — and that is the layer that knows “advokatas” and “teisininkas” are the same job. No stemmer, no synonym list.
What leaves the phone when you ask
The names, roles, companies and cities of your people, their facts and the mentions — assembled on the phone and sent with the question. Not your transcripts and not your audio. It is used to produce the answer and not kept: there is no contacts table on the server, so there is nowhere for it to be written down.
What it will not do
- It does not read your email, calendar or LinkedIn
- It does not sync your phone’s address book
- It does not share anything with a team — there is no team
- It does not run without a network, because the models are not on the phone
The LinkedIn part is not a decision, it is an API: searching people by name and pulling profile data are not endpoints that exist. What works is the QR card, which often already carries a LinkedIn URL, and a button that opens a search. Automatic matching will not happen.