Privacy
Last updated 7 August 2026
There is no server. No account, no login, no database of yours anywhere. Your diary is a value in your browser's storage on this device, and the only way it leaves is if you export it yourself.
What stays on your device
Everything you type or tap. Ratings, confounder tags, notes, saved places, settings, the
exposure readings captured with each entry, and the last good air reading kept for offline
use. They live under these keys in this browser's localStorage, plus one
marker in IndexedDB used to notice that the browser wiped the rest:
breathing-index.diary.v1— your entriesbreathing-index.settings.v1— places, sources, units, usage-ping opt-outbreathing-index.lastSeries.v1— the last air reading, for offlinebreathing-index.place.v1— the place name for your coordinates-
breathing-index.durability.v1,breathing-index.sentinel.v1,breathing-index.banked-day.v1— housekeeping
Clearing site data deletes all of it, permanently, and I cannot get it back for you — I never had it. Settings has an export button. Use it.
No cookies. Nothing here is a cookie, and the app sets none.
What gets sent, and to whom
Four other services see a request from your browser. That is the whole list.
| Open-Meteo | Air quality and weather. Sees your coordinates, rounded to three decimals (about 110 m), and nothing else. |
|---|---|
| AirNow | Station measurements for comparison, US only, off unless you turn it on in Settings. Sees the same rounded coordinates. |
| BigDataCloud | Turns those coordinates into the place name in the header. Same rounded coordinates, asked once per location and then cached. |
| Mixpanel | Usage pings — the table below. Off if you turn it off. |
Fonts and icons are served from this domain, so opening the app is not a request to Google or a CDN. There is no ad network, no tag manager, no embedded anything.
Usage pings, exactly
Turn them off in Settings and the analytics code is never even loaded. While they are on, these are the events. No rating, tag, note, place name, coordinate, or pollutant value appears in any of them.
| Page view |
Automatic, on load and on every in-app navigation: the URL path and query string of the
screen (/, /diary, /settings…).
|
|---|---|
| Prediction viewed |
diaryEntries — how many entries your diary holds
stale — whether the reading shown was a cached one
locationSource — auto, saved or
default, never which place
|
| Diary entry saved |
coldStart — whether the forecast was still unpersonalized
saveMs — how long the save took
totalEntries — how many entries after it
Not the rating.
|
| Conflict tagged |
kind — superseded or unmodeled-trigger, the type
of card, not the tag you chose
|
| Intro dismissed | choice — location or manual |
| Diary eviction seen | No properties. Records that a browser wiped somebody's diary. |
| Diary restored | entries — how many entries the backup you loaded added |
| Persistence requested |
granted — whether the browser agreed to stop treating your diary as
disposable cache
|
Mixpanel attaches its own defaults to every event: a random device id (not an account), browser and operating system name and version, screen size, referrer, and the current URL. IP geolocation is switched off and the city, region and country properties are blocked, so no location is derived from the request. Mixpanel's servers still receive your IP address at the network level, the way every server you contact does; it simply is not turned into a place and stored.
What the pings are for: knowing whether people can log an entry and whether anything is broken. Nothing is sold, shared, or joined to anything else. There is nobody to sell it to; this is one person's side project.
Children
Not directed at children under 13, and since nothing identifying is collected, there is nothing of theirs for me to hold.
Changes
If the app ever sends something new, this page changes in the same commit — that is a rule I hold myself to, not a promise in the abstract. The date at the top is the last time it did.
Contact
Drew Hoover — drewhoover.com. The code is public at github.com/DrewHoo/breathing-index, so you can check any of this rather than take my word for it.