Security & data residency

Plain-language statement of what NotesSecured keeps in the cloud, what stays in your browser, how a fresh sign-in reaches the same vault, and the security measures that protect this encrypted notes app. Last reviewed July 2026.

New to this? Start with what makes a notes app truly encrypted for the plain-language version, or see how we compare with other encrypted notes apps.

The short version

Your notes are encrypted in your browser and stored as ciphertext in your vault in the cloud. They are not stored on the computer or phone you happen to be using — that browser only holds a session key while you are unlocked. We can read none of your content, because the key never leaves your browser.

Stored in the cloud (your vault)

Managed cloud storage on Lovable Cloud infrastructure: a Postgres database with per-account access rules, plus private object storage for attachments. Every field listed as encrypted arrives already encrypted.

WhatHow it is stored
Everything you create: note bodies, to-do lists, titles, tags, folder namesEncrypted (AES-256-GCM) — ciphertext only
Attachments and drawingsEncrypted before upload, stored as encrypted objects
Your wrapped master keyEncrypted with a key derived from your passphrase (PBKDF2)
Optional recovery copy of the master keyEncrypted with your recovery key, only if you created one
Account email and sign-in identityPlain — required to authenticate you
Timestamps, sizes, note and share record IDsPlain metadata — needed to sync and show quotas
Notification preferences and delivery logPlain metadata; message text comes from fixed templates

Kept in the browser you are using

WhatWhere and for how long
Master key, wrapped under a session keysessionStorage — unreadable ciphertext, this tab only, gone when it closes
Session key that unwraps itIndexedDB — a non-extractable key handle; its bytes cannot be read by any script, extension or DevTools panel
Screen-lock state (PIN curtain on/off)sessionStorage
Sign-in tokenlocalStorage, until you sign out
UI preferences (filters, sort, units, tool history)localStorage
App shell (HTML, JS, icons)Cache storage — never contains note data
Decrypted note text of open notesMemory only — never written to disk
  • Closing the tab clears the session key immediately — the vault relocks.
  • Signing out clears the session key and the sign-in token.
  • With “Wipe local data on sign out” on, preferences and app caches are erased too, leaving nothing behind in this browser.

Settings → Security has a “Wipe local data on sign out” switch and a “Wipe local data now” button that clear all of the above, including app caches.

How encryption and unlock work

  1. At sign-up a random 256-bit master key is generated in your browser.
  2. Your passphrase is stretched with PBKDF2 into a wrapping key; only the wrapped master key, its salt and a verification check are uploaded.
  3. Everything you create — notes, to-do lists, titles, tags, folder names and attachments — is encrypted with AES-256-GCM under the master key before any network request.
  4. On unlock the passphrase re-derives the wrapping key locally and unwraps the master key. It is then re-wrapped under a non-extractable session key so nothing readable is left in browser storage; the usable key exists only in page memory for that session.
  5. A wrong passphrase fails the verification check locally — nothing about the passphrase is sent anywhere, and there is no server-side reset.
  6. Every password and passphrase field has a reveal (eye) toggle so you can check what you typed before committing to it. It is always off by default, never remembered, and re-hides itself automatically about ten seconds after you stop typing — it changes nothing about the encryption, only how much of the value is on screen.

Your passphrase is always required when the browser restarts after a crash or is closed without signing out. This cannot be switched off.

Restoring tabs restores the page, never your unlocked vault: the app keeps a liveness heartbeat while it runs, and a session that was not alive moments ago has both halves of its key purged before anything renders. Idle auto-lock also keeps counting while your machine is asleep.

Signing in somewhere new

Nothing needs to be transferred. Sign in to your account, enter the same passphrase, and the wrapped master key downloads and unwraps locally — the vault opens with all of your notes. Edits sync in real time between every open session, and you can revoke access simply by signing out or changing your account password (your passphrase is unchanged).

On-device AI

Meaning-based search is optional, off by default, and enabled per device. When you turn it on, a small language model is downloaded once and run inside a background worker in your own browser. It reads only text that is already decrypted for this session; no note, no title and no search phrase is sent to us or to any AI provider.

The numbers the model produces (embeddings) describe what a note is about, so we treat them as note content: each one is encrypted with your vault key before it is stored, and the server holds only ciphertext plus a model version. The in-memory index is wiped when the vault locks or you sign out, locked items are never indexed, and Settings › Security lets you delete the whole index at any time.

