Tenant isolation by default
Every API request is scoped to a tenant UUID. Row-level filters and RBAC permissions are enforced before any CRM data is read or written.
Trust & security
Sparo is a multi-tenant customer-operations platform. Every layer — from demo handoff links to AI write-actions — follows the same standard: least privilege, cryptographic verification where it matters, and automatic expiry for time-boxed access.
Every API request is scoped to a tenant UUID. Row-level filters and RBAC permissions are enforced before any CRM data is read or written.
Live product demos are gated behind HMAC-signed links with a fixed expiry. Sessions use httpOnly cookies and auto-revoke — keys are never left in the URL after the first visit.
Auth sessions use signed JWTs with issuer, audience, and expiry checks. Public customer links (booking, estimates, feedback) use single-use HMAC tokens.
Agents propose changes; humans confirm before anything is persisted. AI answers for metrics are computed by deterministic SQL, not guessed by the model.
Production responses include HSTS, X-Content-Type-Options, frame controls, and a strict referrer policy on every page.
Record creates, updates, and deletes are attributed to the acting user or agent. Enterprise deployments can extend this to SSO/SAML identity assertions.
The public site shows guided tours only. Real tenant demos require a private link with a signed, time-limited key. After the first visit the key is exchanged for an httpOnly session cookie that auto-expires — typically within seven days or sooner if the grant was shorter.
DEMO_ACCESS_SIGNING_SECRET to invalidate all outstanding links.DEMO_ACCESS_KEY_EXPIRES_AT to retire a static passphrase on a schedule.pnpm demo:access-link.