Trust & Security

What we do with your meeting data, and how we enforce it.

Every claim below names the mechanism that enforces it, in this codebase, today — not a promise, a policy you can check. Where something isn't true yet, we say so.

Claims & how they're enforced

No hidden or silent recording. Capture starts only from an explicit action you take — there is no "record everything automatically" mode.

Enforced byDesktop Companion requires pressing Record; docs/TRUST_CONSENT_AND_PRIVACY.md §1.1.

A persistent recording indicator is shown in the app window and the system tray for the whole time capture is active.

Enforced byDesktop Companion tray + in-app indicator; docs/TRUST_CONSENT_AND_PRIVACY.md §1.2.

A link you share shows the meeting summary and action items only — never the transcript or the recording — unless you explicitly widen what it includes.

Enforced byPublic share page (`/s/[token]`) renders summary-only by default; team shares mask the transcript unless scope is explicitly set to full.

Marking a meeting "Sensitive" removes it, fail-closed, from AI memory, cross-meeting search, and the AI/MCP connector, and blocks new shares of it.

Enforced byThe `is_sensitive` flag is checked in embed-meeting, extract-memory, search-memory, memory-catchup, and dashboard/lib/mcp/source.ts — all exclude sensitive meetings by default (deny unless explicitly allowed).

AI-inferred speaker names and client-name guesses are visibly labeled "AI guess" until you confirm them — never shown as fact.

Enforced bycomponents/meetings/speaker-editor.tsx renders an "AI guess" badge that only clears once you edit/confirm the label.

Every account's data is isolated with Postgres Row-Level Security — one customer can never read another customer's meetings, transcripts, clients, or settings.

Enforced byRLS is enabled on every table; a CI check (supabase/migration-tests/rls-coverage-drift.ts) fails the build if a new table ships without it.

Deleting your account removes every row you own — meetings, transcripts, clients, forms, audit history — plus the recording files in storage, then your login itself.

Enforced byExplicit ordered cascade + storage purge in dashboard/lib/account/delete-cascade.ts, self-serve from Settings → Danger Zone (POST /api/account/delete).

Deleting a single meeting hides it immediately everywhere — dashboard, search, and AI memory — via soft-delete. Hard deletion of the underlying recording/transcript row is built and tested, but not yet switched on in production, so there is no automatic purge date for a soft-deleted meeting today.

Enforced bymeetings.deleted_at soft-delete today; supabase/functions/purge-deleted-meetings ships with PURGE_ENABLED off and its cron schedule commented out (docs/PRIVACY_RETENTION.md). When it is enabled, FK-cascade correctness is enforced by the CI guard meetings-erasure-cascade-drift.

Outbound webhook deliveries to your own systems (Zapier, Make, n8n, a generic endpoint) are HMAC-SHA256 signed once you set a webhook secret, with a timestamp that blocks replay.

Enforced bysupabase/functions/_shared/webhook-signature.ts signs `${timestamp}.${body}`; receivers verify the signature plus a replay window.

Data is encrypted in transit (TLS) and at rest; Protokol's primary database and recording storage are hosted in the EU.

Enforced bySupabase project hosted in eu-central-1 (platform-managed TLS + at-rest encryption).

Who processes your data

A factual inventory of the vendors involved in running Protokol — not a legal sub-processor agreement (that's the DPA, which lists the same table). Kept in one place (lib/dpa.ts) so this page and the DPA can never drift apart.

VendorPurposeRegion
GoogleCalendar & Drive integration; Gemini AI transcription/analysisEU / US
MicrosoftOutlook calendar & Teams integrationEU / US
SupabaseDatabase, auth & file storageEU (eu-central-1)
BrevoTransactional email (recaps)EU
PaddlePayments (merchant of record)EU / US
VercelDashboard hosting & CDNGlobal edge

What we don't claim

  • No certification is claimed. Protokol does not hold SOC 2, ISO 27001, or HIPAA certification today.
  • No accuracy percentage is claimed for transcription or extraction. Every dossier answer links back to an exact quote in the transcript so you can check it yourself.
  • Automatic purge of soft-deleted meetings is not live yet — the scheduled hard-delete job exists in code but ships disabled. See "Deleting a meeting" above.

Verify an evidence pack

Handed a Compliance Evidence Pack by one of our customers? Check its integrity and export provenance yourself — no login required.

Go to the pack verifier