A private, offline Android app for logging emotions as they happen — what you felt, how strongly, what prompted it, and what you did about it.

It is a logging tool, not treatment.

bpdtools is not publicly distributed yet. There is nothing to download from this page.

What it does

Three screens, and nothing it does not need.

Log

Pick an emotion, set an intensity from 0 to 10, add an optional note on what triggered it, tag any coping skills you used, and adjust the timestamp if you are logging after the fact. Saving resets the form in place, so logging several entries in a row is fast.

The Log screen: a grid of emotion buttons with Anger selected, an intensity of 7 above a slider, a note reading "Left on read again.", and a row of coping-skill buttons.

History

Everything you have logged, most recent first, grouped by day. Tap an entry to edit it. Deleting offers an Undo — a visible button rather than a swipe, because a swipe is invisible to a screen reader and would leave some people with no way to discover it.

The History screen: entries grouped by day under Today, Yesterday and earlier dates, each row showing an emotion, an intensity out of ten, and a delete button.

Trends

Three views over the last 7 days, 30 days, or all time: mean intensity per day, your most frequent emotions, and average intensity for each one. The intensity axis is pinned to 0–10 rather than auto-scaled, and every chart has a plain-text equivalent beneath it.

The Trends screen: a 7 days, 30 days and all time selector, a line chart of intensity over time with each day's figure written out beneath it, and lists of the most frequent emotions and their average intensities.

Where your entries go

This is a mental-health-adjacent app, so it comes before anything else — including the parts that are not flattering.

Sync is off until you turn it on
With it off, entries live only on your device, in an app-private database no other app can read.
The app can reach the network
Earlier versions declared no internet permission at all, so Android itself would refuse to open a socket even if a bug tried. That guarantee is gone. What replaces it is weaker: one compiled-in destination (api.bpdtools.cloud), cleartext traffic disabled, and a switch that is off until you turn it on. That is policy enforced by this app's code, where before it was enforced by Android regardless of this app's code. It is worth knowing which of those you have.
Sync brought in more than one permission
Alongside internet access, the background scheduler adds network-state, wake-lock, boot-completed and foreground-service permissions, and Android may add local-network access at install. Android Settings lists seven, not one — worth knowing before you go looking. None of them read anything on the device, and with sync off nothing is scheduled for them to do.
The first sync uploads everything
If you turn sync on, the first upload is everything: every entry, including what you wrote in "What happened?", and including entries logged long before sync existed. Each one is sealed on the phone before it leaves. Nothing has ever been marked as synced, so the first successful upload is your entire history. The app tells you this, and the exact entry count, before it happens.
Entries are encrypted end to end
The phone seals the emotion, the intensity, the coping skills and the trigger note together under AES-256-GCM, with a 32-byte key that never leaves your device, before any of it is sent. The server stores a blob it has no key for: nobody with access to that machine can read what you wrote — not with administrator access, not from a disk snapshot, not from the offsite backup. What it can still see is the public metadata: the entry's id, when it was recorded, created and last updated, whether it is a deletion, and when it arrived. Timing, not content. That metadata is bound to the sealed blob rather than merely filed beside it, so a server that reordered your entries, backdated one, or un-flipped a deletion would fail the next decrypt rather than manage it quietly.
Turning sync off does not delete what was already sent
There is no delete endpoint, so the app cannot make one. Removing data from the server is done on the server.
Deleting an entry does not unsend it
Once an entry has synced, deleting it on the phone does not remove the row from the server. The row is kept there as a tombstone so that a restore is faithful, but its payload stays sealed — the server cannot read what was deleted any more than it could read it before. Clearing the app's storage does not reach it.
No account, no login, no telemetry, no analytics
Nothing about your usage is collected or reported. There are two secrets, and you paste in both yourself: the sync token, and the encryption key that seals your entries.
Android's cloud backup is disabled
The app declares backup off, and an explicit rules file excludes the database, the preferences, and every other file domain. The only upload is the one you switch on, to one address you can name.
Device-to-device transfer is deliberately left on
It copies your entries straight from an old phone to a new one without touching a server. Neither of your secrets comes across — the token and the encryption key are both wrapped with a key held in the Android Keystore, and those keys do not transfer. You paste both in again on the new phone.
Deleting your data
Deleting an entry hides it from the app — it stops appearing anywhere in the interface. The row itself is kept as a tombstone so that sync can report the deletion. To remove the data from the phone, clear bpdtools's storage in Android Settings, or uninstall the app.

What it isn't

bpdtools gives no advice, no diagnosis, and no suggestions. It does not interpret what you log, score it, or tell you what to do about it. It records what you tell it and helps you look back at it later.

The coping-skill vocabulary is drawn from Dialectical Behaviour Therapy. Naming a skill is not recommending it.

It is a logging tool, not treatment.