Owned system of record

A CRM you can audit.

Aurora proves what other CRMs ask you to take on trust. Row-level security in Postgres, policy tests gating every pull request, and an append-only log of who changed what.

See the stack
RLS-enforced
isolation in the database
Self-hosted identity
no per-seat third party
Event-sourced
durable domain outbox
aurora crmQualify
ISOLATION · Multi-tenancy
A query without tenant context returns nothing. By policy, not by convention.
  • Postgres row-level security on every business table
  • RLS policy tests run in CI — an unscoped query must return zero rows or the build fails
  • A single tenant-scoped accessor, so no query can be written unscoped
RLS
Policy-tested in CI
6
Built-in roles
Append-only
Audit log

Tenant isolation is verified on every pull request: a query that forgets its tenant context has to return zero rows, or the build does not merge.

Five foundations, one platform

The parts you only notice when they fail.

Customer data outlives the software that holds it. These are the guarantees Aurora is built on — the things that decide whether you can still trust the record in five years.

ISOLATION · Multi-tenancy

A query without tenant context returns nothing. By policy, not by convention.

Every business table carries a non-null, indexed tenant reference guarded by Postgres row-level security, and all data access funnels through a single scoped accessor. Tenant context is derived server-side from the session and never accepted from the client.

  • Postgres row-level security on every business table
  • RLS policy tests run in CI — an unscoped query must return zero rows or the build fails
  • A single tenant-scoped accessor, so no query can be written unscoped
  • Non-sequential ULID identifiers to prevent record enumeration
How it works

Boring where it counts.

Aurora holds the records a business cannot re-create. The architecture is deliberately conservative: one database, one scoped accessor, one event stream, and a written boundary that keeps business logic off the client.

Runtime
Next.js App Router, TypeScript
Data
Postgres with row-level security
Identity
Self-hosted, 2FA, SSO-ready
Trust boundary
No business logic on the client

Own the record.

Bring the CRM you're trying to leave and the data you're afraid to migrate. We'll walk the isolation model and the import path.