Trust

Security, compliance and AI governance

What is implemented today, what is committed at first production tenant, and what is not in place yet. Stated as facts so a procurement review can be answered from this page rather than from an email thread.

Current status

Service stagePre-launch. The marketing site is in production; the authenticated platform is in development and holds no client data.
Production tenantsNone yet. No client data has been processed on this platform.
What this page describesThe controls implemented in the codebase today and the commitments that apply at first production tenant. Where a control is designed but not yet operating, the row says so.
Independent assuranceNone held. No SOC 2, no ISO 27001, no completed penetration test. Controls below are mapped to the SOC 2 CC series; no audit has commenced.

Maintained in docs/deployment.md

Authorisation and tenant isolation

Isolation modelPostgreSQL Row Level Security. Every tenant table has RLS enabled and a deny-by-default policy; access is added per audience, never assumed.
Tenant keyEvery tenant row carries org_id, set by database trigger and frozen by trigger. It cannot be supplied or altered by the caller.
Client-side checksNot used for authorisation. A role value in the interface controls what is displayed, never what is readable.
How isolation is verifiedEvery table ships with a policy test asserting positive, negative and privileged cases. CI fails a schema change with no matching test, and a cross-org read must return zero rows.
Retrieval isolationVector search runs through a SECURITY INVOKER function so row-level policies apply to retrieval itself, not only to the tables behind it.

Maintained in docs/rls.md

Encryption and access

In transitTLS 1.3, HSTS enabled, HTTP redirected to HTTPS.
At restAES-256, provided by Supabase at the storage and database layer.
Database rolesRoutine server and Edge code connects as a least-privilege role (job_worker or ledger_writer). service_role is break-glass only.
SecretsHeld in the platform secret store, never in the repository. The JWT signing secret and database password are in no environment file; CI scans every commit for leaked credentials.
Administrative accessNamed accounts only, no shared logins. Privileged actions write an append-only audit row at the database, so a new code path cannot bypass the trail.

Maintained in docs/security.md

Subprocessors and data residency

Published listEvery provider touching personal data is listed with purpose, data categories, region and DPA status: Supabase, Vercel, Anthropic, Google, OpenAI, ElevenLabs, Twilio, Meta, Stripe, Razorpay, Resend, Sentry, Axiom, PostHog, Documenso, Cal.com, Wise.
Change noticeThe list is versioned and clients are notified before a new subprocessor is added.
Primary data regionFixed per project at creation and recorded in the contract. Data residency is a contractual claim, and an unrecorded one cannot be honoured.
Model providersRequests may be processed outside the primary region. Where that is unacceptable for a workload, the model routing for it is restricted in configuration, not by policy statement.

Maintained in docs/compliance.md

AI governance

Training on client dataNot permitted. This is enforced as a provider setting, recorded with the setting name and re-verified quarterly. A provider that cannot offer zero-retention does not receive client data.
LabellingEvery AI-authored external message is labelled as AI in the interface and recorded in the audit log with model, prompt version and cost.
CommitmentsNo agent can commit to a price, scope or date. The constraint is structural — the write path does not exist — rather than an instruction in a prompt.
Human oversightRequired wherever an output reaches a client or a record. Generated content remains a draft until a named person accepts it, and the acceptance is logged.
Sensitive dataPersonal data flagged sensitive is redacted before any third-party model call.
Generated mediaLabelled as generated wherever it appears. We do not publish AI-generated imagery depicting real people, clients or events.
Untrusted contentUploads, inbound messages and scraped pages are treated as data and never enter a system prompt as instructions.
EU AI ActTransparency obligations for systems interacting with people are met by the labelling above and by voice self-identification. Higher-risk classifications are not currently assessed as applying; this is re-assessed at each phase gate.

Maintained in docs/ai-agents.md

Data protection rights

RegimesUK and EU GDPR, and India's DPDP Act.
ErasureSupported, with a documented runbook. Financial records carry a legal retention obligation that overrides erasure; the rest of the subject's data is removed.
Export and portabilitySubject data is exportable in a machine-readable format on request.
ConsentRecorded in a consent registry with the basis, the timestamp and the version of what was consented to. Consent is provable, not asserted.
DPAAvailable on request and signed before any client data is processed.

Maintained in docs/compliance.md

Retention schedule

Financial records, invoices, ledger7 years (legal obligation)
Contracts and signature audit trailsLife of contract plus 7 years
Audit log7 years
Call recordings12 months, then transcript only
Chat transcripts24 months from last activity
Anonymous sessions and touchpoints13 months
Marketing engagement events24 months
Application logs90 days
BackupsPoint-in-time recovery 7 days; encrypted cold storage 35 days
EnforcementA scheduled job with a dry-run mode, not intention. Each stored file carries a retention class and every deletion is logged.

Maintained in docs/compliance.md

Incident response

Notification commitmentAffected clients are notified without undue delay and within 72 hours of becoming aware of a personal data breach, per GDPR Article 33 timing.
ProcessA documented runbook covering detection, containment, assessment, notification and post-incident review.
Post-incident reviewWritten for every incident, with the corrective action tracked to completion.
StatusThe runbook exists and is rehearsed against restore drills. It has not yet been exercised against a real production incident, because there has not been one.

Maintained in docs/runbooks/incident.md

Availability and recovery

Uptime historyNone published. There is no production tenant history to report. Publishing a figure we have not measured would make every other row on this page less credible.
Target at first production tenant99.9% monthly for the authenticated platform.
BackupsPoint-in-time recovery for 7 days; nightly logical dump to encrypted cold storage for 35 days.
Restore testingRestore drills are run from the documented runbook, which is what makes a backup a recovery.
Database migrationsRun from CI only, never from a workstation, and every migration must be backward compatible with the deployed application.

Maintained in docs/deployment.md

Accessibility

Target conformanceWCAG 2.2 Level AA.
Current statusNot independently audited and no conformance report published. Components are built to the target — keyboard completeness, visible focus, colour never the only signal, named regions — and automated checks run in CI.
Known gapsNo formal audit has been carried out, so gaps found only by assistive-technology testing are unknown rather than absent.
Reporting a barrierThrough the contact route on this site. Accessibility defects are triaged as defects, not as requests.

Maintained in docs/design-system.md

Something here out of date, or a question this page does not answer? Ask, and the answer becomes a row on this page rather than a reply only you can see.