Trust Centre
Last reviewed 3 August 2026You're trusting us with records that matter. This is our single, plainly-worded reference for the security and privacy controls we operate today — how your data is encrypted, how the application defends itself, and the providers we build on.
Category 01
Records are protected both while they travel to us and while they sit at rest, with access decisions enforced all the way down at the database layer.
Every connection to Spey Register is served exclusively over HTTPS. Each connection opens with a TLS handshake that authenticates our server against its certificate and negotiates fresh, ephemeral keys; from that point on, every request and response is protected with authenticated encryption, so a network observer can neither read nor tamper with the payload undetected. We support TLS 1.2 or higher, and certificates are provisioned and rotated automatically by our hosting and CDN provider — removing the risk of an expired or mis-configured certificate slipping through.
On top of TLS we send an HTTP Strict Transport Security header: max-age=31536000; includeSubDomains; preload. Read literally: max-age tells the browser to treat the origin as HTTPS-only for a full year, includeSubDomains extends that guarantee to every subdomain, and preload makes the domain eligible for the browser-maintained preload list — so a conforming browser refuses plaintext even on the very first visit, before it has ever seen our header. Together these close the trust-on-first-use gap and neutralise SSL-stripping downgrade attacks that depend on an initial, unencrypted http:// request.
Data stored in our managed Postgres database is encrypted at rest by the database provider. If the underlying storage media were ever accessed directly, the contents would remain unreadable without the provider-managed keys.
Row-Level Security (RLS) is enabled on every single table, with a deny-by-default posture: unless a policy explicitly grants access to a given row, that row is invisible. Crucially, these policies are evaluated by PostgreSQL itself — per row and per query — a second, independent enforcement point beneath the application. So even if an application code path were wrong, the database simply will not return rows the current context is not entitled to. That is defence-in-depth applied literally: two independent gates, not one.
Application data is stored in the UK: the managed database runs in the London region (eu-west-2). Data at rest stays within that jurisdiction.
Category 02
Accounts are guarded by industry-standard authentication, and every operation on your data is authorised on the server against the person actually signed in.
Passwords are never stored in plain text. They are held only as securely salted hashes through Supabase Auth, meaning the original password cannot be recovered from what we store — not by us, and not by anyone who might improperly obtain the data.
New accounts must confirm ownership of their email address before they can access the platform, which prevents sign-ups against addresses the registrant does not control.
When a password is set, it is checked against known-breached credential datasets. Passwords that have appeared in public breaches are rejected, steering users away from credentials that attackers already know to try.
Two-factor authentication using TOTP authenticator apps is available to add a second factor on top of a password. When enabled, signing in requires a one-time code from the authenticator, so a leaked password alone is not enough to reach an account.
After you sign in, your session is carried by a signed token kept in an httpOnly cookie — it cannot be read by page JavaScript, which limits what a cross-site-scripting bug could reach. The cookie is marked Secure, so it is only ever sent over HTTPS, and SameSite, which reduces cross-site request-forgery exposure. The token is verified on the server on every request.
Access follows role-based permissions, and — critically — every data operation is authorised on the server against the signed-in user, including explicit ownership checks. The client is never trusted to decide what it may see or change; the server independently confirms that the requesting account is entitled to each record it touches.
Category 03
Defence-in-depth is written into how the application is built — from how input is validated to how the browser is instructed to run our pages and how uploaded files are served.
All input is validated against a single shared schema that runs on both the client and the server. The same rules that give you fast, friendly feedback in the browser are re-enforced on the server, where they actually count — so malformed or malicious input cannot bypass validation by skipping the front end.
Each response carries a Content-Security-Policy built around a fresh, per-request nonce: only scripts tagged with that exact, unpredictable value are allowed to run, so injected inline script — the payload of a classic cross-site-scripting attack — has no way to guess the nonce and the browser refuses to execute it. We also send X-Content-Type-Options: nosniff to stop the browser from MIME-sniffing a response into an executable type, alongside the other standard security headers including HSTS.
Uploaded files are held in private storage — never in a public bucket. They are delivered only through short-lived signed URLs that expire, and both file type and size limits are enforced on the server. There is no persistent public link to a document, so access ends when the signed link does.
Sensitive endpoints are rate-limited to blunt automated abuse such as credential-stuffing and brute-force attempts, reducing how quickly an attacker can probe the platform.
Category 04
We build on established managed providers, review our own work on a regular cadence, and keep an audit trail on the actions that carry legal weight.
We carry out internal security reviews of the application on a roughly monthly cadence, revisiting our controls and configuration rather than treating security as a one-time setup.
Actions that carry legal weight — such as accepting our Terms & Conditions — are recorded with an audit trail capturing the timestamp, the originating IP address, and the device/user-agent. This gives a durable, reviewable record of when a material action was taken and from where.
The platform runs on established managed cloud providers rather than self-managed servers, inheriting their operational maturity for the database, hosting, and delivery layers. The specific providers we rely on are listed in the Subprocessors section below.
The managed database is backed up automatically every day, with a rolling seven-day retention window, so recent data can be restored in the event of an incident.
Infrastructure
We build on established managed providers rather than running our own servers. These are the key third parties that may process data on our behalf in the course of running the platform. Each is engaged for a specific, limited purpose.
This list reflects our key subprocessors as of 3 August 2026 and may not be exhaustive. Several of these providers run on underlying cloud infrastructure such as AWS; their own subprocessor lists are published on their respective trust pages. Details of how personal data is handled are set out in our Privacy Policy.
Privacy
We collect and process personal data in order to provide the service. What we collect, why we collect it, how long we keep it, and the rights available to you are described in full in our Privacy Policy and Terms of Use — those documents are the authoritative source, and this page defers to them on all privacy specifics rather than restating them.
We ask for your consent before setting non-essential cookies, and you can review or change your cookie preferences at any time via the link in the footer below.
Good to know
As of 3 August 2026, the information on this page reflects Spey Register's security and privacy practices and is provided in good faith, to the best of our knowledge. It is a summary for informational purposes only — it is not a certification, warranty, or contractual commitment, and our practices may change over time. Where a control is described as “available”, it may be optional and not enabled for every account. Nothing here creates any obligation beyond what is set out in our Terms of Use.