← Back
Security
Personal finance is one of the most sensitive data categories. Here's how we protect yours.
Authentication
- Email + password (bcrypt-hashed, 10 rounds, never stored in plain)
- Optional TOTP 2FA (Google Authenticator, Authy, 1Password)
- Session cookie: HttpOnly, Secure (HTTPS-only), SameSite=Lax, 7-day max age
- Login rate-limit: 5 failures → 5-minute lockout per IP
- Audit log of every login, password change, and account modification
Data isolation (multi-tenancy)
- Every row in our database is tagged with a user_id
- Row-Level Security (RLS) policies in PostgreSQL prevent cross-user access even if app has a bug
- App-layer query enforcement adds a second line of defence
Encryption
- In transit: TLS 1.2+ everywhere (Cloudflare → Vercel → Supabase)
- At rest: AES-256 disk encryption (Supabase managed)
- Backups: Encrypted, geo-redundant, 30-day retention, restore tested
- Per-user envelope encryption for high-sensitivity fields (planned, paid tier)
HTTP hardening
- Content-Security-Policy (strict, same-origin)
- Strict-Transport-Security (HSTS, 1 year)
- X-Frame-Options DENY (no embedding allowed)
- X-Content-Type-Options nosniff
- Referrer-Policy strict-origin-when-cross-origin
- Permissions-Policy locks camera/mic to first-party
Third-party processors
Each is bound by data processing agreements:
- Supabase (database) — SOC 2 Type II
- Vercel (web hosting) — SOC 2 Type II
- Cloudflare (DNS, edge) — SOC 2 Type II, ISO 27001
- OpenAI (optional AI Advisor) — enterprise tier, zero-retention
- Resend (transactional email)
- Sentry (error tracking; PII scrubbed)
What we DON'T do
- We don't hold your money — we're never a custodian of funds
- We don't store bank credentials — we read PDF/CSV statements you upload
- We don't sell, share, or rent your data to anyone
- We don't use your data to train ML models
- We don't log SSL keys
Responsible disclosure
If you find a security issue:
- Email david95oo1@gmail.com
- Include reproduction steps + your suggested severity
- We'll acknowledge within 48 hours and triage within 5 business days
- We won't pursue legal action against good-faith researchers
- Hall of fame credit for valid reports + token bounty (we're a small team)
Roadmap
Items in progress as we scale beyond beta:
- Independent penetration test — Q3 2026
- SOC 2 Type II readiness — Q4 2026
- Per-user envelope encryption for paid tier — Q4 2026
- Bug bounty program on HackerOne — when out of closed beta
Architecture summary
User → Cloudflare (DDoS, TLS) → Vercel (Next.js) → Supabase (Postgres, ap-southeast-1). Sessions encrypted with iron-session. Auth: bcrypt + optional TOTP. Optional integrations: moomoo OpenD (user-local agent) → API endpoint over HTTPS; OpenAI API for AI Advisor (opt-in).
Last updated: 31 May 2026. This page is intentionally kept up-to-date as our security posture evolves.