Skip to content

EmbeddedEra Meet — our fork of Meetily (Mac first)

Angel, 2026-10-22: "grab their code, clone it into a repo… an enhanced version of them… I just use the EmbeddedEra app that does everything." Mac only for now, keep Windows/Linux possible.

Name EmbeddedEra Meet (Angel, 2026-10-22). Repo: ~/ee-meetily, remote upstream = github.com/Zackriya-Solutions/meeting-minutes, forked at v0.4.1 (a2cb62e, 2026-09-10). MIT — keep their copyright in LICENSE.md and a "based on Meetily" line in About. Related: meetings-and-tasks (this is its Phase 4 for calls Angel takes on the Mac).

What upstream already gives us (checked in the code, 2026-10-22)

  • Tauri 2 (Rust) + Next.js 14. Mac, Windows and Linux paths already exist → staying cross-platform is cheap.
  • Mic + system audio on macOS via ScreenCaptureKit (src-tauri/src/audio/capture/core_audio.rs); no bot joins the call.
  • Local Whisper / Parakeet transcription; summaries via Ollama, Claude, Groq, OpenRouter, OpenAI.
  • Summary templates are JSON in src-tauri/templates/ → ours is just one more file.
  • Mac build/sign/release workflows in .github/workflows/ (signing optional, off by default).
  • Telemetry ON by default: PostHog with a hardcoded key (src-tauri/src/analytics/commands.rs). Removed in our build.
  • Mic and system audio are mixed before transcription (audio/pipeline.rs ring buffer), so the free app cannot tell You from Them. Our fix below.

v1 (Mac) — scope

  1. Fork hygiene — rename product/identifier (tauri.conf.json: com.embeddedera.meet), brand per SOP-031 + ~/Notes/brand/README.md on branch sandbox first, telemetry deleted, Ollama/our default summary path preselected, a sensible Whisper model per Mac.
  2. You/Them labels — save the recording stereo (mic left, system right) instead of pre-mixed; after the call, label each transcript segment by which channel was louder over its timestamps. No change to the live transcription path; a group call later can go to WhisperX on the server.
  3. Screen recording in the same app — ScreenCaptureKit already supplies the system audio; ask it for video too (display or a single window), hardware-encoded .mp4. One permission, one Record button.
  4. Bookmark hotkey — global shortcut marks a moment; grabs a screenshot; notes highlight it.
  5. Vault output — after each call write ~/Notes/meetings/calls/YYYY-MM-DD-<who>.md (summary, decisions, action items, bookmarks with screenshots, transcript link) to the synced folder on the Mac. Action items go to the task register (meetings-and-tasks Phase 1) when it exists.
  6. EmbeddedEra notes template — attendees, summary, decisions, our commitments, their commitments, NDA/confidential points, follow-ups.
  7. ~~Consent line~~ — dropped 2026-10-22 (Angel: NC is one-party consent, "we are not doing that").
  8. Calendar start — Google Calendar via per-user OAuth on the Mac (the server-side block does not apply to a desktop sign-in): "Record ?" when a meeting with a video link starts.
  9. Follow-up email — written as a Gmail draft, never sent.
  10. Build — GitHub Actions macOS runner → unsigned .dmg; Angel installs once (right-click → Open).

v2: screen-text OCR, click-to-seek video, video moved to server with retention, ERP customer link, commitments tracker, part-number lookups. Later: Windows, then Linux.

Summaries

Decided 2026-10-22: local built-in model by default; Claude/OpenAI/Groq/OpenRouter selectable in Settings with Angel's own key (his choice per meeting). No key is hardcoded.

