Nous avons terminé notre audit GDPR. Voici ce que nous avons réellement corrigé.
Il y a quelques semaines, nous avons écrit que « conforme au GDPR » sur la page d'accueil d'un outil vidéo signifie bien moins que ce que vous pensez — que le GDPR est un ensemble d'obligations qui pèsent sur vous, le responsable du traitement, et qu'un fournisseur vous aide soit à les respecter, soit vous les laisse silencieusement sur les bras. La manière honnête d'étayer cette affirmation est de faire le travail de notre côté et de le montrer, ligne par ligne.
C'est ce que nous avons fait. Nous avons mené un audit complet du codebase d'InterMIND à l'aune des obligations qui pèsent sur nous en tant que sous-traitant, corrigé chaque écart ayant une base de code, et vérifié chacun d'eux face au produit en cours d'exécution. Cet article est le rapport de clôture — non pas un badge, mais une liste de contrôle avec nos réponses.
Nous ne revendiquons pas délibérément être « 100 % certifiés GDPR ». Le GDPR n'est pas un certificat que l'on réussit — et nous n'agiterons pas un badge ISO que nous ne détenons pas encore. Ce que nous pouvons dire : les obligations architecturales et procédurales que traite un DPO ont désormais des réponses concrètes et vérifiables, chacune confrontée au code en exécution.
Ce que nous avons corrigé
Droit à l'effacement (Art. 17) — la cascade s'exécute réellement
Supprimer votre compte ne se contente pas de le désactiver. POST /api/user/delete-account déclenche une véritable cascade : il supprime vos réunions → participants, messages, conférences, transcriptions ; il nettoie vos blobs de stockage de Tigris avant la cascade de la base de données afin que rien ne soit laissé orphelin — pièces jointes des conversations et fichiers d'enregistrement vidéo, sur les deux colonnes ; et il annule vos abonnements Stripe et supprime le client Stripe. La suppression à la demande est également de mise — supprimez un canal ou un message depuis l'interface et il disparaît. Les comptes anonymes (invités) disposent de leur propre point de terminaison de suppression ainsi que d'un nettoyage en arrière-plan toutes les 6 heures, sous la surveillance d'un cron. L'audit a révélé un écart ici — des blobs d'enregistrement que la cascade de la base de données supprimait mais que le stockage conservait — et nous l'avons comblé : l'effacement ne laisse désormais plus aucune trace dans le stockage d'objets.
Conservation (Art. 5(1)(e)) — un critère documenté
L'Art. 5(1)(e) n'exige pas de durée de vie (time-to-live) automatique. Il exige un critère de conservation défini. Le nôtre est désormais inscrit dans la Politique de confidentialité : les données sont conservées jusqu'à ce que vous ou le propriétaire de votre équipe les supprimiez, et la suppression de votre compte efface tout. C'est le même modèle sur lequel s'appuient des outils collaboratifs comme Slack et Notion — la persistance est le comportement attendu, et vous en conservez le contrôle. Le critère est explicite, et non implicite.
Consentement à l'analytique (Art. 6/7) — opt-out par défaut
Une bannière de consentement Usercentrics (affichée aux visiteurs de l'UE) filtre l'analytique, et PostHog est livré avec opt_out_capturing_by_default: true — rien n'est capturé tant que le consentement n'est pas donné, et non l'inverse.
Portabilité des données (Art. 20) — un véritable export
GET /api/user/export génère un fichier ZIP de vos réunions, messages, enregistrements et traductions, avec une fenêtre de téléchargement de 7 jours et un nettoyage automatique. L'accès, la suppression et la portabilité sont des outils fonctionnels, et non des promesses dans une politique.
Le contenu des réunions est transmis à une seule passerelle IA, dans l'UE — choisie par l'organisation
Le plus grand flux de contenu de réunion — la traduction de la voix et des conversations en direct — s'exécute sur notre propre moteur en France, jamais sur un LLM tiers. Les étapes d'IA qui utilisent un modèle à usage général (le résumé, les synthèses de documents, les actions génératives de l'éditeur de notes, Ask AI) s'exécutent sur la passerelle IA que l'organisation sélectionne — Azure OpenAI dans l'UE Data Zone par défaut, Vertex AI UE ou Amazon Bedrock Frankfurt au choix, chacun dans notre propre tenant avec zéro rétention de données et aucun entraînement sur le contenu des clients, ou sur le propre point de terminaison de l'organisation ; un seul résolveur dans le code sélectionne la passerelle pour chaque site d'appel, il n'y a donc pas de second chemin. Nous avons également nettoyé les noms des participants et le texte des énoncés des journaux de navigateur de conférence que l'enregistrement de session PostHog aurait autrement pu capturer. La carte complète, fournisseur par fournisseur, se trouve dans Où s'exécute réellement une réunion InterMIND.
Transparence — sous-traitants et registres de traitement, publiés
La liste des sous-traitants est en ligne, indiquant ce que fait chaque fournisseur et où il est domicilié — et non « disponible sur demande ». Derrière elle se trouve un Registre des Activités de Traitement (ROPA) construit à partir du schéma en production : 11 opérations de traitement, les mesures de sécurité associées à chacune, et les chemins d'effacement / portabilité. Notre Politique de confidentialité et nos Conditions générales sont désormais gérées sous notre propre entité juridique, avec la véritable chaîne de traitement décrite.
Exécution dans l'UE — épinglée, non promise
Chaque saut d'exécution qu'effectue une réunion se trouve dans l'UE : l'application et les API sur Vercel Frankfurt, le serveur de réunion sur Fly Paris, les données applicatives dans Neon Postgres (AWS Frankfurt), les erreurs sur Sentry EU, l'analytique sur PostHog EU, les e-mails via Resend Ireland. Le stockage d'objets sur Tigris est désormais épinglé aux régions de l'UE (Francfort + Amsterdam) — chaque nouvelle écriture atterrit dans l'UE quel que soit l'endroit où se trouve l'utilisateur. L'architecture complète se trouve sur notre page de sécurité.