Security & privacy
Privacy is structural, not promised.
We cannot read your vault because the encryption happens on your device. Not because we are virtuous. Because the mathematics makes it impossible.
- Zero-knowledge
- We store ciphertext only
- Client-side
- Keys never leave your device
- End-to-end
- Encrypted in browser before sync
- No recovery
- We cannot reset your master password
How the vault works
- Your device
- Master password
- Argon2id key derivation (PBKDF2 600,000-iteration fallback)
- AES-256-GCM encryption, authenticated per record
- Ciphertext to server
Derivation and encryption run in your browser, through the Web Crypto API. Vault plaintext never touches our infrastructure: for the vault we store wrapped keys, salt, ciphertext, and IVs only. Data outside the vault (board posts, reel metadata) is listed plainly below.
What we can and cannot see
We see: account email, authentication session, vault salt, Trace name and handle, learning goals, experience level, mission completion, confidence ratings, posts and messages you send, billing tier, and product analytics events.
We cannot see: vault file contents, competency baselines, practice drafts, or your derived encryption keys.
One caveat, stated plainly: today the master password also serves as the account password, so it transits to the authentication service over TLS at sign-in and is stored only as a salted hash, never in a readable form. Deriving a separate sign-in secret so the raw password never leaves your device is planned work, and the threat model tracks it.
The complete threat model, kept current with the code, is published in the source tree at docs/security/threat-model.md.
AI processing
When you opt in, Datum sends only the fields named in that tool's consent notice to a managed AI API. Datumly and the Practice mentor call Anthropic. Passwords, encryption keys, and unrelated vault files never leave your device.
Every AI turn shows a compact Receipt: what left the device, what stayed local, and that you decide before anything is saved as proof.
Three rules hold for every integration. It is opt-in, with the most protective setting as the default. It is receipt-shown, on every response. It is revocable: you can turn an integration off, export your data, and leave.
If AI is unavailable or you decline, built-in guidance and your saved local data stay usable, and Datum says when the answer was not an AI response. The full disclosure is on how we use AI.
Data residency & infrastructure
Supabase holds authentication, metadata, and community data, including reel titles and captions. The video files themselves sit in Netlify Blobs over TLS, and Netlify serves the site. Stripe handles billing: we store Stripe customer metadata and never handle or store payment card numbers.
Data export & deletion
Full account data export and account deletion are available from Account settings.
GDPR/CCPA-style access and deletion requests are also handled via hello@martori.studio.
Important: we cannot recover a lost master password. There is no backdoor, so losing it means the vault contents are irretrievable. Store it in a password manager.
Responsible disclosure
If you discover a security vulnerability, email hello@martori.studio with “Security” in the subject. We prioritize these and aim to acknowledge within 24 hours.
Read the full legal text
For the complete policy language, see our Privacy Policy and Terms of Service.