Trust & Security

How we handle your
tenants and your data.

oxoqa exists because crypto exchanges can't ship blind. The flip side is that we hold credentials, run flows, and capture screenshots against your production stack. Here is exactly how that's done — and why we think it's safe.

01

Tenant isolation

Every customer is a separate workspace, isolated at the row-level by Supabase RLS policies. The runner, the panel, and edge functions all read through the same policies — there is no privileged path that bypasses them. Storage buckets are workspace-scoped; capture URLs are signed and time-limited.

02

Credentials at rest

Tenant credentials — API keys, test-user passwords, Twilio tokens, TOTP secrets — are encrypted at rest using libsodium sealed boxes. Only the runner worker (server-side) holds the decryption key. The panel never sees plaintext. The CLI tool encrypts before insert.

03

Production-mode rails

Two flags protect production tenants from destructive actions. The white-label record has prod_trading_test_enabled (off by default). Each scenario carries prod_safe (defaults to false). Both must be true before api_initiate_withdraw or any destructive action is allowed to dispatch.

04

Capture lifecycle

Screenshots, HAR recordings, and raw network bodies live in three private Supabase Storage buckets. Each bucket has its own retention TTL (7d / 14d / 30d). A scheduled edge function (cleanup-captures) sweeps expired objects. We don't keep what you don't ask us to.

05

Auth and access control

Operator auth supports email+password and magic links. Three roles — admin, qa, viewer — enforce coarse-grained access; RLS enforces fine-grained scoping. Invite flow generates one-time tokens. SSO (OIDC) is on the enterprise roadmap.

06

Audit + observability

Every trigger emits a row in the run_events log: who, what, when, against which tenant. Edge functions log to Supabase's observability stack. The runner streams its own structured events to the panel's Live Console, where they're also persisted.

Commitments

What we'll put in writing.

Data residency
Primary region: eu-west-1. Customer data does not leave the EU unless explicitly opted-in.
Encryption in transit
TLS 1.2+ everywhere. HSTS preload-ready for production.
Encryption at rest
Database disks encrypted by the platform. Sensitive columns additionally encrypted at application layer.
Subprocessor disclosure
Supabase (database + storage), Twilio (SMS), Vercel (hosting), Anthropic (AI scenario generation). Listed and version-tracked.
Vulnerability handling
security@oxoqa.com. We acknowledge within 24h and remediate by severity. Coordinated disclosure preferred.
Right to be forgotten
Workspace deletion cascades through tenants, runs, and captures. Backups age out within 30 days.