Open

  • Angel: tag + build rc.14 from branch ee/speaker-turns (PR EmbeddedEra/ee-meet#2, based on unmerged ee/rc9-screen-ux): git -C ~/ee-meetily tag ee-v0.5.0-rc.14 && git -C ~/ee-meetily push origin ee-v0.5.0-rc.14, then ee/publish.sh <run-id>. (Claude's tag push was blocked as a production deploy.) Test: on the next call, check that mixed lines show "Them → You" in the transcript and that commitments in the notes carry [mm:ss] and the right side.
  • Transcript times drift ~0.1 s/min early against audio.mp4 (0.6 s → 2.6 s over 31 min on 10-29). label.rs works around it; find the source (chunk timestamps vs encoded audio). It will also hurt click-to-seek.
  • Diarize code (speakers/core.rs ordered_labels/overlapping_cluster) assumes only "You"/"Them"; handle mixed labels ("Them → You") before turning diarize on.
  • Echo cancellation at capture (macOS voice processing) deferred: echo was not what broke labels (sits 1–6 dB under).
  • Angel: test EraScope 0.5.0-rc.12 (tag ee-v0.5.0-rc.12, run 40044808098, branch ee/rc9-screen-ux; published: https://apps.embeddedera.com/erascope/). Check: name/icon, Camera bubble (drag, appears in screen video), Screen-permission warning, no 2nd Dock icon, video player, "Check for Updates" (tray). Re-grant Mic/Screen/Camera once (new signing identity); later updates should keep them. Then merge branch into sandbox.
  • After rc.12 works: publish rc.13 via the updater to prove in-app update keeps permissions.
  • Angel: copy ~/.config/ee-meet/* (updater key, codesign p12, env) into Vaultwarden.
  • Idea (not decided): meeting bot for calls Angel can't attend / phone-only — self-host Vexa (github.com/vexa-ai/vexa, Apache-2.0) or Attendee (github.com/attendee-labs/attendee) on Plex via Docker, join from the calendar feed, transcript into the same vault pipeline. Visible participant. Today's phone fallback: Meet dial-in + iOS 18.1 call recording.
  • Diarization + name suggestions (WP8/WP9, merged, feature diarize OFF): move sherpa-onnx into its own sidecar process (like llama-helper) — in-process it links a 2nd static onnxruntime beside ort (Parakeet) on macOS (duplicate symbols in rc4/rc5). Then turn the feature on and re-test.
  • v2: per-resume A/V drift (a few hundred ms per resume, documented in screen/mod.rs), echo without headphones (RNNoise off at ffmpeg_mixer.rs:20, or macOS voice processing), slide OCR into summary, calendar TZID/COUNT/monthly.

Log

  • 2026-10-22: cloned upstream v0.4.1 to ~/ee-meetily; plan written; telemetry and pre-mix found in code.
  • 2026-10-22: Angel: Mac is an M1 Air; repo private (EmbeddedEra/ee-meet, created, upstream push disabled); no consent line (NC one-party); "I like all the things you mentioned" → build v1 + v1.1 end to end, Opus plans, Sonnet agents build.
  • 2026-10-22: WP0 done — ee/check.sh baseline green on untouched v0.4.1 (Linux docker: cargo check + 244 Rust tests pass, 52 min cold); ee-mac.yml (unsigned ad-hoc dmg) added, not run yet. WP1 + WP2 dispatched to Sonnet workers.
  • 2026-10-22: WP1 merged to sandbox (e213419): EmbeddedEra Meet branding/icons, PostHog + updater deleted, recordings in ~/Movies/EmbeddedEra Meet. Lanes B (screen+bookmarks) and C (vault/calendar/email) dispatched; WP2 rebasing.
  • 2026-10-22: Angel: "Remember we have codex ai we can use" → Codex (0% weekly used) takes WP8 diarization once WP2 merges, WP9 after, and pre-merge diff reviews; Sonnet keeps lanes B/C.
  • 2026-10-22: WP3+WP4 merged (bfa9475): Record screen setting → screen.mp4 + meeting.mp4 mux, ⌘⇧B bookmarks + screenshots, bookmarks list on meeting page (no thumbnails/seek in v1: no audio player on that page). Codex review of WP1: clean; fixed About privacy line.
  • 2026-10-22: WP2 merged (e08ec33): stereo audio.mp4 (L mic, R system), You/Them labels in transcripts.json + DB + transcript view; 252 Rust tests green. WP8 diarization handed to Codex (branch ee/wp8-diarize, sherpa-rs behind feature diarize).
  • 2026-10-22: WP5-7 merged (3612a38) after combined check + Codex review fixes (shots/ containment, COUNT rules skipped). v1 complete in sandbox; first macOS build: tag ee-v0.1.0-rc1, run 39888011782.
  • 2026-10-22: first macOS dmg built: rc1 failed (Tauri JS/Rust version mismatch after global-shortcut bumped tauri to 2.12), fixed → rc2 run 39889523477 green, EmbeddedEra Meet_0.4.1_aarch64.dmg 47 MB (copy at /mnt/storage/claude/ee-dmg/rc2). Sent to Angel for the test call. Codex WP8 code written; compiling.
  • 2026-10-22: WP8 (Codex) merged: sherpa-rs 0.6.8 diarization (feature diarize, static on macOS), Room/Remote N labels, speaker review + rename, voiceprints table (cosine ≥ 0.7); Linux 273 tests green, macOS build rc4 run 39892118886 compiled, BUT (corrected 2026-10-22, later) its log shows duplicate onnxruntime symbols (sherpa static + ort) — not safe; see the next line. WP9 (Codex) written, checking.
  • 2026-10-22: rc5 (all WPs) built, but sherpa-rs + ort link two static onnxruntimes on macOS (linker kept one copy) → diarize default OFF; check.sh still compiles it. rc2 is the build for the test call. Follow-up: diarize sidecar.
  • 2026-10-22: draft PR EmbeddedEra/ee-meet#1 sandbox→main (b57b894). Waiting on Angel's rc2 test call.
  • 2026-10-23: Angel's first Mac runs: rc5 → "Failed to initialize ORT API" (the duplicate onnxruntime, as feared); then rc2 → crash at launch: rc5 had applied DB migration 20261022000008 that rc2 lacks → .expect("Failed to initialize database"). rc6 (sandbox b57b894, diarize off, has the migration; run 40025567046, 0 sherpa/duplicate symbols) is the test build. Lesson: never hand back an older build after a newer one migrated the DB.
  • 2026-10-23: Angel tested rc6: "everything seems to be working"; screen and audio feel like two separate things, notes show only transcription → WP10 "one meeting, one timeline" (spec in ee/PLAN.md): video player + timeline with bookmark ticks + synced transcript + Screen toggle on the record bar + A/V offset/pause segments + video link in the vault note. Angel: "flawless app, not a patch app". Two Codex workers (backend/UI).
  • 2026-10-23: WP10 built (backend 1e9174e + UI ccd455a, Codex). Codex review → fixed in 48c2a39: bad save folder no longer panics setup, mux drops -shortest (full audio kept), meeting.mp4 written via temp+rename with videoPending + 3 s UI poll; resume drift accepted and documented. check.sh OK (291 tests); Mac rc8 run 40034416874 green, 0 duplicate symbols; sandbox fast-forwarded to 48c2a39 (PR #1). Next: Angel tests rc8.
  • 2026-10-23: Angel: rc8 video works once Screen Recording was granted; feedback: 2nd Dock icon while recording (ffmpeg sidecar, see Open).
  • 2026-10-23: Angel idea → WP11 quick recording + draggable camera bubble (planned in Open, not started).
  • 2026-10-23: WP11 simplified: just a Camera toggle + draggable bubble; dropped "Quick recording" mode and separate camera track.
  • 2026-10-23: Angel idea → WP12 unlisted apps.embeddedera.com downloads + real updater (proposed in Open, awaiting go).
  • 2026-10-23: rc9 Mac build failed only on my layout-check path; fixed (inspect the dmg). Built rc10 = EraScope: rename (bundle id unchanged), copper scope-trace icon, WP11 camera bubble (Sonnet worker), screen-failure warning + ffmpeg in Contents/Helpers (2nd Dock icon), upstream updater UI restored → apps.embeddedera.com/erascope/latest.json (R2 bucket ee-apps, custom domain, robots disallow), self-signed "EmbeddedEra Apps Code Signing" cert (10y, ~/.config/ee-meet, GitHub secrets set by Angel), ee/publish.sh, weekly ee-upstream.yml on main (first run: up to date). Skipped disable-library-validation entitlement (guard flagged; add only if launch fails). check.sh OK 291 tests.
  • 2026-10-23: rc.10 failed signing (Tauri's APPLE_CERTIFICATE import only lists Apple-named certs) → import cert in our own CI step; rc.11 signed OK but my check needed codesign -dvv; rc.12 green (Authority=EmbeddedEra Apps Code Signing, ffmpeg in Helpers) and published to apps.embeddedera.com/erascope/ (latest.json, dmg, tarball, page; R2 needs the page also at key erascope/).
  • 2026-10-29: Shower Drying call notes had who-said-what backwards (Jay's "email me the questions" became a James/EmbeddedEra task). Cause found: echo + ties labelled "You" + notes prompt doesn't say who "You" is. Fix plan in Open.
  • 2026-10-29: Speaker-label fix on ee/speaker-turns (2773a68, PR #2): per-100 ms frames, per-minute transcript/audio alignment, "Them → You"/"You → Them" for mixed segments; summary input now carries speaker labels (it had none) and the EmbeddedEra Call template says who You is + [mm:ss] per commitment. Measured on the 10-29 call vs a local transcript of the system channel: single-speaker 131→132/133, mixed 0→10/12 flagged right. check.sh OK (295 tests). Fixes changed from the plan: AEC and "<3 dB → Them?" dropped after measurement. Ground truth + scripts on NAS under the customer folder work/, not in the repo (NDA).