Security measures we apply

  • Everything you create — notes, to-do lists, titles, tags, folder names and attachments — is encrypted with AES-256-GCM in your browser before any network request.
  • Your passphrase is stretched with PBKDF2 to create a wrapping key; only the wrapped master key, salt and verification check are stored.
  • The master key is never written to browser storage in the clear: sessionStorage holds it wrapped under a non-extractable session key kept in IndexedDB, and both halves are discarded when the tab closes or you sign out.
  • Two lock levels: a 6-digit PIN screen lock hides the workspace during short breaks, and the vault lock erases the master key from memory, sessionStorage and IndexedDB after a longer idle period, on manual lock, on tab hide, and on sign-out.
  • The passphrase is always required when the browser restarts after a crash or is closed without signing out — this cannot be switched off. A liveness heartbeat means a restored tab can never resurrect an unlocked vault, and idle time keeps counting while the machine sleeps.
  • Returning from a vault lock requires biometrics (WebAuthn PRF, a device-bound secret that never leaves the authenticator) or your passphrase — a six-digit PIN is never used to protect key material.
  • Optional two-factor authentication (TOTP) protects the account sign-in layer.
  • Sign-in is rate-limited against guessing: after 5 failed attempts the account is locked for 10 minutes with an on-screen message, and if 5 further attempts fail after that lockout a password reset becomes mandatory before sign-in is allowed again.
  • Optional recovery key gives you a way back into your vault if you forget your passphrase.
  • Optional anti-phishing phrase and tint appear on sign-in and unlock screens so you can confirm you are on the real app before entering credentials.
  • Database rows are protected by per-user access rules; the cloud only ever sees ciphertext.
  • Attachments and exports live in private object storage, uploaded as encrypted blobs.

Anti-phishing verification

Phishing sites copy the look of a real app to trick you into entering your password or passphrase. Because your notes are end-to-end encrypted, we cannot see your passphrase — so the safest check is one you perform yourself. NotesSecured lets you set a secret phrase and a tint colour that appear on every sign-in and unlock screen.

  • Choose a phrase and colour in Settings → Security → Anti-phishing verification.
  • Look for the phrase and colour before you type your password, passphrase or PIN.
  • If either is missing, or you see a warning banner, close the tab and navigate to the real address manually.
  • Biometric-first unlock keeps the passphrase field hidden until you explicitly ask for it.

What anti-phishing cannot cover

  • Malware or a compromised device that can read your screen or keystrokes.
  • A fake site that already has your secret phrase and colour through a separate leak.
  • Social engineering over email, phone, or messaging apps.
  • Browser extensions or password managers that have been tampered with.

This is a light-weight, user-visible signal. It does not replace good browser habits — checking the address bar, using a password manager, and keeping your device up to date.

Platform infrastructure security

NotesSecured runs on Lovable Cloud, which provides the underlying database, authentication, storage, secrets management, and edge-function infrastructure. These are platform capabilities, not independent certifications or audit guarantees.

  • Managed database, authentication, storage, edge functions, and secrets management provided by Lovable Cloud.
  • All data in transit is protected with TLS/HTTPS.
  • Authentication is handled by the managed identity provider with support for email/password, Google, Microsoft, and Apple sign-in.
  • Storage buckets are private by default and accessed through per-user rules.
  • Secrets such as VAPID keys are stored in the managed secrets store and injected only into server-side code.

Backups, outages and recovery

The database is operated by our hosting platform, which takes automated backups and keeps point-in-time recovery. If a database fails, the platform's engineers perform the restore — there is no restore control inside the app, and nothing is required from you.

  • A restore does not weaken your encryption: notes come back as exactly the same ciphertext, and passphrases, keys and recovery keys never left your browser, so nothing has to be re-keyed.
  • Nothing notifies you automatically. During an incident or a restore we switch on a service status banner shown at the top of every page — including the sign-in screen, so the reason is visible even when you cannot get in.
  • The banner has six stages: a dismissable notice, degraded service, outage, planned maintenance, restore in progress, and service restored. Each carries the same standardised wording every time, so the message never changes shape between incidents.
  • While a restore or a maintenance window is running, sign-in is paused. Instead of failing with a confusing error, the sign-in screen shows what is happening and when to come back. Attempts made during a pause do not count towards the 5-attempt lockout, so nobody comes back to a locked account.
  • The pause does not depend on someone remembering to switch it on: if the backend stops answering, the app detects that by itself and pauses sign-in until it responds again.
  • Email notices to every account are not yet switched on — that requires a verified sender domain, and the list of accounts sits in the same database an outage takes down, so a broadcast can only be sent once service is back. Until then the in-app banner is the live channel.
  • For your own off-platform copy, use the encrypted export in Settings › Data and open it again with the built-in reader.

