Built so you can trust it with HR
Zaffre HRM treats security and reliability as structural properties — not features. Clustered architecture, 6-hourly encrypted backups, an immutable audit log, hierarchical RBAC, type-safe APIs end to end, and CI-gated releases.
Twelve trust pillars
Horizontally-scaled clustered backend
Every Zaffre HRM tenant is served by a clustered Node.js + pm2 backend with multiple API workers, a dedicated background-worker process, and a cron runner. If any single worker stalls, the rest absorb the traffic instantly — there is no single point of failure on the request path.
4+ API workers · pm2 cluster mode
Encrypted full-server backups every 6 hours
A complete encrypted snapshot of the database + storage is captured every 6 hours and shipped off-site. Restore is tested continuously, not annually, so the most recent backup is always known-good.
RPO ≤ 6h · encrypted at rest + in transit
Immutable, queryable audit log
Every meaningful admin action is appended to an immutable audit log with who, what, when, target, IP, device, browser and a full metadata payload. Logs cannot be modified retroactively from the UI.
Append-only · per-tenant scoped
Hierarchical role-based access control (RBAC)
Permissions resolve as `module.action` strings with a three-level scope (`view_self / view_sub / view_all`). Gating happens at the route, not in client-side UI, so a misconfigured role cannot accidentally expose data outside its scope.
3-level scope · route-level enforcement
RS256 JWT with rotation + refresh
Access tokens are signed with RS256 (asymmetric, key-pair-based) — the public key verifies, the private key signs and is never transmitted. Tokens auto-refresh with rotation and concurrent-request queueing on the client.
RS256 · short-lived access + refresh rotation
Every query company-scoped
Every Mongoose model that holds tenant data has a required `company` ObjectId. Every query in the backend filters by the authenticated user’s company. A query that could cross tenants is a compile-time failure.
Tenant-isolation enforced at the data layer
Zod-validated APIs end to end
Every API request body is validated by a Zod schema imported from `hrm-shared`. The same inferred type is reused on the frontend form — a contract drift is a TypeScript error, not a 500 in production.
100% of write endpoints schema-validated
Encrypted local storage on the client
The frontend stores `access_token`, `refresh_token`, `auth_user` and `company` via `localstorage-slim` with encryption enabled. A stolen browser disk image does not yield usable credentials.
Per-key encryption · sensitive data only
FCM + APNs push, single codebase
The mobile app uses Firebase Cloud Messaging (Android) and Apple Push Notification service (iOS) instead of long-poll sockets. A single React Native + Expo codebase + the same CI pipeline as the web app means a regression cannot land on one platform but not the other.
iOS + Android parity · same CI gate
CI-gated releases — no skipped hooks
No commit reaches production without passing type-check, lint, automated tests and a full build. Pre-commit and CI hooks are never skipped (no `--no-verify`).
4 mandatory gates · 0 skipped hooks
Live monitoring of every process
A built-in monitoring page surfaces per-process CPU, RAM, restart counts, recent errors, route latency p95s, uptime probes and backup health every 5 seconds. Issues are visible before customers feel them.
5-second sampling · alert hooks
Your data, exportable any time
Every meaningful object in Zaffre HRM is exportable to CSV / XLSX / PDF via the report builder. You can leave with all of your data; there is no vendor lock-in by data hostage.
Self-service export · permission-aware
Compliance & data posture
Data privacy posture
Zaffre HRM is built so that the tenant — not Zaffre Tech — owns all employee data. We process data only to operate the service. We do not sell, share or use customer data to train third-party models.
GDPR-aware data handling
The platform supports the operational primitives that GDPR-regulated tenants need: explicit consent capture during client onboarding, right-to-export (full data export per employee), and the ability to delete personal data on lawful request.
Encryption
All data in transit travels over TLS (HTTPS only on production). At-rest encryption is applied to backups and to the client-side cache of sensitive tokens. The database server itself is on a private network, not publicly addressable.
Tenant isolation
Multi-tenancy is enforced at the data layer with a required `company` ObjectId on every tenant model, and at the API layer with route-level RBAC. Cross-tenant data leakage is structurally prevented, not just policy-enforced.
Penetration & code review
Every release is reviewed for OWASP-style risks (SQLi/injection, XSS, command injection, SSRF, broken access control, etc.). Code-review checklist is published in the engineering handbook and enforced via PR templates.
Business continuity
The 6-hourly encrypted backup + continuously-tested restore path means business continuity is a property of the platform, not a service tier you have to purchase separately.
Frequently asked questions
- Is Zaffre HRM secure?
- Yes — Zaffre HRM is engineered with security as a structural property, not a feature. RS256 JWT authentication, route-level RBAC, encrypted client-side storage, TLS-only transport, tenant-isolated multi-tenancy, an immutable audit log, and 6-hourly encrypted backups together form a defence-in-depth posture suitable for HR-grade data.
- Does Zaffre HRM keep an audit log?
- Yes. Every meaningful admin action is appended to an immutable audit log with full context (actor, target, IP, device, browser, metadata). The log is per-tenant scoped and queryable from the admin console.
- How often does Zaffre HRM back up customer data?
- Encrypted full-server backups run every 6 hours and ship to off-site storage. The restore path is tested continuously, so the most recent backup is always known-good. Recovery Point Objective (RPO) is ≤ 6 hours.
- Does Zaffre HRM use customer data to train AI models?
- No. Zaffre Tech does not sell, share or use customer data to train third-party AI models. The internal AI features process tenant data only inside the tenant boundary, with explicit configuration.
- Is Zaffre HRM GDPR-aware?
- Yes. The platform supports the operational primitives that GDPR-regulated tenants need: explicit consent capture during client onboarding, full per-employee data export (right to portability), and the ability to delete personal data on lawful request.
- Can I export my data and leave?
- Yes — every meaningful object in Zaffre HRM is exportable to CSV / XLSX / PDF via the report builder. There is no vendor lock-in by data hostage. You can leave with all of your data at any time.
- What happens if the Zaffre HRM service goes down?
- The backend runs as a multi-worker cluster — a single worker failure is absorbed transparently. If a full incident occurs, the 6-hourly encrypted backup + continuously-tested restore path is the recovery primitive. Customers can subscribe to the public status page for live incident updates.
- How are passwords stored?
- Passwords are hashed with bcrypt (per-user salt). The plain password is never stored, logged or transmitted to internal systems. Password reset uses time-limited, single-use tokens.