Security
Last updated August 2026
Tenant isolation
Every record belongs to exactly one shop. Access rules are enforced in the database, not just the interface, so a signed-in user can only read or change rows for a shop they are a member of. There is no query path that returns another shop's clients or appointments.
Roles
Membership carries an explicit role — owner, manager or staff. Roles are stored in a dedicated membership table, never on a user-editable profile, so a user cannot promote themselves.
Invite-only access
Creating an account does not grant access to any shop. A person joins a shop only by accepting an invite sent to their email address, or by creating a new shop with a valid founding beta code. Both paths run as a single verified transaction.
Booking integrity
Public booking runs through one server-enforced transaction that re-checks the staff member, services, business hours and availability, and the database physically rejects overlapping appointments — so two people racing for the same slot cannot both win.
Secrets
Payment and messaging credentials live only on the server. They are never sent to the browser, never stored in shop records, and never returned by an API response.
Reporting an issue
Email hello@fullvolume.app with the subject "Security". We aim to acknowledge reports within two business days and will credit responsible disclosure.