We're a security company. Our customers trust us with their most sensitive telemetry. Here's exactly how we protect it.
Every database row carries a TenantId column. All EF Core queries are scoped to the authenticated tenant at the ORM level — a query cannot return another tenant's data without bypassing the typed DbContext. The event store, the cache and the job queue are shared infrastructure, not one instance each: isolation there comes from every read carrying a mandatory tenant filter, which is the part covered by regression tests. We would rather tell you where the boundary actually is than claim a separation we do not run.
| Layer | How we protect it |
|---|---|
| Database | PostgreSQL with TenantId row-level scoping enforced at ORM level on every table |
| Event store | One PostgreSQL table shared by every tenant; every read carries a mandatory tenant filter, enforced by test |
| Transport | TLS 1.2 or 1.3 from your browser to Railway's edge, which terminates it before requests reach the app. TLS 1.0 and 1.1 are refused |
| Secrets | Environment variables injected at deploy time, never committed to source code |
| Backups | Hourly PostgreSQL backups and a daily archive of the security-event store, both to Amazon S3 with server-side encryption. Railway also takes recurring volume backups |
We run a live penetration test against ClearSOC — actively attempting cross-tenant data access, authentication bypass, and privilege escalation — alongside OWASP ZAP baseline scans on every major release. A passing harness tells you what the harness covered, not what the product withstands; see the correction below. Our CI pipeline runs static analysis (Roslyn analyzers) and secret scanning on every pull request, and dependencies are monitored for CVEs via GitHub Dependabot and patched within 7 days of disclosure.
state parameter and allowed an unauthenticated cross-tenant compromise. That finding and two further launch blockers are closed, each covered by a regression test that fails against the pre-fix code. Our current security report opens with a table of the July claims that were not true when we made them.We take vulnerability reports seriously. There is no staffed rotation behind the address yet, so response is best-effort while we are pre-launch — the same thing the trust center says, because a promise that differs between two pages is not a promise. Please don't publicly disclose until we've had a chance to fix and ship.
Talk to our team before you sign. We're happy to answer anything.
Contact security team