Privacy policy
Last updated: 30 July 2026
Widgets is an iOS app made by me, Tony Gao. It shows daily numbers (steps, workouts, activity minutes, tracked hours, manual counts) as a heatmap. This page explains what data the app touches and where it goes.
Short version: everything stays on your phone. Apple Health data never leaves your device. Strava and Toggl data are fetched straight from those services with your own tokens, which live in your iOS Keychain. I run one small server function that relays the Strava login handshake and stores nothing. There are no accounts and no analytics.
Who I am
Widgets is a personal project by Tony Gao ("I", "me"). You can reach me at t.gao@yale.edu. This policy covers the Widgets iOS app and the Cloudflare Worker that supports it.
Data the app touches
Apple Health
With your permission, Widgets reads daily totals from HealthKit. This can include steps, workout minutes, sleep, HRV, active energy, mindful minutes, resting heart rate, and body mass. These reads happen entirely on your device.
- Does it leave your device? No. Never.
- Storage: Daily totals are cached in a file that only the Widgets app and its widget can read. Deleting the app deletes the cache.
- Permission: You grant access through the normal
iOS Health prompt. You can turn it off any time in
Settings → Privacy & Security → Health → Widgets.
Strava
With your permission, Widgets gets a read-only Strava token
(activity:read) and uses it to add up your daily activity
minutes.
- What it reads: activity ID, type, start time, and elapsed time. It does not read GPS routes, heart rate, segments, or social data.
- Token storage: in your iOS Keychain. It never leaves your device after login.
- Disconnect: Settings → Integrations → Disconnect Strava in the app, or revoke Widgets at strava.com/settings/apps.
Toggl Track
If you connect Toggl, you paste in your own Toggl API token. Widgets uses it to read your time entries and add up daily tracked hours.
- Token storage: in your iOS Keychain. The token is only ever sent to Toggl's API, never to me.
- Disconnect: Settings → Integrations → Disconnect Toggl in the app. You can also reset the token itself at track.toggl.com/profile.
Manual entries
Counts you tap in are saved in the app's local database on your phone. They are never sent anywhere.
The server part
I run one small function on Cloudflare Workers. Its only job is to finish the Strava login handshake, because Strava requires a client secret that can't safely ship inside an app. The Worker:
- Receives the login code from Strava, exchanges it for a token, and hands the token back to your device.
- Does not log tokens or request contents.
- Keeps no state between requests. There is no database.
- Has no analytics or tracking.
Cloudflare itself may log basic request metadata (IP address, timestamp) for abuse prevention, per Cloudflare's privacy policy.
What I don't collect
- No analytics or telemetry SDKs.
- No device identifiers for tracking.
- No automatic crash reports. (If you share diagnostics with Apple through iOS Settings, Apple handles those, not me.)
- No user accounts. No email, no password, no profile.
- No selling or sharing of data with anyone.
- No ads.
Sharing
I don't share your data with anyone. The only parties involved are the services you connect (Apple Health, Strava, Toggl) and Cloudflare as the Worker host. In each case the data flows between your device and that service directly. If I ever get a legal demand, there are no user records on my side to hand over.
Retention
Caches live on your phone for as long as the app is installed and the integration is connected. Disconnecting an integration clears its cache. Deleting the app removes everything. The Worker keeps nothing.
Children
Widgets is not for children under 13 (or under 16 in the EU/UK). If you are under that age, don't use it.
Your rights
Since there is no server-side data, everything is handled on your device:
- Access and export: your data lives in Apple Health, Strava, and Toggl, which have their own export tools.
- Deletion: disconnect each integration in Settings → Integrations, then delete the app.
- Revocation: revoke Widgets at strava.com/settings/apps or reset your Toggl token at track.toggl.com/profile.
Anything else, write to t.gao@yale.edu.
Security
Tokens are stored in the iOS Keychain. All traffic uses HTTPS. The Worker uses signed state tokens during login to prevent code injection attacks. If you find a vulnerability, please report it privately to t.gao@yale.edu and I'll credit you in the fix.
Changes
If something material changes, like a new integration, I'll update this page and the date at the top, and show a one-time notice in the app.
Contact
Tony Gao, t.gao@yale.edu