Security
Security and privacy are part of the architecture, not an afterthought. Below is how Veisla is built, layer by layer, and what each layer actually does.
| Layer | How Veisla does it |
|---|---|
| 1 · Client layer | Next.js 16 and React 19 with server-rendered components, the same in the application and the control plane. |
| 2 · API and backend logic | Typed App Router API with per-request server-side authorization and structured error handling. |
| 3 · Database and storage | Database-per-tenant: each customer has its own isolated database (Azure Postgres / Neon), with no shared tables between customers. |
| 4 · Authentication and access | Role-based access control, per-tenant sessions and single sign-on (SSO) per customer. |
| 5 · Hosting and deployment | GitHub Actions with Azure OIDC: no long-lived cloud keys, no secrets in the source code, production behind an approval step. |
| 6 · Cloud and compute | Microsoft Azure Container Apps with an isolated runtime per customer. |
| 7 · CI/CD and version control | Secrets are pulled from Azure Key Vault and GitHub Secrets (never in the repo); an approved production environment gates every rollout. |
| 8 · Isolation between customers | Physically separate databases per customer rather than row-level security in one shared base — customer data never sits together. |
| 9 · Rate limiting | Brute-force protection on login and public-facing endpoints. |
| 10 · Caching and CDN | Per-tenant edge via Azure Front Door: each customer is served under its own hostname; no shared application cache of customer data. |
| 11 · Load balancing and scaling | Container Apps scale per customer with load, independently between customers. |
| 12 · Error tracking and logging | Error tracking on server, client and edge with personal data scrubbed; structured logging with tenant and correlation IDs; all privileged database access is audited — without logging result rows. |
| 13 · Availability and recovery | Scheduled per-tenant database dumps and idempotent replay of payment webhooks. |