Isolation, enforced in the database.
Isolation between customers is enforced in the database, not only in application code. A request that cannot tell which business it is for is refused, never widened to everything. A session that lands on the wrong customer's address is signed out, with no exception for our own staff.
Roles you define.
328 individual permissions across 53 modules. Five built-in roles, and you can create your own: a custom role works everywhere a built-in one does. Each role carries a data scope, own, team or all, separate from its permissions.
Two-factor sign-in, and limits on it.
Two-factor sign-in with an authenticator app and 10 recovery codes. Re-enrolling needs the current code, so a hijacked session cannot swap the authenticator. Sign-in limits by country, IP range and working hours, set to off, warn or block.
Who changed what, and when.
Every sign-in attempt is logged, with brute-force detection. A field-level audit trail on core records shows who changed which field, and when. It is append-only. Stored credentials are encrypted at rest.
Leavers, handled properly.
Deactivate a leaver and bring them back later, or replace their name and email with a placeholder for good while their past work stays attributed. You set where their open work goes.
Retention you can prove.
Retention policies on 10 record types, enforced every night. Legal holds stop any rule deleting a record, and a queue handles data-subject requests.
Your data, yours to take.
Export your whole account whenever you want, with credentials redacted.
Your customers sign in without a password.
The customer portal uses a magic link, so your customers see their invoices, orders, tickets and help articles without another password to remember.