ZaffreZaffre Axon
Trust · Security · Reliability

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

Infrastructure

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

Backups

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

Audit

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

Access

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

Auth

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

Multi-tenant

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

API safety

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

Storage

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

Mobile

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

Releases

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

Monitoring

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

Data ownership

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.