Shared responsibility

NotesSecured

Browser-side encryption, key management, access rules, app-level security controls, and the code that runs in your browser.

Lovable Cloud

Infrastructure security: managed database, auth, storage, secrets, TLS, and physical/cloud platform operations.

You

Keeping your passphrase and recovery key safe, choosing a strong account password, signing out on shared computers, and keeping your devices secure.

Cookies and analytics

NotesSecured does not set third-party cookies. We use first-party cookies/localStorage only for sign-in sessions and UI preferences. On landing pages we push anonymous, provider-agnostic events to window.dataLayer so a tag manager such as Google Tag Manager can collect them if one is installed later. These events never include note content, passphrase, or personal data.

Analytics events

Allow NotesSecured to send anonymous landing-page events to the dataLayer so analytics providers can measure which help content is useful. This does not affect app functionality.

What is collected when this is on

  • Which page you are on (for example /security or the landing page)
  • Which help sections, tabs or FAQ items you open, and how long a tab stays open
  • Clicks on links between the landing page and this policy page
  • Campaign parameters (utm_source, utm_campaign and similar) present in the link you arrived from
  • Whether the automatic page checks passed on load

Never collected

  • Anything you create: note content, to-do lists, titles, tags, folder names or attachments
  • Your passphrase, PIN, recovery key or any encryption key
  • Your email address, account ID or any other account identifier
  • Cross-site tracking cookies or third-party advertising identifiers

Events are pushed to window.dataLayer in your browser so a tag manager can read them if one is installed. When analytics is off, nothing is pushed — events stay in a short in-memory debug buffer that is discarded when the tab closes.

Your choice is stored as a single localStorage value in this browser and, when you are signed in, mirrored to your account so it follows you to any browser or operating system. Clearing site data resets the local copy; the account copy is restored on your next sign-in unless you reset the choice.

No choice saved yet — analytics events are off until you turn them on.

How long analytics data is kept

DataRetention
Your analytics choice (on/off) and the date you set itKept in this browser's localStorage until you reset it, sign out with local wipe, or clear site data
Audit trail of your analytics choice changesLast 10 changes, kept in this browser only; deleted when you reset your choice
In-memory debug buffer of events (used when analytics is off)Last 200 events, held in the tab's memory only — discarded when the tab closes or analytics is switched off
Events sent to an analytics provider while analytics is onRetained by the configured provider for a maximum of 14 months, then deleted automatically
Server-side logs of page requests (IP, user agent) held by the hosting platformKept by the platform for operational security and deleted on the platform's rolling schedule; not linked to your vault

What happens the moment you turn analytics off

  • No further events are pushed to window.dataLayer from this browser — the send path is disabled, not just filtered.
  • The in-memory debug buffer for the current tab is cleared immediately.
  • The window.dataLayer queue itself is emptied, so events already queued but not yet read by a tag manager are destroyed rather than delivered later.
  • Campaign parameters (utm_*) captured for this session are removed from sessionStorage.
  • Your preference is rewritten to 'denied' with a new timestamp, and the change is added to the local audit trail.
  • The denial is written to your account so every other browser you sign in from turns analytics off too.

Events that were already sent to an analytics provider while analytics was on are outside this browser. They are anonymous (no account identifier) and age out on the provider's retention schedule above; we cannot single them out to delete on request because there is nothing tying them to you.

ActionWhat is left afterwards
Turning analytics offOnly two values remain: the value 'denied' and the timestamp of that change, plus your local audit trail. Nothing else about analytics is kept anywhere.
Reset my analytics choiceRemoves the stored value, the timestamp and the audit trail in this browser, and clears the account copy so no browser inherits an old choice.

My analytics choice — audit trail

Every time you change the analytics setting above, the change is recorded in this browser only (never sent anywhere). Resetting your choice clears this list and returns you to the default, which is analytics off.

Your analytics choice is saved with your account, so signing in from another browser, phone or operating system applies the same setting. If the same account is changed in two places, the most recent change wins.

Current setting: Not set — never changed

Account sync: not checked yet.

No changes recorded in this browser yet.

Account audit trail (server-side)

No account-side changes recorded yet. Sign in and change the setting to start the trail — these records are stored with your account and cannot be edited or deleted from the app.

Reporting a vulnerability

We welcome reports from security researchers and users. If you believe you have found a security issue in NotesSecured, please report it privately to security@notessecured.app rather than posting it publicly, so we can fix it before it can be misused.

