Think about what's in a mood log after a few months. The days you fell apart. The thing that keeps setting you off. The pattern around a specific person. Read end to end, it's a more honest record of your inner life than anything else on your phone.

Now look at how most apps want you to store it. Make an account. Agree to a privacy policy you won't read. Let it sync to a server so you can "access it anywhere." Trust that the company stays solvent, stays unhacked, and stays honest about what it does with the data.

That's a lot of trust to spend on a place to write down that you felt low on a Tuesday.


The account is the problem, not a feature

An account sounds like convenience. What it actually is, is a copy of your data living somewhere you don't control, tied to your identity, behind a login that can be breached, locked, or subpoenaed.

Every account is a second copy of the most sensitive thing you've written, sitting on hardware you've never seen. The app doesn't need that copy to do its job. You need it to log a mood and read your trends. None of that requires a server knowing who you are.

So when I built SoulSync, the first decision was the easiest one: no account. You open the app and start. There's nothing to sign up for because there's nothing on the other end to sign up to.


Where your SoulSync data actually lives

On your phone. That's the whole answer, but it's worth being specific about the parts.

Entries in local SQLite

Every mood entry, every note, every activity tag goes into a SQLite database in the app's private storage on your device. SQLite is the same boring, battle-tested database that runs inside your browser and most of the apps you already use. It's a file. It sits on your phone. It does not phone home.

Photos stay on device too

You can attach a photo to an entry. That photo also stays local. It is not uploaded, not mirrored to a bucket, not run through anyone's image pipeline. The picture of your dog on a good day is between you and your phone.

No tracking, no ads, no analytics

There's no analytics SDK counting your taps and no ad network watching what you do. Those are the usual quiet channels through which "free" apps move data around. SoulSync doesn't have them. It's free for a different reason, which is that it's open source, not because you're the product.

SoulSync mood heatmap computed entirely on device
The heatmap is computed on your phone, from your local database

JSON export means you actually own it

Local-first has one fair objection: if it's only on my phone, what happens when I lose my phone? Good question, and the answer is that owning your data means being able to move it.

SoulSync has JSON import and export built in. Your whole history is a plain file you can pull out whenever you want. Back it up to wherever you trust. Move it to a new device. Open it in a script if you're that kind of person. Or delete it, completely, with no copy left behind on a server because there was never a copy on a server.

That's a different kind of ownership than "you can export a PDF if you pay." You hold the actual data, in a format you can read, with no gatekeeper.


Offline is the normal state, not a fallback

Because everything runs locally, SoulSync works on a plane, in a tunnel, with the wifi off, on a dead SIM. There's no loading spinner waiting on a server, no "you're offline" screen, no degraded mode. Offline isn't a fallback the app limps along in. It's just how it always works.

Which, when you think about it, is how a private journal should behave. The notebook in your drawer doesn't need a connection either.


Try it

SoulSync is open source under GPL-3.0, with the code public at github.com/Antimatter543/mood-tracker, so the privacy claims here are checkable, not just stated.

It's Android-only for now. Grab the APK from the latest release and your first entry never leaves your phone. If you came from a paid tracker, I wrote about that move in building a free, open-source Daylio alternative, and about the pricing side in why mental-health tracking behind a subscription is backwards.