Skip to content

Encryption

getbased stores all your data locally in your browser. Nothing leaves your device unless you deliberately send it to an AI provider or enable cross-device sync (which is E2E encrypted — the relay only sees ciphertext). On top of that, you can enable encryption at rest to protect your data with a passphrase.

Local Storage

All your lab data, context cards, notes, supplements, and settings live in your browser's localStorage and IndexedDB. No account is required. Data only leaves your device if you enable cross-device sync — and even then, the relay only stores encrypted blobs. Clearing your browser data will erase getbased data, so use the export and backup features regularly.

Encryption at Rest

When you set a passphrase in Settings → Security, your data is encrypted before being written to localStorage using:

  • AES-256-GCM — authenticated encryption that protects both confidentiality and integrity
  • PBKDF2 key derivation — your passphrase is never stored directly; it is stretched into a cryptographic key

When you open getbased, you are prompted for your passphrase to decrypt and load your data. Without the correct passphrase, the data is unreadable.

WARNING

There is no passphrase recovery. If you forget your passphrase, your data cannot be decrypted. Make sure to export a plaintext JSON backup before enabling encryption, or store your passphrase somewhere safe.

Passphrase Requirements

Passphrases must meet all four rules:

  • At least 8 characters
  • At least 1 lowercase letter
  • At least 1 uppercase letter
  • At least 1 special character (!@#$%^&* etc.)

A live strength meter with a color-coded bar and checklist shows your progress as you type. The encryption button is disabled until all rules pass.

Encryption Nudge

After your first PDF import, getbased shows a one-time prompt suggesting you enable encryption. This is a reminder, not a requirement — you can dismiss it and enable encryption later from Settings.

Three Backup Layers

getbased protects your data with three independent backup mechanisms:

1. IndexedDB Auto-Backup

Automatic in-browser snapshots happen in the background:

  • A backup is triggered 60 seconds after any data change (debounced — rapid changes only trigger one backup)
  • Up to 5 snapshots are stored; the oldest is pruned when a new one is added
  • Each snapshot includes all your lab entries, context cards, notes, supplements, cycle data, and per-profile preferences

Go to Settings → Data → Backup & Restore to see your saved snapshots. Each entry shows the date and time it was created. Click Restore next to any snapshot to roll back.

2. Folder Backup

Auto-save to a local folder on your computer — Proton Drive, Dropbox, NAS, or any location you trust. This uses the File System Access API (Chromium browsers only). See Folder Backup for full details.

3. Manual JSON Export

Download a plaintext copy of all your data at any time. Store it somewhere safe (a password manager, encrypted drive, or offline backup). See JSON Export & Import for details.

Backup Reminder

If you haven't configured folder backup and haven't manually exported in over 30 days, getbased shows a gentle reminder nudge. You can snooze it for another 30 days or set up folder backup to dismiss it permanently.

TIP

You can restore a backup even without a passphrase configured — backups follow the same encryption state as your main data at the time they were created.

What Is and Is Not Encrypted

When encryption is enabled, the following are encrypted:

  • All imported lab data (entries, notes, supplements, cycle data, context cards)
  • Chat conversation history
  • Custom personality settings

Settings such as your chosen AI provider and theme are stored in plaintext (they contain no health data).

AI API requests are always transmitted to your chosen provider over HTTPS, regardless of your encryption setting. Your provider's privacy policy governs how they handle those requests.

Venice End-to-End Encryption (E2EE)

When using Venice AI as your provider, you can enable End-to-End Encryption in Venice settings. This encrypts your prompts in the browser before transmission using:

  • ECDH (secp256k1) key exchange with the model's TEE attestation key
  • HKDF-SHA256 key derivation
  • AES-256-GCM message encryption

With E2EE enabled, your prompts are encrypted before leaving the browser and are only decrypted inside a verified Trusted Execution Environment (Intel TDX) — not even Venice can read them. Response chunks are encrypted per-chunk by the TEE and decrypted in your browser.

TEE Attestation Verification

Before establishing an encrypted session, getbased verifies the TEE attestation to ensure the signing key genuinely comes from a secure enclave:

  • Nonce binding — confirms a fresh client nonce in the TDX quote, preventing replay attacks
  • Signing key binding — confirms the key's Ethereum address is embedded in the TEE's REPORTDATA
  • Debug mode rejection — rejects TEEs running in debug mode
  • Server cross-check — flags inconsistencies with Venice's own verification

A 🔒✓ (green checkmark) in the chat header and message footers confirms attestation passed. Hover over it for details. If attestation fails, the session is blocked and an error is shown.

E2EE trade-offs

E2EE mode disables web search and image attachments. Only a subset of Venice models support E2EE.

Released under the GPL-3.0 License.