[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-vi-/where-one-intermind-meeting-actually-runs":3},{"page":4,"surround":561},{"id":5,"title":6,"authors":7,"badge":10,"body":11,"date":551,"description":552,"extension":553,"heroOrder":542,"image":554,"meta":555,"navigation":556,"path":557,"seo":558,"stem":559,"__hash__":560},"blog/blog/where-one-intermind-meeting-actually-runs.md","Where one InterMIND meeting actually runs",[8],{"name":9},"The Mind.com Team","Sovereignty",{"type":12,"value":13,"toc":540},"minimark",[14,18,27,30,33,53,56,61,64,80,83,85,89,92,214,217,219,223,387,390,392,396,411,461,464,483,494,496,500,508,515,521,523,527,537],[15,16,6],"h1",{"id":17},"where-one-intermind-meeting-actually-runs",[19,20,21,22,26],"p",{},"Every serious enterprise procurement conversation eventually reaches the same question: ",[23,24,25],"em",{},"\"Where does this data go?\""," The DPO wants a sub-processor list. The CIO wants to know which vendors are US-domiciled. Legal wants a diagram with arrows.",[19,28,29],{},"We'd rather you have the full picture than ship it piece by piece over email. So here is the data path of one meeting — every external service it touches, where each one executes, and what data flows through it. Verified against the actual deployment configuration on 2026-05-28.",[19,31,32],{},"Every path that touches meeting content is EU at runtime — including the post-meeting AI steps, which we used to flag as the one gap and have since moved onto EU processors. We say plainly where the one remaining US model sits, and why it never sees your meeting.",[19,34,35],{},[23,36,37,38,42,43,48,49,52],{},"This post maps ",[39,40,41],"strong",{},"where"," your meeting runs. Its companion, ",[44,45,47],"a",{"href":46},"/blog/what-one-intermind-meeting-is-built-from","What one InterMIND meeting is built from",", maps ",[39,50,51],{},"what it's built from"," — which layers are our own code, which are open-source, and where we're pragmatic about proprietary SaaS.",[54,55],"hr",{},[57,58,60],"h2",{"id":59},"what-where-it-runs-actually-means","What \"where it runs\" actually means",[19,62,63],{},"Two things get conflated in sovereignty conversations and they are not the same thing:",[65,66,67,74],"ol",{},[68,69,70,73],"li",{},[39,71,72],{},"Runtime / data path."," Where the bytes of your meeting are physically processed during the request. This is what data-residency regulations and most DPAs are actually about.",[68,75,76,79],{},[39,77,78],{},"Vendor corporate domicile."," Where the SaaS vendor is legally incorporated. This is what CLOUD-Act discussions are about — the theoretical reach of a US compulsion against the vendor's parent entity, regardless of where the workload runs.",[19,81,82],{},"Almost every \"is this EU?\" question is really one of these two, asked imprecisely. We answer them separately for every vendor below.",[54,84],{},[57,86,88],{"id":87},"the-data-path-of-one-meeting","The data path of one meeting",[19,90,91],{},"Trace one call from join to follow-up email:",[65,93,94,105,115,128,141,151,165,175,188,200],{},[68,95,96,99,100,104],{},[39,97,98],{},"Browser opens the meeting page."," SSR runs on Vercel, pinned to ",[101,102,103],"code",{},"fra1"," (Frankfurt). All request/response data — session cookies, API payloads, server-rendered HTML — is processed in EU at runtime.",[68,106,107,110,111,114],{},[39,108,109],{},"WebSocket connects to our meeting server"," in Paris (",[101,112,113],{},"cdg","). Meeting orchestration, presence, signalling — all EU.",[68,116,117,120,121,127],{},[39,118,119],{},"Speech recognition runs in the speaker's browser."," Local. Never leaves the device until the resulting transcript is sent for translation. (We covered why in ",[44,122,124],{"href":123},"/blog/inside-the-translation-pipelines",[23,125,126],{},"Inside the four translation pipelines",".)",[68,129,130,133,134,140],{},[39,131,132],{},"Voice and chat translation hit our own engine on OVH France."," This is ",[39,135,136,139],{},[101,137,138],{},"mind-sdk"," + the Mind API"," — our code, our hosts, in France. No third-party model is in the loop. Sub-second budget, per-language WebSocket pool, EU-resident at every hop.",[68,142,143,146,147,150],{},[39,144,145],{},"A document dropped into chat"," (PDF, DOCX, PPTX, XLSX) goes server-side from the Paris ws-server to ",[39,148,149],{},"DeepL"," in Cologne. German company, German processing. Voice and chat do not touch DeepL.",[68,152,153,156,157,160,161,164],{},[39,154,155],{},"Application data"," — users, teams, messages, meeting metadata — lives in ",[39,158,159],{},"Neon Postgres on AWS Frankfurt"," (",[101,162,163],{},"eu-central-1","). Snapshots in the same region.",[68,166,167,170,171,174],{},[39,168,169],{},"Recordings, attachments, exports"," are stored on ",[39,172,173],{},"Tigris",", S3-compatible storage on Fly. Edge-replicated; the bucket is configurable to multi-region EU for tenants who need it pinned tighter.",[68,176,177,180,181,160,184,187],{},[39,178,179],{},"Errors and performance traces"," go to ",[39,182,183],{},"Sentry's EU instance",[101,185,186],{},"de.sentry.io","). The US org was retired in May.",[68,189,190,180,193,160,196,199],{},[39,191,192],{},"Product analytics",[39,194,195],{},"PostHog EU",[101,197,198],{},"eu.i.posthog.com",").",[68,201,202,205,206,209,210,213],{},[39,203,204],{},"Transactional email"," (magic links, invites, receipts) goes via ",[39,207,208],{},"Resend"," out of ",[101,211,212],{},"eu-west-1"," (Ireland).",[19,215,216],{},"Everything above is EU at runtime. The translation engine — the part most of your data actually flows through — is also our own code, not a third party's. The client SDK it runs on is open-source (BSD-3-Clause) and auditable today; self-hosting the engine itself is on the roadmap for a customer who needs it.",[54,218],{},[57,220,222],{"id":221},"the-vendor-map","The vendor map",[224,225,226,242],"table",{},[227,228,229],"thead",{},[230,231,232,236,239],"tr",{},[233,234,235],"th",{},"Vendor",[233,237,238],{},"What it does",[233,240,241],{},"Runtime location",[243,244,245,262,278,294,309,321,333,348,361,374],"tbody",{},[230,246,247,256,259],{},[248,249,250,160,253,255],"td",{},[39,251,252],{},"OVH",[101,254,138],{}," + Mind API)",[248,257,258],{},"Voice + chat translation engine",[248,260,261],{},"France",[230,263,264,269,272],{},[248,265,266],{},[39,267,268],{},"Fly.io",[248,270,271],{},"Meeting WebSocket orchestration",[248,273,274,275,277],{},"Paris (",[101,276,113],{},")",[230,279,280,286,289],{},[248,281,282,285],{},[39,283,284],{},"Vercel"," (Nuxt + Nitro APIs)",[248,287,288],{},"App shell, server APIs, SSR",[248,290,291,292,277],{},"Frankfurt (",[101,293,103],{},[230,295,296,301,304],{},[248,297,298],{},[39,299,300],{},"Neon",[248,302,303],{},"Application Postgres",[248,305,306,307,277],{},"AWS Frankfurt (",[101,308,163],{},[230,310,311,315,318],{},[248,312,313],{},[39,314,173],{},[248,316,317],{},"Object storage (recordings, attachments)",[248,319,320],{},"Edge-replicated; EU-pinnable",[230,322,323,327,330],{},[248,324,325],{},[39,326,149],{},[248,328,329],{},"Document translation (PDF/DOCX/PPTX/XLSX)",[248,331,332],{},"Cologne",[230,334,335,340,343],{},[248,336,337],{},[39,338,339],{},"Sentry",[248,341,342],{},"Error tracking",[248,344,345,347],{},[101,346,186],{}," (EU)",[230,349,350,355,357],{},[248,351,352],{},[39,353,354],{},"PostHog",[248,356,192],{},[248,358,359],{},[101,360,198],{},[230,362,363,367,369],{},[248,364,365],{},[39,366,208],{},[248,368,204],{},[248,370,371,372,277],{},"Ireland (",[101,373,212],{},[230,375,376,381,384],{},[248,377,378],{},[39,379,380],{},"Stripe",[248,382,383],{},"Payments",[248,385,386],{},"Ireland (Stripe Payments Europe Ltd.) for EU customers",[19,388,389],{},"The two heaviest data flows by volume — voice/chat translation through our own engine on OVH and document translation through DeepL — also happen to be the two vendors whose parent entity is in the EU. That covers the bulk of meeting content. The full sub-processor list with corporate-domicile detail goes into the DPA as standard practice; the table above is the runtime view, which is what most data-residency clauses are about.",[54,391],{},[57,393,395],{"id":394},"the-post-meeting-ai-steps-named-plainly","The post-meeting AI steps, named plainly",[19,397,398,399,402,403,406,407,410],{},"After the call ends we run a few language-model steps on what was said: the ",[39,400,401],{},"AI digest"," (topics, decisions, action items, open questions), the ",[39,404,405],{},"post-meeting summary",", and the ",[39,408,409],{},"AI note-editor"," (translate a note, or fix / extend / simplify it). These are the only places a general-purpose model touches meeting-derived content — and all of them now run on EU processors:",[412,413,414,436,450],"ul",{},[68,415,416,417,420,421,160,424,427,428,431,432,435],{},"The ",[39,418,419],{},"digest"," runs on ",[39,422,423],{},"EU-hosted Mistral",[101,425,426],{},"mistral-large-3",", ",[101,429,430],{},"mistral-medium-3.5"," fallback), reached through Vercel's AI Gateway pinned to the Mistral provider with ",[39,433,434],{},"zero-data-retention"," — the request fails rather than falling back to a non-ZDR or US host.",[68,437,416,438,441,442,445,446,449],{},[39,439,440],{},"summary"," and the editor's ",[39,443,444],{},"translate"," action go through ",[39,447,448],{},"our own EU engine"," on OVH — the same one that translates live voice and chat — so the summary never leaves the data plane the meeting already lived in.",[68,451,452,453,456,457,460],{},"The editor's ",[39,454,455],{},"generative"," actions (fix, extend, reduce, simplify, summarize) can't run on a translation engine, so they use the ",[39,458,459],{},"same EU Mistral + zero-data-retention"," path as the digest.",[19,462,463],{},"Real-time voice, real-time chat, notes, and document translation never go through any of these — they were EU-resident from the start.",[19,465,466,467,470,471,475,476,482],{},"The one place a US-domiciled model is still in the loop touches ",[39,468,469],{},"no meeting data",": our public ",[44,472,474],{"href":473},"/benchmark","translation-quality benchmark"," uses a frontier model as an automated judge, scoring machine translations of ",[44,477,481],{"href":478,"rel":479},"https://github.com/facebookresearch/flores",[480],"nofollow","FLORES-200"," reference sentences. That's a fixed, public dataset — not anyone's meeting.",[19,484,485,486,489,490,493],{},"We're still going further on the EU-Mistral steps: a planned ",[39,487,488],{},"owner-controlled opt-out"," to disable the digest entirely, and a ",[39,491,492],{},"self-hosted open-weights model (Kimi-class) on OVH"," to replace the external Mistral for summarization tasks that don't need a frontier reasoner. Both are on the roadmap, not shipped; we'll update this post when they land.",[54,495],{},[57,497,499],{"id":498},"what-this-means-for-your-dpa","What this means for your DPA",[19,501,502,503,507],{},"For most EU buyers — German Mittelstand, regulated industries running standard GDPR DPAs — the picture above answers the data-residency question directly: every runtime hop your meeting takes is in the EU. Vendor-domicile gets disclosed in the sub-processor list per normal practice; nothing surprising there. The residency map is one piece; for the rest of the data-protection obligations — erasure, retention, portability, consent — we ran the codebase through a full audit and ",[44,504,506],{"href":505},"/blog/gdpr-audit-what-we-closed","closed each item against the code",".",[19,509,510,511,514],{},"For French ",[23,512,513],{},"souveraineté numérique"," and SecNumCloud-grade procurement, vendor corporate domicile is itself part of the criterion, not just runtime location. That's a different conversation — an alternative deployment topology that keeps every component under European-jurisdiction vendors. We don't run that by default; we'll spin it up for a tenant that needs it and where the contract justifies the build.",[19,516,517,518,520],{},"For US-domestic and most APAC buyers, the inverse is usually true — they want low latency from their region, which is a different problem. Today we run single-region in ",[101,519,103],{},". If your traffic justifies a US edge, we'll plan that with you.",[54,522],{},[57,524,526],{"id":525},"what-this-post-commits-us-to","What this post commits us to",[19,528,529,530,533,534,536],{},"This is the picture on 2026-05-28. We'll update it when the stack changes — vendor swap, region migration, a new external service. The current configuration is verifiable in our open ",[101,531,532],{},"vercel.json",", the ",[101,535,138],{}," + Mind API engine running at OVH France, and every vendor's own dashboard.",[19,538,539],{},"If something here looks wrong, or your DPO needs an answer this map doesn't give, write us. We'd rather correct a missing detail than have you discover it in a contract review.",{"title":541,"searchDepth":542,"depth":543,"links":544},"",2,3,[545,546,547,548,549,550],{"id":59,"depth":542,"text":60},{"id":87,"depth":542,"text":88},{"id":221,"depth":542,"text":222},{"id":394,"depth":542,"text":395},{"id":498,"depth":542,"text":499},{"id":525,"depth":542,"text":526},"2026-05-28","A vendor-by-vendor map of which external services touch your meeting, where they execute, and what data passes through each — including the post-meeting AI steps, all of which now run on EU processors.","md","/blog/where-one-intermind-meeting-actually-runs.svg",{},true,"/blog/where-one-intermind-meeting-actually-runs",{"title":6,"description":552},"blog/where-one-intermind-meeting-actually-runs","tCxWcV7ci24Hf__HB25UXdplj9WaZ8vxXP7yiMdSJi0",[562,565],{"title":47,"path":46,"stem":563,"description":564,"children":-1},"blog/what-one-intermind-meeting-is-built-from","A companion to our runtime map: not where your meeting runs, but what it's built from. The layer-by-layer stack — where we run our own code or open-source software, where we're pragmatic about proprietary SaaS, and why the engine most of your data flows through is our own code, with a public, BSD-licensed client SDK.",{"title":566,"path":567,"stem":568,"description":569,"children":-1},"The false-fluency trap: when \"good-enough\" English is worse than no English","/blog/false-fluency-trap","blog/false-fluency-trap","Aviation regulators mandated it after Tenerife and Avianca. Medical literature quantifies it down to error counts per patient encounter. Forty years of international-business research documents the same mechanism in the boardroom. Why partial fluency in a shared language is worse than no shared language at all — with the data."]