Skip to main content

Start with a real workspace: choose a per-seat plan and begin a 7-day trial. View plans

Row-level security in Postgres scopes every firm's records, so a request for a matter you are walled off from comes back empty rather than telling you it exists. Ethical walls hide a matter from the people it names, and changes to a role or a wall are logged with the person who made them.

Each control below is shipped and running today, not a policy we intend to adopt. The database scopes every firm’s rows, the server decides what a role may do on each request, provider keys never reach the browser, and a change to a role or an ethical wall is written to an audit trail with the person who made it.

Row-level security

Firm-owned records are scoped by tenant-scoped policies enforced in Postgres. The check runs in the database, on every read and write.

Roles checked on the server

Firm roles, from owner down to paralegal, carry per-module permissions. Authenticated server routes enforce them; the browser does not decide.

Secrets stay server-side

Provider keys and internal secrets are read on the server only. Provider-managed encryption at rest and encrypted transport cover the data path.

Role and wall changes are logged

Changing a member's role, raising or lifting an ethical wall, and exporting firm data each write an audit entry with the time and the person who did it.

Every record carries the firm it belongs to, and the database checks that firm before a row is ever returned, so a leak has to get past the engine rather than a forgotten filter in application code. The client portal is that same rule seen from outside: a client is shown the records the firm shared with them, and nothing else in the workspace.

An example of shared client records. This fictional preview illustrates the portal contents, not a test of tenant isolation.Okafor & Byrne LLP, a fictional firm.

Conflict screening raises a review event; it never changes access on its own. When an administrator applies a wall to a matter, the walled attorneys and staff cannot open it, search it, or confirm it exists at all. The check is row-level security in the database, so a walled person receives no rows rather than a greyed-out link that admits the matter is there.

  • Applied per matter by an authorised administrator
  • Walled people get no rows back, not a greyed-out link
  • Raising or lifting a wall is itself an audited event

AI requests go server-side to the provider the firm configured, on the firm’s own key if it has one. LawAOS does not use firm content to train its own models. Each provider has its own retention, region and contractual terms, and the firm reviews them before client-confidential material is sent.

  • Multiple providers supported, including firm-provided keys
  • Using an AI feature does not by itself establish or preserve privilege

What leaves the firm's workspace, what never does, and the terms attached to each. Firm content is not used to train our models, and a firm administrator can export the records they are entitled to at any time.

  • Firm data is not used to train LawAOS models
  • Provider-managed encryption at rest and encrypted transport
  • Service providers receive only the data needed for the configured service
  • Supported record exports for authorised firm administrators
  • Postgres row-level security scopes tenant-owned records

Live means shipped and enforced today. Roadmap means not yet built. Nothing on this list is implied, and every certification we do not hold says so in as many words rather than hiding behind a logo.

Ethical wallsLive

Applied per matter by an authorised administrator and enforced by row-level security. A walled person cannot open the matter or confirm it exists.

Audit trailLive

Role changes, ethical-wall changes and firm data exports are logged with the actor and time. Per-module permission toggles are not yet audited; a compliance review should know that.

Data exportLive

Supported record exports are available to authorised firm administrators. Firm data is the firm's to take.

SOC 2 Type IINot held

We do not hold a SOC 2 attestation. It is on the roadmap, and we would rather say so than imply otherwise.

ISO 27001Not certified

Our practices draw on ISO/IEC 27001. We do not hold the certification.

SCIM provisioningLive

SCIM v2 lets a firm's identity provider invite, update and deactivate members, with a bearer token issued in Settings, Provisioning. Firm roles are exposed as read-only groups.

SSO / SAMLRoadmap

Not yet available. Sign-in today is email and password or a magic link. Google is available only when creating a new firm. The client portal has its own links.

Multi-factor authenticationLive

Each member can turn on two-factor sign-in with an authenticator app (TOTP); once on, every sign-in requires the code. A firm administrator can require two-factor for every member, with a grace period; after it, a member without a verified authenticator is refused data access until they enrol. Hardware keys are not yet available.

IP allowlistingRoadmap

Not yet available. Planned as firm-set ranges for offices and VPN exits.

GDPR and data residencyReview required

The shared deployment runs one configured database region (Asia-Pacific, Sydney). Residency, processing terms, retention and data-subject workflows are reviewed and documented per regulated deployment.

Health data (HIPAA)By agreement

Firms holding protected health information complete a security, provider and contractual review before storing it. The public application does not claim HIPAA compliance by default.

California privacy (CCPA)Via support

Access and deletion requests from California residents are handled through support. Broader workflows are documented per regulated deployment.

Each control names the code or database migration that implements it. Reviewers can inspect those references under NDA. Partial means the tooling exists but a published commitment does not.

