Services Work How I Work Discuss your project

Meeting notes that show their sources.

Overtalk is my own desktop app. It records meetings, transcribes them on your machine, and links every decision in its notes to what was said.

Product
Overtalk, a local-first meeting notebook overtalk.io · Source on GitHub
Started from
A fork of Meetily MIT, © 2024 Zackriya Solutions
My role
Sole engineer, since September 2026
Status
In development Linux tested; no signed release yet

What Overtalk does

Overtalk records your microphone and call audio, or imports a recording, without an assistant joining the call. It transcribes with local speech models, separates the speakers, and writes notes you can edit. Decisions and actions point to the passage they came from, and you can ask questions across every meeting you have saved.

It started on 30 September 2026 as a fork of Meetily, an open-source meeting recorder. Its audio capture and parts of its Rust service still come from there. The work below is what I built after the fork; by 20 October, about 28% of the source lines were still identical to the upstream code.

The real native interface running a synthetic meeting. Playback follows the transcript, then the notes open with their decisions and actions beside them. View the source (opens in a new tab)

What the product needed

Notes you can check

A summary that can’t show where it came from is a liability when the meeting was about money, hiring or a client. Every point had to lead back to what was actually said.

Private by default

Meeting audio is some of the most sensitive data a company has. Recording, transcription and notes had to work without a cloud account, and the heavy speech stack that makes that possible could not be allowed to reach the network or read credentials.

An interface that feels native

The inherited Tauri web view felt slow and never quite like a desktop app. A meeting notebook stays open all day, so the interface had to be fast and native, from one codebase for Linux, Windows and macOS.

Knowing when it improves

Speech and summary models change constantly. Without a benchmark, every model swap is a guess about whether transcripts and notes got better or worse.

What I built

The native app and the retained web interface both call one Rust service, so each feature’s rules live in one place. The heavy and risky parts run as separate, restricted processes.

The native desktop app talks to a Rust meeting service over a typed protocol. The service runs a sandboxed speech worker, summary models that are local by default, and opt-in integrations.
One Rust service sits behind the interface and runs the speech worker in a sandbox. Highlighted parts were built after the fork. A simplified view. View full diagram (opens in a new tab)

Transcription in a sandbox

Speech recognition runs in a separate Python worker inside an OS-enforced sandbox, with no network, no credentials and no access to the app’s database. The worker stays loaded between jobs, so retranscribing a passage doesn’t reload the model, and you can start recording while the models are still downloading.

A native interface

I replaced the inherited web view with a native Slint interface and a Rust controller, now the default. Slint is fast and memory-safe, and it targets Linux, Windows and macOS from one codebase. Speaker lanes, the waveform timeline and playback that follows the transcript are all native.

Overtalk transcript view: three named speakers with colour-coded audio lanes on a timeline, the transcript below, and a decision with its source quotes on the right
The transcript view: named speakers, their audio lanes, and a decision traced to the passages behind it. Synthetic meeting. View full screenshot (opens in a new tab)

Notes that cite their source

Every decision and action in the notes links to the passage it came from. Select one to read or play exactly what was said before you rely on it. Questions across the whole library come back with the same kind of source passages, so an answer is never more than one click from its evidence.

Overtalk notes view: editable notes with decisions and action items, and a decisions and actions panel where each item links to its source
Notes stay editable. Each decision and action keeps a link to its source passage. Synthetic meeting. View full screenshot (opens in a new tab)

Context, with consent

Projects group meetings, people and vocabulary. Overtalk files new meetings into their project and prepares a brief before the next one. Anything it learns from earlier meetings needs an exact source and your approval. Voice memory recognises only people whose consent it has recorded, and uncertain matches stay unnamed.

Follow-through with a review step

A CLI, an MCP server and a local API let other tools and AI assistants work with your meetings. Each one is off until you grant it permission, and any change Overtalk prepares for another tool waits for your review before it’s sent.

Overtalk library: a search across meetings returns matching transcript passages, with the selected passage shown in context and a button to open the meeting at that moment
The library: search every meeting or ask a question, then open the passage in context. Synthetic meetings. View full screenshot (opens in a new tab)

Evaluation and packaging

I built meetingbench, a set of 200 synthetic multilingual meetings for scoring transcripts and notes, so a model change is measured rather than guessed. Linux builds ship as a .deb and an AppImage with checksums, and a Flatpak manifest is ready.

What changed

The inherited Tauri web view became a native Slint app, now the default. Retranscribing no longer reloads the speech model each time: a cold load takes about 4.7 s, then warm clips take 0.10–0.15 s. Every decision and action in the notes now links to its passage, and a test set of 200 synthetic multilingual meetings scores transcripts and notes by difficulty.

How these were measured

Speech latency
Qwen3-ASR 1.7B in BF16 on an RTX 5090 Laptop GPU limited to 85% of its compute, using synthetic clips. Loading the model cold took 4.7 s; warm clips took 0.10–0.15 s. In the packaged app, an 8.8-second recording imported cold in 13.2 s and was retranscribed warm in 0.7 s. These figures measure start-up and caching, not general meeting performance.
Accuracy
No accuracy figure is claimed. The benchmark’s 200 meetings are synthetic and their reference transcripts haven’t been independently validated, so it is used to compare model changes, not to certify quality.
Code origin
On 20 October 2026, about 28% of non-blank source lines were identical to a line in the upstream Meetily file of the same name. Moved or renamed code isn’t matched, so treat it as an estimate.
Platforms
Linux is the tested desktop platform. Windows and macOS build from the same code but haven’t been validated on real hardware, and there is no signed release yet.

How I built it

Overtalk is my own product and I am its only engineer. I built it with AI coding agents as part of my everyday workflow; the product decisions, architecture, evaluation design and final review are mine.

Product and interface
Decided what a trustworthy meeting notebook needs, and designed the native interface around it.
Architecture
Split the app into a native front end, one Rust service and restricted worker processes.
Speech pipeline
Local transcription, the sandboxed worker and its warm lifecycle.
Grounded notes
Source links for every decision and action, and answers that cite passages.
Privacy and consent
Local-first defaults, opt-in providers and integrations, and consent before remembering a voice.
Evaluation
The meetingbench harness and the rules for what its numbers may claim.
Packaging
Linux .deb and AppImage builds with checksums.

Need an assistant like this?

I build AI assistants that work from your own data, show where every answer came from, and ask before they act. The AI Assistant Pilot puts one on your data, in staging, in two to three weeks.