Security

We sell compliance.
We practise it.

Customs declarations, suppliers and costs are commercially sensitive data. Here's how we handle them — in detail, because "we take security seriously" means nothing.

🔒 Isolation enforced by the database

Every company is isolated with PostgreSQL Row-Level Security in FORCE mode: it's the database that prevents cross-company access, not just the application. The app runs under a role with no bypass privileges; without a company context, the answer is zero rows.

🧪 Tested on every change

An automated suite attempts to read and write another company's data on every single code change — including a guard that fails if someone accidentally removes the protections. If it doesn't pass, the code doesn't ship.

🇪🇺 Data and AI in Europe

Infrastructure and AI models in EU regions (Azure). Your documents never leave the European perimeter, even during automated analysis.

💳 No card details with us

Payments are handled by Stripe (hosted checkout and portal): card numbers and bank details never pass through — and are never stored on — our systems.

👁 Even our own staff has limits

The back office sees counts and metadata (how many declarations, how many logins), never the contents: no declaration numbers, supplier names or financial values. And it's a database constraint, verified — not a trust-based policy.

📜 Complete audit log

Every creation, change, deletion and export is tracked with user, date and IP. Passwords hashed with bcrypt, mandatory email verification, rate limiting, full security headers.

🔑 Strong authentication

Optional MFA via TOTP app, passwordless login with an emailed code, password policy with a minimum length and character variety. Sessions can be revoked, lockout after failed attempts.

Technical questions or a DPA request? Get in touch. A technical deep dive on how the isolation is built is coming soon to our resources.