Hoe Gaavala je vergaderaudio beschermt: een privacy-first architectuur
Elke werkdag nemen miljoenen professionals deel aan vergaderingen waarin gevoelige informatie wordt besproken — fusieonderhandelingen, patiëntconsulten, juridische strategie, previews van kwartaalcijfers, personeelsbeslissingen. Zodra die vergaderingen taalgrenzen overschrijden, wordt realtime vertaling onmisbaar. Maar de meeste vergadervertaaltools vereisen dat je je ruwe audio naar de cloud van een leverancier stuurt, en dat creëert precies het soort blootstellingsoppervlak dat juridische, compliance- en securityteams steeds vaker niet kunnen goedkeuren.
Gaavala is zo ontworpen dat het zichzelf volledig uit het audiopad haalt. Wanneer je een vergadering via onze Chrome-extensie laat lopen, reist je audio niet door servers van Gaavala. Ze streamt rechtstreeks van je browser naar de speech-to-text-engine van Soniox over een versleutelde WebSocket — en onze backend ziet er geen enkele byte van.
Deze post loopt precies door hoe dat werkt, welke data over de lijn gaat, en hoe de architectuur zich verhoudt tot gangbare compliance-frameworks.
Het kernprincipe van de privacy
De meeste SaaS-vertaaltools volgen een bekende gegevensstroom:
- Je browser legt vergaderaudio vast
- De audio wordt geüpload naar de backend van de leverancier
- De backend van de leverancier proxyt de audio door naar een speech-to-text-engine
- Transcripten komen terug via de backend van de leverancier
- Servers van de leverancier loggen, cachen of bewaren de audio onderweg vaak
Elke hop in die keten is een vertrouwensgrens. Elke hop is een plek waar een logbug, een gelekte credential, een dagvaarding of een kwaadwillende engineer de inhoud van je vergadering kan blootleggen. Hoe meer partijen de audio aanraken, hoe moeilijker het is om aan een auditor te bewijzen dat niemand die heeft bewaard.
Gaavala schrapt de proxystap volledig. De gegevensstroom is:
- Je browser legt vergaderaudio vast vanuit het tabblad
- Je browser opent een directe WebSocket naar Soniox
- De audio streamt rechtstreeks over die WebSocket
- Soniox stuurt transcripten rechtstreeks terug naar je browser
- De backend van Gaavala komt er nooit aan te pas
De Chrome-extensie die op jouw machine draait is het enige stuk van onze code dat je audio ooit aanraakt — en die stuurt de audio niet naar ons.
Waarom we voor deze architectuur kozen
Toen we Gaavala als Chrome-extensie herbouwden, namen we een bewuste architectuurbeslissing: de extensie zou gebruikers via onze backend authenticeren, de abonnementsstatus beheren en metadata leveren — maar ze zou nooit in het audiopad zitten. De redenering was rechttoe rechtaan:
- Compliance-oppervlak: Elke byte klantaudio die we verwerken is een byte waarover we verantwoording moeten afleggen in DPIA's, SOC 2-rapportages en BAA-onderhandelingen. De schoonste manier om dat oppervlak op nul te houden is de audio überhaupt nooit aanraken.
- Blast radius bij een inbreuk: Een inbreuk op een server die audio verwerkt is fundamenteel erger dan een inbreuk op een server die tekstmetadata verwerkt. We hebben liever dat onze gevoeligste systemen de minst gevoelige data behandelen.
- Latency: Elke proxyhop voegt round-trip-tijd toe. Rechtstreeks streamen van browser naar Soniox schrapt een volledige hop, wat ons merkbaar betere ondertitellatency geeft.
- Kosten die met privacy meebewegen: Een eigen audioproxy draaien zou betekenen dat we bij elke vergadering voor bandbreedte en compute betalen. Die niet draaien bespaart geld en beschermt klanten. Wanneer prikkels op één lijn liggen, blijft de architectuur meestal eerlijk.
De gegevensstroom in detail
Laten we kijken naar wat er daadwerkelijk gebeurt wanneer je in een vergadering de transcriptie start.
Stap 1: Authenticatie
Wanneer je voor het eerst bij Gaavala inlogt, gebruikt de extensie de chrome.identity.launchWebAuthFlow API van Chrome om een OAuth Authorization Code-flow met Google of Microsoft af te ronden. De identityprovider geeft een authorization code terug aan je browser, die de extensie bij onze backend inwisselt voor een Gaavala-sessie-JWT. Die JWT wordt opgeslagen in chrome.storage.local en wordt gebruikt om volgende API-aanroepen naar onze backend te authenticeren.
Hier komt geen audio aan te pas. De OAuth-flow is puur tekst — tokens, claims, profielvelden.
Stap 2: Tijdelijke Soniox-sleutel
Wanneer je in een vergadering op "Start" klikt, roept de extensie onze backend-API aan om een kortlevende tijdelijke Soniox-sleutel op te vragen. Die sleutel heeft drie belangrijke eigenschappen:
- Hij is beperkt tot speech-to-text — verder niets in het API-oppervlak van Soniox
- Hij verloopt in minuten, niet in dagen
- Hij wordt één keer per sessie uitgegeven en wordt niet op je apparaat bewaard
Het patroon met tijdelijke sleutels is cruciaal voor het privacyverhaal. Als Gaavala een langlevende Soniox-API-sleutel in de extensiebundel zou meeleveren, kon iedereen die eruit halen. In plaats daarvan geven we wegwerpsleutels uit die op aanvraag worden aangemaakt, gebonden zijn aan je geauthenticeerde sessie, en kort na het einde van de sessie ongeldig worden.
Onze backend logt alleen de metadata van dat verzoek — welke gebruiker, welk tijdstip, welk abonnementsniveau. Ze ziet geen audio, omdat er nog geen audio is vastgelegd.
Stap 3: Tabbladaudio vastleggen
Je neemt in een Chrome-tabblad deel aan je gesprek in Microsoft Teams, Zoom, Google Meet of Webex. De Gaavala-extensie opent het zijpaneel en vraagt je om het vastleggen van audio te starten. Bevestig je dat, dan gebruikt de extensie de tabCapture API van Chrome — een API die alleen voor extensies bestaat en waarmee audio van het actieve tabblad kan worden vastgelegd met expliciete toestemming van de gebruiker en een zichtbare indicator.
Chrome routeert de vastgelegde audio naar een offscreen-document dat Gaavala op de achtergrond draait. Het offscreen-document is een sandboxed pagina die de extensie kan gebruiken om audioverwerking af te handelen zonder zichtbare UI aan te houden. Binnen dat offscreen-document opent Gaavala een MediaStream, verbindt die met een AudioContext en maakt hem klaar om te streamen.
Cruciaal is dat de audio ook door een lokale audiograaf loopt die het geluid terugvoert naar je speakers. Dat betekent dat je de vergadering gewoon kunt blijven horen terwijl Gaavala haar vastlegt — er wordt niets gedempt of omgeleid.
Stap 4: Directe WebSocket naar Soniox
Het offscreen-document opent vervolgens een WebSocket-verbinding rechtstreeks naar Soniox (wss://stt-rt.soniox.com/...). Die verbinding:
- Gebruikt TLS 1.2 of hoger
- Wordt geauthenticeerd met de kortlevende tijdelijke sleutel uit stap 2
- Vertrekt vanuit de netwerkstack van je browser — pakketten stromen van je besturingssysteem naar Soniox, niet naar Gaavala
De uit het tabblad vastgelegde audioframes worden als PCM gecodeerd en over de WebSocket verstuurd. Soniox verwerkt ze in realtime en streamt transcriptietokens over dezelfde verbinding terug. Die tokens — tekstfragmenten met tijdstempel en sprekerlabel — komen rechtstreeks binnen in het offscreen-document, dat ze doorgeeft aan het zijpaneel om te tonen.
Op geen enkel moment in deze hele lus bereikt een audiopakket een server van Gaavala. Je kunt dit zelf verifiëren met Chrome DevTools: open het Network-tabblad met het WS-filter aan terwijl Gaavala draait, en je ziet precies één WebSocket — naar een soniox.com-host — en nul uitgaand verkeer naar gaavala.com met audio erin.
Stap 5: Weergave van het transcript en optionele samenvatting
Transcriptietokens worden op drie oppervlakken gerenderd: het zijpaneel, een zwevende overlay op het vergadertabblad, en de in-memory buffer die voor export wordt gebruikt. Geen van die oppervlakken serialiseert audio. Ze verwerken alleen tekst.
Wanneer je aan het einde van een vergadering een AI-samenvatting activeert, wordt die volledig op je apparaat gegenereerd door de ingebouwde AI van Chrome (Gemini Nano). De transcripttekst verlaat je machine nooit — ze wordt niet naar de backend van Gaavala gestuurd en ook niet naar een derde partij. Vergaderinhoud, of dat nu audio of tekst is, passeert de backend van Gaavala helemaal nooit; het enige dat dat wel doet blijven authenticatie- en abonnementsmetadata.
Welke data de servers van Gaavala zien
Dit is de exacte lijst van data die onze backend verwerkt, over alle functies heen:
| Data | Wanneer | Bewaartermijn | Opmerkingen |
|---|---|---|---|
| Gaavala-sessie-refresh-token | Bij inloggen | Levensduur van het token — verlopen rijen worden dagelijks opgeruimd | Je Google/Microsoft-OAuth-token wordt nooit opgeslagen |
| Gebruikersprofiel (e-mail, naam) | Bij inloggen | Levensduur van het account | Voor facturering + support |
| Abonnementsstatus | Altijd | Levensduur van het account | Abonnementsniveau, status van de proefperiode |
| Aanvragen van een tijdelijke Soniox-sleutel | Per sessie | Alleen in het verzoeklog | Geen audio |
| Teller van transcriptieminuten | Per sessie | Levensduur van het account | Gebundeld per maand, voor het handhaven van het quotum |
| Anonieme website-analytics | Alleen nadat je cookies accepteert | Bewaard door Google Analytics, niet in onze database | Alleen de website — de extensie rapporteert anonieme fouttellingen die geen gebruikers-ID bevatten |
Dit is de exacte lijst van data die onze backend niet ziet:
- Ruwe vergaderaudio (in welk formaat en op welk moment dan ook)
- Gecomprimeerde audiostreams
- Audiobuffers of tussenliggende representaties
- Biometrische stemdata
- Sprekeridentiteit voorbij de anonieme spreker-ID's die Soniox toekent
- Transcripttekst — samenvattingen worden on-device gegenereerd; transcripten verlaten je machine nooit
Zou een rechter Gaavala dagvaarden voor de audio van een specifieke vergadering, dan is het technisch waarheidsgetrouwe antwoord dat we die niet hebben en niet kunnen achterhalen. Ze heeft nooit op onze systemen bestaan.
Controleer het zelf
Een van de voordelen van draaien als Chrome-extensie is dat de volledige runtime inspecteerbaar is. Je IT-team kan onze privacyclaims verifiëren zonder ook maar één woord van deze post te geloven:
Methode 1 — Netwerkinspectie. Open chrome://extensions, zoek Gaavala en klik op "service worker" of "inspect views > background page". Ga in DevTools naar het Network-tabblad en filter op WS (WebSocket). Start een vergadering. Je ziet precies één geopende WebSocket, naar een soniox.com-host. Er gaat geen audio naar gaavala.com.
Methode 2 — Manifestinspectie. Klap in chrome://extensions "Details" open bij Gaavala en bekijk de machtigingen. De host_permissions declareren precies welke origins de extensie kan bereiken. Je ziet Soniox-endpoints voor het streamen en Gaavala-endpoints voor auth en abonnement. Er is geen wildcard-hostmachtiging en geen ongedeclareerde netwerktoegang.
Methode 3 — Broninspectie. De extensie wordt geleverd met een service worker, een offscreen-document, een zijpaneel en content scripts. Chrome stelt die allemaal beschikbaar voor inspectie via de developer tools. Je securityteam kan zich op elk moment aan de background page of het offscreen-document hangen en de runtime-status lezen — inclusief de bevestiging dat het audiostream-object nooit wordt geserialiseerd naar een fetch of XHR richting ons domein.
We publiceren het manifest en de hostmachtigingen als onderdeel van onze Chrome Web Store-vermelding, en we verwelkomen securityonderzoek door derden.
Compliance-mapping
GDPR en dataminimalisatie
Artikel 5(1)(c) van de GDPR legt het principe van dataminimalisatie vast: persoonsgegevens moeten "toereikend, ter zake dienend en beperkt tot wat noodzakelijk is" zijn. Stemdata zijn persoonsgegevens onder de GDPR, en biometrische gegevens wanneer ze voor identificatie worden gebruikt.
De architectuur van Gaavala sluit rechtstreeks aan bij dat principe. Door audio volledig buiten onze systemen te houden, beperken we de persoonsgegevens die we verwerken tot het absolute minimum dat nodig is om een abonnementsbedrijf te draaien — e-mail, naam, factureringsstatus. Voor klanten die een DPIA uitvoeren is onze backend op audioverwerking feitelijk transparant: er valt niets te beoordelen, omdat er niets bij ons binnenkomt.
Soniox is een aparte verwerker in je compliance-keten. Je kunt hun privacypositie onafhankelijk beoordelen, en Soniox publiceert verwerkersvoorwaarden die gelden voor de directe verbinding die je browser met hen maakt.
HIPAA en audio met PHI
Onder HIPAA moet elke leverancier die Protected Health Information verwerkt, opslaat of verzendt een Business Associate Agreement tekenen. Medische consulten bevatten vaak PHI — patiëntnamen, diagnoses, behandelplannen.
Omdat de backend van Gaavala nooit vergaderaudio ontvangt, valt de audiopijplijn buiten de BAA-scope van Gaavala. De relatie die je voor die audioverwerking beoordeelt is die tussen jou en Soniox rechtstreeks — Gaavala is voor die data geen business associate, omdat de data ons niet raakt. Genereer je AI-samenvattingen, dan worden die on-device geproduceerd door de ingebouwde AI van Chrome — de transcripttekst blijft op je machine, dus ook de samenvattingsfunctie haalt Gaavala of een extra leverancier niet de PHI-verwerkingsketen in.
SOC 2-leveranciersrisico
SOC 2-audits vereisen dat organisaties alle derde partijen in hun gegevensverwerkingsketen documenteren en beoordelen. Elke leverancier maakt je System Description complexer en vergroot de scope van je risicobeoordeling.
In de architectuur van Gaavala is Soniox een gegevensverwerker met wie je rechtstreeks te maken hebt, niet via Gaavala. Je leveranciersrisicoregister hoort Soniox op eigen merites te beoordelen, wat veel securityteams overzichtelijker vinden dan het beoordelen van een subverwerkersrelatie. De scope van Gaavala in je risicoregister is smaller: wij verwerken identiteit en facturering — geen ruwe audio, en geen transcript- of samenvattingstekst, want die verlaat de machine van de gebruiker nooit.
Waarom de vorm van een Chrome-extensie uitmaakt
Veel van de bovenstaande privacygaranties hangen ervan af dat Gaavala draait als Chrome-extensie met een netwerkpatroon dat rechtstreeks naar de provider gaat. We hebben verschillende alternatieven overwogen en verworpen:
- Server-side audioproxy: Eenvoudig te implementeren, maar het zou ons dwingen de audio van elke klant op onze eigen infrastructuur te verwerken. Precies wat we expliciet wilden vermijden.
- Webapp met ingebouwde STT: Tabbladaudio vastleggen vanuit een webpagina vereist
getDisplayMedia, dat de gebruiker elke sessie een kiezer op OS-niveau voorschotelt en de extensie vastpint op het tabblad dat die kiest. Erger nog: er is geen betrouwbare manier voor een webpagina om een audiostream op de achtergrond aan te houden terwijl de gebruiker met andere tabbladen bezig is. - Native desktopapp: Zou ons meer controle geven, maar installatiefrictie, ondertekeningskosten en OS-specifieke ontwikkellast toevoegen. En het zou onze rol als audioverwerker nog steeds niet wegnemen tenzij we heel zorgvuldig waren — wat betekent dat we alle dezelfde problemen opnieuw zouden uitvinden.
De vorm van een Chrome-extensie maakte de privacyarchitectuur die we wilden als enige mogelijk. tabCapture, offscreen-documenten en het service-workermodel van Manifest V3 laten de extensie samen audio volledig op de machine van de gebruiker afhandelen, directe verbindingen naar externe diensten openen en de achtergrondstatus aanhouden die lange vergaderingen nodig hebben — zonder dat er iets via ons loopt.
De dingen die we nog steeds goed moeten doen
Privacyarchitectuur eindigt niet bij "we raken de audio niet aan". Er zijn aangrenzende zorgen die we net zo serieus nemen:
- Het aanmaken van tijdelijke sleutels: De kortlevende Soniox-sleutels die we aanmaken zouden misbruikt kunnen worden als onze backend sleutels voor een aanvaller aanmaakt. We authenticeren elk verzoek met je JWT, we rate limiten de uitgifte van sleutels, en we loggen afwijkingen.
- Extensie-updates: Een bijgewerkte extensieversie zou in theorie het netwerkpatroon kunnen veranderen. We versioneren het manifest, we publiceren changelogs, en de Chrome Web Store toont nieuwe machtigingen voordat een update wordt geïnstalleerd.
- Samenvattingstekst: Samenvattingen worden volledig on-device gegenereerd door de ingebouwde AI van Chrome (Gemini Nano), waardoor het transcript onze backend nooit bereikt — dit risico bestaat in de huidige architectuur niet. Is zelfs lokale AI-verwerking meer dan een bepaalde vergadering kan verdragen, dan kan de samenvattingsfunctie simpelweg ongebruikt blijven; niets anders hangt ervan af.
- Referentiesample voor de stemkloon (Pro): maak je een persoonlijke stemkloon, dan wordt je sample van ~20 seconden versleuteld opgeslagen (AES-256-GCM) op de servers van Gaavala, alleen gebruikt om je stem te bouwen, en op verzoek verwijderd — zie het privacybeleid.
- Juridische verzoeken: We verbinden ons er publiekelijk toe alleen te reageren op juridische verzoeken voor data die we daadwerkelijk hebben. Voor audio zal dat altijd "die hebben we niet" zijn.
Vergeleken met andere vergadervertaaltools
Hoe verhoudt het privacymodel van Gaavala zich tot andere gangbare vergadervertaaltools?
| Functie | Gaavala | Otter.ai | Zoom AI Companion | Teams Copilot | Interprefy |
|---|---|---|---|---|---|
| Audio bereikt de backend van de leverancier | Nee (rechtstreeks naar Soniox) | Ja (Otter-servers) | Ja (Zoom-servers) | Ja (M365-servers) | Ja (platformservers) |
| Audio bewaard na de vergadering | Nee | Ja (standaard) | Optioneel | Optioneel | Wisselend |
| Gebruikt voor modeltraining | Nee | Opt-out | Opt-out | Enterprisecontroles | Onbekend |
| Netwerk zelf controleren | Ja (DevTools) | Nee | Nee | Nee | Nee |
| Draait als extensie (controleerbaar) | Ja | Nee | Nee | Nee | Nee |
| Werkt in Teams/Zoom/Meet/Webex | Ja | Gedeeltelijk | Nee | Nee | Wisselend |
Het verschil dat ertoe doet: in elke andere rij van die tabel vertrouw je op de claims van de leverancier over hoe audio op hun servers wordt behandeld. Bij Gaavala zijn er voor audio geen servers om te vertrouwen, omdat er geen audio op onze servers staat. De claim is verifieerbaar met standaard Chrome-developertools.
Privacy is de standaard, geen betaald niveau
De gratis versie van Gaavala geeft je dezelfde rechtstreeks-naar-Soniox-architectuur, dezelfde speaker diarization en dezelfde dekking van 60 talen. Pro ontgrendelt 120 minuten per dag, Speak Mode en stemklonen — geen privacy. Wij vinden niet dat privacybewuste gebruikers meer zouden moeten betalen om hun data veilig te houden.
Heeft je organisatie vergadervertaaltools historisch afgewezen omdat compliance nee zei tegen het sturen van audio naar de cloud van een leverancier, dan is Gaavala voor dat gesprek gebouwd. De pijplijn is zo ontworpen dat je juridische, security- en complianceteams minder te beoordelen hebben — niet meer.
Eenmalige gratis proefperiode: 5 minuten transcriptie, wordt nooit gereset. Geen creditcard. Geen registratie op de website.