Tenant isolation in the databaseLive

Firm-owned tables carry a firm_id and row-level security policies scoped to the caller's visible firms. The check runs in Postgres on every read and write, not in application code.

Evidence reference

  • supabase/migrations/20260803000010_scope_rls_to_the_active_firm.sql
  • supabase/migrations/20260801910000_rls_static_audit_and_the_is_admin_self_grant.sql
  • apps/web/lib/rls-once-per-statement.contract.test.ts
Two-factor sign-in enforced by the databaseLive

Members can enrol an authenticator app (TOTP). A firm can require two-factor for every member after a grace period. Enforcement is a database boundary: a pre-request hook and a restrictive policy on every row-level-secured table refuse an unassured session.

Limits: Hardware security keys and SAML single sign-on are not available.

Evidence reference

  • supabase/migrations/20260930100100_session_assurance_boundary.sql
  • supabase/migrations/20261014110000_two_factor_required_after_thirty_days.sql
  • apps/web/lib/auth/session-assurance.ts
Ethical wallsLive

An administrator can bar named people from a matter. Row-level security returns no rows to a barred person, so the matter is not shown to them at all.

Evidence reference

  • supabase/migrations/20260621000024_audit_w3_ethical_walls_privilege.sql
  • supabase/migrations/20260726000041_matter_visibility_rls_leaks.sql
Tamper-evident audit logLive

The record-level and security audit trails are sealed every minute: each batch of rows is hashed into a Merkle tree and the seal is chained to the previous seal, so an edited or removed row is detectable.

Limits: Sealing proves tampering after the fact; it does not prevent a database owner from altering rows.

Evidence reference

  • supabase/migrations/20261018110000_audit_seals_tamper_evident.sql
  • apps/web/app/api/cron/audit-seal/route.ts
  • apps/web/lib/audit-integrity/proof.ts
EncryptionLive

Data at rest is encrypted by our hosting provider (Supabase, on AWS). Traffic is served over TLS. Stored third-party credentials (firm AI keys, integration tokens) are additionally encrypted by the application before they are written.

Limits: Customer-managed keys (BYOK) are not available.

Evidence reference

  • apps/web/lib/ai/key-crypto.ts
  • apps/web/lib/integrations/credential-crypto.ts
  • supabase/migrations/20260812202100_vault_wrap_legacy_smtp_credentials.sql
Backup and restore toolingPartial

Scripted database and file-storage backup, restore and recovery-drill tooling exists, with a written runbook that measures recovery time only after restored data is verified.

Limits: We do not publish a recovery-time or recovery-point commitment yet; drill results are shared under NDA when available.

Evidence reference

  • scripts/recovery/backup-database.sh
  • scripts/recovery/restore-database.sh
  • scripts/recovery/run-recovery-drill.sh
  • docs/RECOVERY-DRILL-RUNBOOK.md
Rate limitsLive

Sign-up, invitation acceptance, password reset, client-portal sign-in links, public forms, SCIM and AI routes are rate-limited in the database. For those routes a limiter that cannot answer refuses the request rather than allowing it.

Evidence reference

  • supabase/migrations/20260614000010_db_backed_rate_limiter.sql
  • apps/web/lib/ratelimit.ts
SCIM provisioningLive

A firm's identity provider can create, update and deactivate members through SCIM v2 with a firm-issued bearer token.

Limits: SAML / OIDC single sign-on is not available yet.

Evidence reference

  • supabase/migrations/20260621000034_scim_provisioning.sql
  • apps/web/lib/scim/scim.ts
  • apps/web/app/api/scim/v2
Firm data exportLive

Authorised firm administrators can export the firm's records; exports are logged.

Evidence reference

  • apps/web/lib/exit-kit/exporter.ts
  • apps/web/lib/exit-kit/audit.ts
Data processing agreementLive

Firms accept a versioned DPA in the product. The acceptance records the exact text hash, signer and time, and cannot be edited afterwards.

Evidence reference

  • supabase/migrations/20261017160000_gdpr_dpa_acceptance_and_consent.sql
Published sub-processor listLive

Sub-processors are listed per region cell with purpose, data categories and region, with a dated change log and a way to ask to be told about changes.

Evidence reference

  • apps/web/lib/trust-center/subprocessors.ts
  • supabase/migrations/20261026090000_w52_trust_center.sql

In progress means planned, with no date promised. Our sub-processors are listed per region with a dated change log, and the data processing agreement page shows its current version.

Independent penetration testNot started

An annual third-party test is planned. No report exists yet.

Customer-managed encryption keys (BYOK)Planned

Not available.

Request the security documentation, an internal audit summary, or a review call under NDA. Security enquiries are answered by the engineering team, and we aim to reply within one business day.