Wellbore Genius
Help

Security & data isolation

The one-pager enterprise buyers ask for. How tenant data is isolated, how identity is checked, and where the bright lines are. If something here is unclear, email us.

Protections at a glance

Each control below names the place it is actually implemented, so a reviewer can verify it instead of taking our word for it.

Team-scoped row-level security

Every user-data table runs Postgres row-level security keyed on a team id column. One shared team-membership check is the single source of truth — every policy on every table delegates to it. A signed-in user from team A literally cannot select, insert, update, or delete a row that belongs to team B; the database refuses before the server fn returns.

Bearer-validated server functions

Every protected server function declares a sign-in check middleware. The bearer token is re-validated against the auth server on every call — sessions can't be forged client-side, expired tokens are rejected, and the resulting Supabase client acts as the user (RLS still applies). Service-role writes are reserved for trusted webhook handlers behind a signature check.

Scoped public SDK keys

Programmatic access uses per-team API keys minted from the workspace settings UI. Keys are stored hashed (SHA-256, verified server-side only), can be revoked instantly, and carry a last-used timestamp for audit. Public SDK routes live under /api/public/sdk/v1/* and are locked by a 15-test drift-guard suite.

Data residency

Application traffic is served from Cloudflare's global edge (Workers runtime). Tenant data lives in a single managed Postgres region — see request data-residency details for the current region and replication posture. Dedicated single-region deployments can be scoped per pilot on request — there are no published plans yet.

No PII in logs

Server functions never log raw input payloads. The AI Engineer copilot redacts secrets and caps context at 8 KB before any LLM call. Workspace activity logs capture event kinds + subjects (e.g. an AI-engineer event with a simulation name), not free-form fields. External error logs (Cloudflare, Supabase) carry only opaque IDs.

Rate limiting & abuse controls

AI copilot, voice transcription, and manual-search endpoints share one token-bucket limiter keyed per caller. Unauthenticated probes are throttled before any model call so a script cannot burn credits, and a blocked call returns a retry-after hint (in seconds) plus a rate-limited audit event. Limits are declared in one table, so every surface behaves identically.

Transport, encryption & browser hardening

All traffic is HTTPS with HSTS. Managed Postgres and object storage are encrypted at rest by the platform provider. Every response also carries a Content-Security-Policy (it currently still allows inline scripts, eval and two script CDNs), a frame-ancestors restriction (this site and its hosting preview domains only), X-Content-Type-Options: nosniff, and a tight Referrer-Policy — applied centrally in the server middleware, not per route.

SAML 2.0 single sign-on

SAML SSO is available on request for pilot teams, with Okta, Azure AD / Entra ID, Google Workspace, OneLogin, JumpCloud, and any compliant IdP. We configure the connection from your IdP metadata URL — give us the URL and the email domains to claim. SCIM 2.0 user provisioning is on the roadmap. Email us to start the SSO setup.

Compliance & questionnaires

SOC 2 Type II is in progress. For active questionnaires (CAIQ, SIG Lite, vendor risk forms), security architecture reviews, or a signed DPA / BAA, email security@wellboregenius.com with your timeline and we'll route to the right person within 1 business day.

RLS by default
Hashed API keys
SAML SSO
No PII in logs
SOC 2 in progress
Latest scan clean