Security & privacy
This product handles highly sensitive financial information. The posture below matches our internal security documentation — not marketing fluff.
Encryption & storage
- Sensitive fields — profiles, transcripts, run snapshots, and narration — are encrypted with Fernet before they are written to the database. The database only ever stores ciphertext for those columns.
- The database itself (managed Postgres on Neon) is encrypted at rest and reachable only over TLS. Application-layer field encryption sits on top of that, so a leaked connection string alone does not expose plaintext financial data.
- The application is served over HTTPS in production; cookies are marked Secure.
Authentication & access
- Sign-in and sign-up are handled by Clerk, a dedicated authentication provider, with support for multi-factor authentication and breached-password detection. We never see or store your password. Clerk session tokens are verified on our server against Clerk's published signing keys on every request.
- Accounts created before the Clerk migration have bcrypt-hashed passwords — plaintext passwords have never been stored or logged.
- Every read or mutation verifies ownership server-side; another user's resource returns 404, so ids can't be probed.
- API keys and encryption secrets live only on the server — the browser never sees them.
Bank connections
- Account connections go through Plaid. Your banking username and password are entered with Plaid directly and are never sent to or stored on our servers.
- We hold only a revocable Plaid access token, encrypted at the application layer before storage and never logged or returned to the browser.
- Imported account data is always shown to you for confirmation before it enters your profile — ambiguous data becomes a question, never a guess.
Who processes your data
We deliberately keep the list of services that touch your data short. Each processes only what its role requires:
- Clerk — authentication. Holds your sign-in credentials and account email; never sees your financial data.
- Plaid — bank connections. Handles your banking credentials directly and returns account data to us with your approval.
- Neon — managed Postgres database. Stores your data encrypted at rest; sensitive fields arrive already encrypted by the application.
- Vercel and Railway — application hosting for the web interface and backend. The backend is where data is processed in memory to build your plan.
- Anthropic — the AI model behind the intake conversation. It extracts and organises what you tell it; it never computes a financial figure, and every call is proxied through our backend.
These providers are hosted in the United States. Cross-border handling and your rights under Canadian privacy law are covered in the Privacy Policy.
Web hardening
- CSRF protection on cookie-authenticated state-changing requests.
- Rate limiting on authentication endpoints.
- Security headers: X-Content-Type-Options, X-Frame-Options, and Referrer-Policy.
- PII redaction in application logs.
Deliverables & retention
- Artifacts are never publicly reachable. Downloads use short-lived, signed, owner-scoped URLs.
- Self-service deletion: individual runs, intakes, or your entire account and all data.
- Runs and artifacts are eligible for purge after a configurable retention period (default 365 days).
For the full technical posture, see web/SECURITY.md in the project repository. Read our Privacy Policy for how personal information is handled.
Questions about your data?
Review the privacy policy or create an account to see the in-app controls for deletion and retention.