Privacy Policy
Last updated 21 August 2026
Soulswap is a personal journal. Entries are encrypted on your device before they are sent anywhere, with a key derived from your passphrase. That key is never transmitted, so the operator of this service cannot read your journal, and neither can anyone who obtains a copy of the database.
What is stored on the server
- Your email address, used only to sign you in and to send the sign-in code.
- Encrypted entries. Ciphertext and its initialisation vector. Titles are inside the ciphertext.
- Entry dates and modification timestamps, unencrypted. These are needed to order your journal, to sync changes between devices, and to tell whether you have already written today.
- Your encryption key in sealed form, twice: once under your passphrase and once under your recovery code. Neither can be opened without the matching secret.
- Reminder settings, including the time you chose and your timezone.
- Push subscription details, if you turn on reminders: an endpoint URL issued by your browser vendor, two subscription keys, and your browser's user agent string.
What is not stored, and cannot be
The text of your entries, their titles, your passphrase, your recovery code, and your encryption key. There is no analytics, no advertising, no tracking pixel and no third-party script anywhere in the app. The only cookie is the one that keeps you signed in.
What can still be inferred
Because dates and timestamps are unencrypted, someone with database access could tell that you journal, on which days, and roughly how long each entry is. They could not read a single word of it. That is a deliberate trade: encrypting those fields too would leave the app unable to sort or sync your entries.
Who else handles your data
- Supabase hosts the database and authentication, and sends the sign-in email.
- Vercel hosts the application and keeps ordinary server request logs.
- Your browser vendor's push service (Apple, Google or Mozilla) delivers reminders, if you enable them. Reminders carry no content from your journal, because the server that sends them cannot read it.
Data on your device
Your entries are also kept in your browser's local storage, still encrypted, which is what lets the app work offline. Your key is held there in a form the browser will not hand back to any script. Locking the app, whether by hand or automatically, removes that key from the device until you unlock again. “Forget this device” erases the local copy completely.
Retention and deletion
Deleting an entry hides it everywhere, but the encrypted row stays in the database so that the deletion can reach your other devices. To remove data permanently, delete your rows from the database directly. Once the sealed copies of your key are gone, any remaining ciphertext is unopenable by anyone, including you.
If you lose your secrets
There is no password reset. If you lose both your passphrase and your recovery code, your entries cannot be recovered by anyone. That follows from the encryption design and is not an operational limitation that support can work around.
Contact
This is a personal project run by its author. Questions go to whoever operates the instance you are using.