Security
How ValoraHR protects your data
HR systems hold some of the most sensitive information a company has. This page describes, in plain language, how ValoraHR is actually built to look after it.
Where your data lives
ValoraHR runs on Vercel and stores data in a Supabase-managed PostgreSQL database and private file storage in the European Union (AWS eu-west-1, Ireland). The application is served from Vercel's Dublin region.
Connections to ValoraHR are encrypted in transit with TLS, and browsers are told to use HTTPS only. The database and storage run on infrastructure encrypted at rest by our providers.
One organisation can never see another's
Every table that holds customer data has Row Level Security enabled and forced in PostgreSQL. Each database request declares who is acting and in which organisation, and the database checks that against the person's live membership before returning a single row. A query that forgets to declare this sees nothing.
The application connects as a dedicated, restricted database role that cannot bypass these rules, and records that refer to each other are tied to the same organisation by the schema itself. ValoraHR's database, accounts and storage are separate from every other Techvora product.
Access follows the job, not the job title
Roles are made of specific permissions — seeing the directory, approving leave, managing documents — and every permission is checked again by the database, not only by the interface. A manager sees the people in their reporting line; personal information such as home address and date of birth is visible only to the person and to HR roles that hold that permission.
Techvora's own operator console works from organisation names, counts and subscription state. It has no route to employee records.
Sign-in
ValoraHR keeps its own accounts; they are not shared with any other service. Passwords must be at least 12 characters and are stored only as bcrypt hashes. After repeated failed attempts an account is locked for 15 minutes, and sign-in and password reset are rate-limited.
Sessions use long random tokens held in secure, httpOnly cookies; the database stores only a keyed HMAC of each token, so a copy of the database cannot be used to sign in. Sessions end after 72 hours without use and 14 days at most, and you can see and end your sessions from your account page.
Two-factor authentication with an authenticator app is available to every user. The shared secret is encrypted with AES-256-GCM under a key held outside the database, and recovery codes are stored only as keyed hashes.
Documents
Files are kept in a private storage bucket that is never publicly readable. The browser never talks to storage directly: each download is checked against your permissions and then served through a signed link that expires after 60 seconds.
An audit trail that cannot be rewritten
Changes to employee records, leave decisions, documents, access and settings are recorded with who made them and when. The log is append-only in the database. It records which fields changed, never the values themselves, and IP addresses are kept only as keyed pseudonyms.
In the application
Every form is validated on the server. Pages refuse to be framed by other sites, authenticated pages and exports are never cached, and state-changing requests must come from ValoraHR itself. Error messages never include database details, and logs never include personal data, passwords, codes or tokens.
We do not claim certifications we do not hold. If you need more detail for a security review, or want to report a vulnerability, please contact Techvora through techvora.net. How we handle personal data is described in our privacy notice.