Tray for iOS and Android
Last updated 30 August 2026
Tray has no server. Nothing you do in it is sent to me, because there is nowhere for it to go. This page explains what that means in practice, and the few places where data does leave your phone — always to a service you chose and signed in to yourself.
| What | Why | How long |
|---|---|---|
| Dining hall menus and nutrition labels from UConn | So the app works in a basement with no signal | About a month either side of today, then deleted automatically |
| Your journal — what you logged, when, and where | So you can look back at your day | Until you delete it, in the app |
| Your settings — chosen destination, theme, last hall | So the app opens where you left it | Until you delete the app |
| Sign-in tokens for MyFitnessPal or Cronometer | So you are not asked to sign in every time | Until you sign out, or delete the app |
All of it is inside the app's own private storage, which no other app on the phone can read. Deleting Tray deletes all of it.
Tray reads the public nutrition website UConn publishes at
nutritionanalysis.dds.uconn.edu. These are ordinary anonymous page requests
for menus, the same ones your browser would make. No account is involved and nothing
about you is sent.
You sign in to MyFitnessPal in a web view inside the app. Tray keeps the session token that produces, in the iOS Keychain. When you log food, Tray creates the food in your MyFitnessPal account and adds it to your diary. I never see any of it. Your MyFitnessPal password is typed into MyFitnessPal's own sign-in page and is never seen or stored by Tray.
Cronometer has no browser sign-in for this, so the app asks for your email and password and sends them once, over HTTPS, to Cronometer's own API. The password is discarded the moment the reply comes back. Only the session key Cronometer returns is kept, in the iOS Keychain. Logged food goes to your Cronometer diary.
When Apple Health is your destination, Tray writes a nutrition record for each food you log: energy, protein, carbohydrate, fat, and where the label carries them, saturated fat, cholesterol, sodium, fibre, sugar, calcium, iron, vitamin D and potassium. The item's name and the dining hall are attached so the entry is recognisable in the Health app.
Tray reads nothing from Apple Health. It asks for permission to write and for nothing else. Health data obtained through HealthKit is never used for advertising or marketing, never used for data mining, never sold, and never disclosed to anyone. It does not leave your phone except into Apple Health itself, which is Apple's storage on your device, not mine.
If you leave the destination set to None, which is the default, food you log stays in Tray's own journal and no network request is made to log it.
The app has exactly one third-party code dependency: SwiftSoup, an open-source HTML parser that runs entirely on your phone and makes no network requests of its own.
The About screen has a link to Buy Me a Coffee. Tapping it opens that site in your browser. If you choose to donate there, that transaction is between you and Buy Me a Coffee under their privacy policy — Tray sends them nothing and receives nothing back.
Tray is not directed at children under 13 and collects no personal information from anyone, of any age.
Food already sent to MyFitnessPal, Cronometer or Apple Health lives in those services from that point on. Tray cannot reach back in and remove it — you delete it there, the same way you would any other entry.
If this policy changes, the date at the top changes with it and the previous versions stay in the page's history on GitHub, where anyone can read them.
Questions about any of this: Jeffiskofta@gmail.com