aikto

A meeting notetaker we run ourselves. Invite it to a Meet, Teams or Zoom call like you'd invite a colleague. It listens, transcribes on our own Mac mini, and leaves you a summary with decisions and action items. Recordings stay on our hardware.

Planning · no code yet · up for team review
For you

How it works

  1. Invite itAdd your aikto address (for example aikto+yourname@…) to the meeting invite. That's the only thing you do.
  2. It joinsAt start time a participant called “aikto (Your name's notes)” asks to join. The host lets it in like anyone else.
  3. It listensIt posts a short recording notice in chat, records audio, and notes who is speaking. Type aikto stop in chat and it leaves.
  4. It writes notesAfter the call it transcribes on the Mac, labels speakers by name, and has Claude write a summary, decisions, action items and chapters.
  5. You read themOpen the aikto page in your browser. Search every meeting, click any line to hear that moment, and ask questions about what was said.
Why

Why build our own

Our data stays oursAudio and transcripts live on a Mac mini we own. Only the transcript text goes to Claude to be summarized, and a meeting can opt out of even that.
Cheap to runRoughly $0.15–0.20 of Claude usage per meeting-hour. The whole team should fit in our existing $100/month of credits.
Built for how we workThe person who invites it owns the notes. Summaries, templates and sharing work the way we want them to.
How we'll build it

The pipeline

Everything runs on one always-on Mac mini at home. Each meeting moves through these stages in order.

Mac mini M2 · 8 GB · home networkone meeting at a time
InboxInbox watcher checks aikto's mailbox for calendar invites, reads the time and the join link, and sees who sent it from the +name tag.
ScheduleScheduler keeps a list of upcoming meetings and handles reschedules and cancellations. It starts the bot a minute before the meeting.
JoinBot a real Chrome window driven by Playwright. It joins the call, records the audio straight from the page, and reads captions to learn speaker names.
ProcessProcessor after the call: Whisper turns speech into text, pyannote works out who spoke when, and Claude writes the summary.
StoreMeeting folder one folder per meeting with the audio, transcript and summary, plus a searchable index.
ReadWeb page the aikto site, reachable at home and, through Tailscale, from anywhere. You log in and see your own meetings.

Platforms

PlatformHow the bot joinsDifficulty
Google MeetAs a guest in a normal Chrome window. Captions give us speaker names. We build this first.Easiest
Microsoft Teams“Continue on this browser”, as a guest or with its own account. Some companies block guests, so it depends on who hosts the call.Medium
ZoomThe browser client first. The official SDK now needs the inviter's Zoom account to authorize it, and the inviter has to be in the call.Hardest

Who owns a recording

One aikto serves the team. Everyone gets their own invite address, and whoever invites aikto owns the notes. You only see your own meetings, plus any a teammate shares with you.

SituationWhat happens
You invite aikto+you@…The bot shows as “aikto (Your name's notes)” and the notes land in your folder.
Two of us invite it to the same callOne bot joins. The first inviter owns the notes and they're shared with the second.
A stranger sends it an inviteIgnored. Only known senders can send the bot to a meeting.
Two of our meetings overlapThe Mac handles one at a time, so the second is skipped and its owner gets a notice. This is an open question below.

Tools we're using

JobChoice
LanguagePython 3.12, managed with uv
Joining callsPlaywright driving a real Chrome window
Speech to textWhisper (whisper.cpp or mlx-whisper), running on the Mac
Speaker labelspyannote, matched to names from the call's captions
Summaries & AskClaude API (Opus 5.5)
Storage & searchPlain folders + SQLite with full-text search
Web pageFastAPI with server-rendered pages
Remote accessTailscale (private network, no open ports)

What it costs

ItemEstimate
Claude, per meeting-hour≈ $0.15–0.20
6 people × 3 h/day × 22 workdays≈ 400 h → $60–80 / month
Transcription and storage$0 (runs on the Mac)
Disk per meeting-hour (audio)≈ 15–30 MB

These are estimates, to check against current pricing. We'll set a hard spend limit on the API key and show spend in the app.

Privacy & consent

aikto always joins visibly under a clear name, and the host can refuse or remove it. It posts a recording notice when it joins and leaves when anyone types aikto stop. Put [no-aikto] in a meeting title and it won't join at all. It only goes to meetings it's invited to and never reads anyone's calendar.

Recording-consent laws vary by country and state. We'll write a one-page team policy and check the rules where our clients are before we roll out.

Milestones

  1. M0
    Project skeletonStructure, config and lint/type checks in place.
  2. M1
    Audio file → notesA real 30-minute recording becomes a clean transcript with speakers and a useful summary.
  3. M2
    Web page v1Browse, search and play back meetings from any device on the network.
  4. M3
    Google Meet botPaste a Meet link and get named notes without touching the Mac.
  5. M4
    Invite by emailAdding aikto to a calendar invite is all anyone does.
  6. M5
    Microsoft TeamsSame flow works on Teams.
  7. M6
    ZoomA Zoom meeting you're in produces notes.
  8. M7
    Ask & polishAsk questions about meetings with answers that link to the exact moment. Spend tracking.
  9. M8
    Team rolloutLogins, sharing, remote access, guides, then a pilot with 1–2 of us before everyone.

What we learned from Fireflies

We studied how Fireflies' web app is put together to learn from the product, not to copy code. Useful ideas we're borrowing: inviting an email address as the trigger, one record per meeting with audio kept separately, keyword overrides in meeting titles (“don't join” / “do join”), a “join now” box for pasted links, and an assistant whose answers cite the exact transcript lines. Even Fireflies uses several speech-to-text vendors chosen by language. For us, one local Whisper model is enough.

Please weigh in

Questions for the team

  1. Which do you use most: Meet, Teams or Zoom? That decides what we build after Meet.
  2. What languages are spoken in your meetings? English only, or mixed with Marathi or Hindi?
  3. Two of our meetings at the same time will happen. Is “second one skipped” acceptable at first, or do we budget for a bigger Mac?
  4. Are you comfortable with transcript text going to the Claude API to be summarized? It can be turned off per meeting.
  5. Where do you want “your notes are ready” messages: email, Telegram, or nowhere?
  6. Anything Fireflies (or another tool) does that you'd miss?