Security
Security posture
This page states what is implemented and verified today, and what is not built yet. It contains no aspirational claims.
Last updated 25 August 2026
Authentication
- A passkey is the preferred primary method.
- A verification app (TOTP) or a roaming hardware security key provides separate protection.
- Backup codes are emergency recovery codes, stored only as one-way hashes, and never count as an active second factor.
- SMS authentication is not supported and will not be added.
- Passwords must be at least 12 characters and mix upper case, lower case and a number or symbol.
Account is not vault unlock
Signing in authenticates the account. It does not unlock a vault, and it never will: vault access is designed as a separate act with separate material. In this build no vault, key or encrypted object exists at all.
Data protection in the database
Every application table has row-level security enabled. A signed-in account can read only its own rows. Anonymous visitors can read nothing. Sensitive tables — backup-code hashes, one-time authentication challenges, replay guards, rate-limit records and the bootstrap ledger — deny all browser access outright and are reachable only through audited server-side functions.
Platform roles
Roles live in a dedicated role table and are checked by a security-definer function. Exactly one Platform Owner may ever exist, and the one-time provisioning path closes permanently after use. No Platform Owner is provisioned today. There is no generic role-granting route, no impersonation, and no way for staff to read private user content.
Audit and retention
Authentication and account-security events are recorded with an outcome and kept for 24 months; raw network identifiers are minimised after 90 days. Audit rows cannot be modified or deleted from the browser under any role.
Reporting a problem
Report a suspected vulnerability to alex@siteways.io. Please do not test against another person’s account.