Security
How accounts, agreements and client data are protected. Every item here describes something already in the product.
Last updated 17 August 2026
Draft — not in effect
This document has not been reviewed by a lawyer and does not yet govern anything. It is published for review only. Nothing in DashProposal currently asks you to agree to it.
Separation between accounts
Every table in the database denies access by default. Rows are reachable only through the account that owns them, enforced by the database itself rather than by application code remembering to filter. A query that forgot its filter returns nothing rather than someone else's data.
Signing in
Passwords are handled by Supabase Auth and are never stored in readable form.
Repeated failed sign-ins from one address are blocked for a period. Attempts are counted per address rather than per email, so nobody can lock you out of your own account by guessing at it.
Sessions are signed out automatically after a period of inactivity.
Administrative access
Operator access requires a second factor. There is no way in with a password alone, and a failure to verify the second factor denies access rather than allowing it.
Administrative actions are written to an audit log recording who did what and when, including changes to plans and to global settings.
Agreements
Signing captures a complete snapshot of the document, a SHA-256 fingerprint of it, and a trusted timestamp from an independent authority. Altering an agreement after the fact would change the fingerprint and be detectable.
The timestamping service receives only the fingerprint. It never sees the agreement.
A signed price cannot be edited. Later changes are recorded as separate change orders, each approved and signed in its own right.
Handling of addresses and links
Outside signature records, IP addresses are stored only as salted, irreversible hashes, used for rate limiting and never to identify anyone.
Links you supply for payments and webhooks are checked before being used. Payment links must be ordinary web addresses, which stops a link that would run code in a client's browser. Webhook addresses cannot point at private or internal networks, and redirects are not followed.
Payments
No card details ever reach DashProposal. Paying happens on your own payment provider's page, so the most sensitive data in the whole workflow is never stored here at all.
Tracking
No analytics, no advertising pixels, no third-party trackers. The only cookies are the ones needed to keep you signed in and to sign you out when idle.
Reporting a problem
Found something? Use the contact form on the home page and say what you found. Reports are read directly by the person who maintains the product.