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.