Designed to be audited.
Multi-tenant isolation, role-based access control, append-only audit logs, and immutable snapshots. Every control is enforced server-side.
Every organisation's data is strictly scoped at the query level. No tenant can access another organisation's records, files, or calculations — isolation is enforced in the data layer, not just in route handlers.
Six roles govern what each user can see and do: admin, editor, reviewer, viewer, auditor, and field worker. Role assignment is managed server-side. Client-supplied claims are never trusted for authorisation decisions.
Evidence files, import data, and generated reports are stored in isolated object storage. Clients never receive raw storage keys or bucket credentials. All download links are short-lived, server-generated signed URLs issued only after authentication and membership verification.
Every authentication event, role change, data import, record mutation, calculation run, snapshot publication, report download, and submission review is permanently recorded. Audit rows are never modified or deleted, providing a tamper-evident trail for SECR and ISO 14064-1 compliance.
Publishing a snapshot locks the underlying calculation run. Reports produced from that snapshot will always reproduce the same figures. Recalculation produces a new versioned snapshot — prior versions are preserved and unchanged.
Authentication, upload, and mutation endpoints are rate-limited per IP address. Limits are enforced before any route handler executes. Requests that exceed the limit receive a 429 response with a Retry-After header.
Every response carries security headers: clickjacking protection, content-type sniffing prevention, strict referrer policy, a permissions policy that restricts access to device APIs, and HSTS in production. Applied globally in middleware.
External users (subcontractors, suppliers, tipper hires) operate in a strictly limited mode. They can submit evidence for the reporting periods they were invited to and check the status of their own submissions — nothing else.
No external auth dependencies.
Authentication runs entirely on your own infrastructure. Session data lives in your database, not a third-party auth service, so you have full custody of who has access and when. Mobile clients use short-lived tokens with automatic renewal.
Files are stored in isolated, access-controlled object storage. Each organisation's content is scoped to its own namespace. Download links expire after a short window and are only issued to authenticated, authorised users.
Cross-tenant access is a P0 security bug, enforced in the data layer.
Audit rows are append-only. Never updated. Never deleted.
Calculation results are immutable after publication.
Field worker scope is zero, no org data, no other users.
Security questions? Talk to the team.
We're happy to walk through the controls architecture, data residency, and compliance positioning.
Get in touch