Signed webhooks only
Every inbound WhatsApp webhook is verified against its provider's signature (HMAC-SHA256 for Meta) before it's processed. Unsigned or invalid requests are acknowledged and dropped.
Role-based access, enforced server-side
Four roles — Owner, Admin, Manager, Staff — gate what a user can do. Role changes are capped server-side: an Admin cannot grant themselves or anyone else the Owner role, and cannot change their own role at all. Every admin action is re-checked against the caller's actual role on the server, not just hidden in the UI.
Tenant isolation
Every table is scoped to an organization. Cross-tenant writes are blocked at the database query level, not just filtered out of the response.
An audit trail that can't be edited after the fact
Invoice, lead, and billing changes are recorded in an append-only event ledger. Application code only ever inserts into it — there is no code path that updates or deletes a past entry.
Passwords and sessions
Passwords are hashed with bcrypt and never stored in plain text. Sessions are signed JWTs; sensitive tokens (WhatsApp API keys, webhook secrets) are never returned to the browser.
Encrypted in transit and at rest
All traffic runs over HTTPS/TLS. Data is stored in PostgreSQL on Neon, which encrypts data at rest as part of its infrastructure.
Data protection posture
Built with data protection principles aligned to regulations like Nigeria's NDPR — organization-level data isolation, minimal data collection, and a documented retention policy. See our Privacy Policy for the full detail.