Skip to main content
Digi4

MeetScribe — AI Meeting Summarizer

AI meeting summaries for calls mixing Darija, French and English.

Design & development

Delivered at Digi4, where I am Tech Lead & IT Project Manager.

Chrome Extension Node.js Angular Gemini AI Discord.js
1
Critical flaw fixed
3
Medium flaws fixed
9
Commits in 4 days (v1)

The challenge

At Digi4, a Moroccan software agency, internal and client meetings constantly mix Darija, French and English — sometimes within a single sentence. Mainstream transcription tools are built around one dominant language and handle this code-switching poorly, a real and underserved transcription problem most tools ignore. Saad also had to settle an architecture question before writing any code: how to capture a Google Meet call's audio without relying on a bot that joins the call on its own, an approach Google actively blocks for third-party tools.

The solution

Saad built MeetScribe, a post-meeting rather than real-time summarizer — a deliberate tradeoff favoring reliability, quality and privacy over speed. A Chrome extension (Manifest V3, TypeScript) captures audio directly inside the Google Meet tab; a secured Node.js/Express backend (JWT, bcryptjs, helmet, rate-limiting) receives the recording, transcodes it with ffmpeg and sends it to Gemini 2.5 Flash for transcription and summarization; an Angular 18 dashboard displays the result. The transcription engine sits behind a swappable interface, with Groq Whisper large-v3 as an alternative provider, plus built-in budget guardrails — a max-meeting-length cap and a monthly AI-spend ceiling.

The results

The pipeline produces a structured summary rather than a wall of text:

  • an overall meeting summary,
  • the decisions made,
  • action items, each with an owner and a deadline,
  • open questions left unresolved,
  • per-speaker segments and detected languages.

An internal security audit of the project found and fixed 1 high-severity issue (an API key committed to a frontend environment file), 3 medium-severity issues and 4 low-severity issues (CORS exposure in development, incomplete temp-file cleanup, missing Content-Security-Policy) — a genuine scrub, not a rubber-stamped checklist.

Methodology and project management

Before writing a line of code, Saad researched a bot that could join a Google Meet call on its own, the way Zoom/Teams bots do — and rejected it after confirming Google actively blocks headless-browser auto-joiners. The tab-capture Chrome extension emerged as the pragmatic alternative. The project also involved genuine legal research: Article 447-1 of the Moroccan Penal Code on recording without consent, Morocco's data-protection law (09-08/CNDP), and GDPR, translated into concrete safeguards — a consent banner, a visible recording indicator, and automatic deletion of temporary audio files. Built in one intense sprint of 9 commits over roughly 4 days, later extended with a Discord bot add-on and a dedicated security pass.

Technical architecture and performance

The pipeline is deliberately asynchronous, a choice for robustness over speed:

  • the extension's offscreen document captures both tab audio and the user's own microphone, mixed in a single AudioContext — fixing a v1 bug where only remote participants' voices were captured;
  • audio is recorded in 10-second chunks persisted to IndexedDB, so a crash never loses the recording;
  • the authenticated upload returns a job ID immediately (HTTP 202) instead of processing inline, avoiding reverse-proxy timeouts on long uploads;
  • a worker transcodes the audio to FLAC (the only format, alongside WAV/MP3/AIFF/AAC/OGG, that Gemini's Files API accepts), uploads it, polls until it reaches "ACTIVE" state, then requests the summary.

A Discord bot add-on (discord.js) goes further, capturing a separate Opus audio stream per speaker — genuine diarization, something the Meet extension's tab-capture approach cannot achieve on its own.

AI-Augmented Delivery Enablement

Common questions about this kind of engagement

Have a similar project?

Get in touch to discuss it.

Chat on WhatsApp