What to expect and when

StepOur target
Acknowledge your reportWithin 3 business days
Initial assessment and severity triageWithin 10 business days
Status update cadence while we investigateAt least every 14 days
Fix or mitigation for critical issuesTarget 30 days from triage
Fix or mitigation for lower-severity issuesTarget 90 days from triage

These are the response times we aim for; complex issues may take longer, and we will keep you updated if they do.

Please include

  • A clear description of the issue and its potential impact
  • Step-by-step instructions to reproduce it, including the affected URL or screen
  • Any proof-of-concept code, requests or screenshots that help us confirm it
  • The browser, operating system and app version you used
  • How you would like to be credited, if you want credit

Testing rules (safe reporting)

  • Test only against accounts and vaults you own or have explicit permission to use.
  • Do not access, modify, download or delete other people's data — stop as soon as you can demonstrate the issue.
  • Do not run denial-of-service, spam, brute-force or high-volume automated scanning against the service.
  • Do not use social engineering, phishing or physical attacks against our team, users or providers.
  • Give us a reasonable chance to fix the issue before disclosing it publicly.

Usually out of scope

  • Reports produced only by automated scanners with no demonstrated impact
  • Missing security headers or best-practice suggestions with no exploitable impact
  • Vulnerabilities in third-party platforms — report those to the provider directly
  • Self-inflicted issues that require an already-compromised browser or device
  • Social engineering, spam, or rate-limiting reports without a concrete exploit

Safe harbour

If you follow this policy in good faith, we will treat your research as authorised, will not pursue legal action, and will work with you to understand and resolve the issue quickly. If a third party brings action against you for research that followed this policy, we will make that good faith clear.

We do not currently run a paid bug bounty programme. We do acknowledge reporters who ask for credit once a fix has shipped.

Encrypted reports (PGP)

  • Download the key file and import it: gpg --import pgp-key.txt
  • Check the imported fingerprint matches the one shown here character for character (gpg --fingerprint security@notessecured.app).
  • Encrypt your report to that key before emailing it to the security contact.
  • Include your own public key in the encrypted message if you want an encrypted reply.
Key owner
NotesSecured Security (Infinitum Solutions, Inc.) <security@notessecured.app>
Algorithm
EdDSA / Curve25519 (ed25519 signing, cv25519 encryption)
Fingerprint
C065 1C9A 5DD6 7BB3 F3AC 9DD2 BA41 4161 2058 DE20

The check below downloads the published key file in your browser, parses it with OpenPGP, and compares the fingerprint it computes against the fingerprint printed on this page. A mismatch means the file was tampered with or is stale — do not use it, and tell us.

Contact us

If you have a security or privacy question about NotesSecured, please email security@notessecured.app.

Security questions in brief

Where exactly are my notes encrypted?
In your browser, before any network request. Encryption and decryption run in WebCrypto on the page you have open; plaintext never crosses the network and never reaches our servers.
Where are they stored?
In your vault — managed cloud storage (Postgres plus object storage for attachments) hosted on Lovable Cloud infrastructure. Rows are protected by per-user access rules, and every sensitive field is already ciphertext when it arrives.
How does unlocking work?
Your passphrase is stretched with PBKDF2 into a wrapping key. That key unwraps your stored master key inside the browser. The usable key then lives only in page memory; to survive a reload it is re-wrapped under a non-extractable session key held in IndexedDB, with the resulting ciphertext in sessionStorage. Closing the tab throws that away. Your passphrase is always required when the browser restarts after a crash or is closed without signing out — this cannot be switched off. Restoring tabs restores the page, never an unlocked vault.
What is kept on the client?
A wrapped (unreadable) copy of your master key and the lock state in sessionStorage; the non-extractable session key that unwraps it in IndexedDB; your sign-in token and UI preferences in localStorage; the app shell in cache storage. Nothing in browser storage exposes readable key material — even in DevTools. Decrypted note text exists in memory while a note is open and is never written to disk.
What can you see if you are compelled to hand over data?
Ciphertext, timestamps, sizes and your account email. Without your passphrase the contents cannot be recovered by us, by a court order, or by anyone who copies the database.
What if I forget my passphrase?
There is no reset. The optional recovery key you can generate in Settings holds a second wrapped copy of your master key — it is the only way back in. Without either, the ciphertext stays unreadable forever.

This page is maintained by Infinitum Solutions, Inc. to answer common security and privacy questions about NotesSecured. This page describes implemented product behaviour; it is not an independent audit, certification, or legal agreement.