Aller au contenu principal
Digi4

MeetScribe — Résumés de réunion par IA

Résumés de réunion par IA pour des échanges en darija, français et anglais.

Conception & développement

Réalisé chez Digi4, où je suis Tech Lead & Chef de Projet IT.

Chrome Extension Node.js Angular Gemini AI Discord.js
1
Faille critique corrigée
3
Failles moyennes corrigées
9
Commits en 4 jours (v1)

Le défi

Chez Digi4, agence logicielle marocaine, les réunions internes et client mélangent en permanence darija, français et anglais, parfois dans une seule et même phrase. Les outils de transcription grand public sont conçus pour une langue dominante et gèrent mal ce code-switching, un problème de transcription réel et peu adressé par les solutions mainstream. Saad devait aussi trancher une question d'architecture avant même de coder : comment capturer l'audio d'un appel Google Meet sans dépendre d'un bot capable de le rejoindre seul, une approche que Google bloque activement pour les outils tiers.

La solution

Saad a conçu MeetScribe, un résumeur de réunion post-appel plutôt que temps réel — un compromis assumé au profit de la fiabilité, de la qualité et de la confidentialité plutôt que de la vitesse. Une extension Chrome (Manifest V3, TypeScript) capture l'audio directement dans l'onglet Google Meet ; un backend Node.js/Express sécurisé (JWT, bcryptjs, helmet, rate-limiting) réceptionne l'enregistrement, le transcode via ffmpeg et l'envoie à Gemini 2.5 Flash pour transcription et synthèse ; un dashboard Angular 18 restitue le résultat. Le moteur de transcription est branché derrière une interface interchangeable, avec Groq Whisper large-v3 comme fournisseur alternatif, complété par des garde-fous budgétaires : durée maximale de réunion et plafond mensuel de dépense IA.

Les résultats

Le pipeline produit un résumé structuré directement exploitable, plutôt qu'un simple bloc de texte :

  • un résumé global de la réunion,
  • les décisions actées,
  • les actions à mener, avec responsable et échéance,
  • les questions restées ouvertes,
  • les segments par intervenant et les langues détectées.

Un audit de sécurité interne mené sur le projet a permis d'identifier et de corriger 1 faille critique (une clé API committée dans un fichier d'environnement frontend), 3 failles de sévérité moyenne et 4 failles mineures (exposition CORS en développement, nettoyage incomplet des fichiers temporaires, absence de Content-Security-Policy) — un vrai passage à la loupe plutôt qu'une case cochée.

Méthodologie et gestion de projet

Avant d'écrire une ligne de code, Saad a étudié la possibilité d'un bot capable de rejoindre un Google Meet de façon autonome, comme le font les bots Zoom/Teams — et a écarté cette piste après avoir confirmé que Google bloque activement les rejoins automatiques par navigateur headless. L'extension Chrome à capture d'onglet s'est imposée comme l'alternative pragmatique. Le projet comprend aussi une vraie recherche juridique : l'article 447-1 du Code pénal marocain sur l'enregistrement sans consentement, la loi 09-08 (CNDP) et le RGPD, traduits en garde-fous concrets — bandeau de consentement, indicateur d'enregistrement visible, suppression automatique des fichiers audio temporaires. Développé en un sprint intensif de 9 commits sur environ 4 jours, complété plus tard par un bot Discord et un audit de sécurité dédié.

Architecture technique et performance

Le pipeline est délibérément asynchrone, un choix de robustesse plutôt que de vitesse :

  • le document offscreen de l'extension capture le son de l'onglet et le micro de l'utilisateur, mixés dans un même AudioContext — corrigeant un bug de la v1 où seule la voix des autres participants était captée ;
  • l'audio est découpé en segments de 10 secondes persistés dans IndexedDB, pour ne rien perdre en cas de crash ;
  • l'upload authentifié vers le backend renvoie immédiatement un job ID (HTTP 202) plutôt que de traiter la requête en direct, pour éviter les timeouts du reverse proxy sur les longs envois ;
  • un worker transcode l'audio en FLAC (seul format accepté par l'API Files de Gemini avec WAV/MP3/AIFF/AAC/OGG), l'y téléverse, attend l'état « ACTIVE », puis déclenche la synthèse.

Un add-on bot Discord (discord.js) va plus loin en captant un flux audio Opus distinct par intervenant — une diarisation réelle, impossible avec la seule capture d'onglet Meet.

Accélération IA des Équipes

Questions fréquentes sur ce type de mission

Vous avez un projet similaire ?

Contactez-moi pour en discuter.

Discuter sur WhatsApp