Peacedone
Chrome extension · call notes · Alexey Sukhariev · Product designer & design engineer
A Chrome extension that takes notes on Google Meet, Teams and Zoom calls from the live captions the call already shows — who said what, with timestamps — and saves them as a Markdown file on your computer. No audio, no cloud. Built alone: the extension, the mascot, the store listing, a voiced promo film and the open-source release.
Notes from captions the call already has
Peacedone is a Chrome extension that takes notes on video calls. It does not record audio. Google Meet, Microsoft Teams and Zoom already run speech recognition for their live captions, so Peacedone reads that caption text from the page and saves a transcript — who said what, with timestamps — as a Markdown file on the user’s computer. Nothing is uploaded anywhere: the extension makes no network requests at all. I built it alone in October 2026, and the scope ran past the code: the mascot that doubles as the status indicator, three builds from one source, the Chrome Web Store listing and privacy policy, a voiced promo film and a public release on GitHub.
Why captions are not a transcript
Live captions are made to be read once, at the moment they appear, and almost nothing about them is meant to be kept. A line is rewritten in place while the recogniser changes its mind — “a short pass” becomes “a short task” a second later. Lines grow word by word, get replaced, scroll away, and two speakers interleave. Every platform builds the caption area differently, captions are off by default, and they only understand the language set in the call: the wrong one produces confident gibberish. Copy what is on screen and you get duplicates, half-sentences and a record that disagrees with itself.
One click, and only on purpose
Join a call in the browser and a card appears on the page: Record this call? — with the folder and the language of the call already filled in. One click on Start and three things change at once: the card becomes a small pill on the page, the toolbar icon switches to its recording version, and the popup shows the time and the number of lines. Leave the call or press Stop and the file is saved. Recording never starts by itself. A transcript of a conversation should begin with a decision, and the card turns that decision into one click instead of something to remember. When recording starts, Peacedone reminds the user to tell the others, with a sentence they can say as is. Captions are switched on automatically, but only through controls that say they turn captions on — never one that says off or hide.
One line, not three
The core of the extension is the part that decides when two pieces of text are the same line. Each caption line is followed by its element and by how its new text relates to the old one: it grew, it is contained in the old text, it is anchored on the same start, it overlaps, or it was revised. Growth extends the line, a revision replaces it, and a new element that continues a recent line within 20 seconds is merged into it instead of starting a new one. Inside a line, a pause of 2.5 seconds or more starts a new timestamped entry, so a long turn reads as several dated sentences rather than one wall of text.
The file
The output is plain Markdown, named by date, time, platform and company: a header with the date, platform, the user’s own tag, the participants as the captions named them, the duration, and a line that says plainly where the text came from — machine speech recognition, where names, numbers and terms can be misheard. Then the conversation, one heading per turn, a timestamp on every line. The raw caption lines are kept beside it as JSON. It reads well as it is and goes into any notes app, wiki or AI assistant without conversion.
The call’s language, set for you
Captions only recognise the language the call is set to, and the platforms do little to help: Meet’s automatic detection covered eight languages at the time, without Russian or Ukrainian, and only suggests a change; Teams leaves it to a paid tier; Zoom is manual. So the user picks the language once, before Start, and Peacedone sets it inside the call through the platform’s own menus. It finds each step by its label — in English, Russian or Ukrainian interfaces — trying several menu paths per platform in order until one reaches the list. When Meet offers its own “Change language”, Peacedone accepts it. Fifteen seconds in, it checks the alphabet of what is arriving, and if Cyrillic was expected and Latin is coming in, or the other way round, a warning appears on the page with a button that fixes it.
Nothing gets lost
A call is the worst possible moment to lose notes, so the session is written to the browser’s local storage every two seconds. Reload the tab or let it crash, and a session less than ten minutes old resumes where it stopped instead of starting a new file. Close the tab mid-call and the background worker saves what was recorded. The same rule shaped the popup: before Start, the fields belong to the user; during a recording they mirror the session — two early bugs came from the popup refreshing a field while someone was typing into it.
Saving where the user wants
A browser extension cannot write to an arbitrary folder. The file-system permission I tried first was lost the moment its settings tab closed, so the folder button silently stopped working. The shipped answer has two levels. By default every transcript lands in Downloads › Peacedone, with nothing to install. To save anywhere else, the popup offers a one-time helper — a small setup that takes about ten seconds and needs no administrator rights — after which Choose folder opens the ordinary Windows folder dialog, in front of the browser. The Chrome Web Store build drops the helper altogether, and with it two permissions, so the published version asks for as little as possible. All three builds come out of one source with one command, and the shared one fails to build if a personal name, path or address survives in any file.
The status is a character
Peacedone is a red pom-pom with a face, and it is the indicator rather than a decoration. Waiting, it floats and blinks at irregular intervals; recording, it writes in a notebook. All four frames come from one render, so the face is never redrawn between states, and it floats without a shadow. The interface around it stays light and nearly wordless: the popup says one line about the current state — “Ready to record your call”, “Recording your call · 3 lines” — and everything else is a field or a button.
How it was checked
Calls cannot be summoned on demand, so the extension is tested against mock pages of Meet, Teams and Zoom with a simulator that rewrites captions the way the platforms do — growing lines, revisions, speaker changes, a wrong-language mode. Nine headless scenarios run on them: the popup on an ordinary website, nothing recorded before Start, the fallback to Downloads, Teams, Zoom, automatic captions on and off, starting from the card, setting and checking the caption language, and the helper offer. The merging logic has its own unit tests. Beyond the mocks, it was run on live Meet calls in Russian and English.
The launch was part of the build
The Chrome Web Store needed its own kit: listing copy, screenshots, a privacy policy, a justification for every permission and a promo video. The film is 34 seconds of motion graphics built as a web page and rendered frame by frame, voiced with an open-source speech model running locally. The model read the name as “Peace Don’t”, so the script spells it the way it should sound, and each line was generated in several takes — the right one chosen by transcribing the takes and measuring the pitch, so that “Great call” lands as a statement and not a question. The same release went to GitHub under the MIT licence, with install instructions in English, Russian and Ukrainian.
Where it lives, and what is still open
Version 0.5.0 was submitted to the Chrome Web Store on 22 October 2026 and is in review; until then it installs from GitHub. The open edges, stated plainly: live calls were tested on Meet, while Teams and Zoom are covered by the mock pages, and their menus can change under the label matching; the folder helper is Windows only; desktop apps are invisible to a browser extension, so the call has to run in the browser; and the transcript is only as good as the platform’s own speech recognition.
← Alexey Sukhariev