diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cf3be87d..ea0a240a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,6 +36,13 @@ jobs: run: | echo "COMPANION_URL=${{ secrets.COMPANION_URL }}" > .env echo "BACKEND_URL=${{ secrets.BACKEND_URL }}" >> .env + # Health-data contribution (full on-device DB upload) is OFF for + # every build we distribute, sideload included — matching + # PRIVACY.md's "we do not collect your data". Passed explicitly + # (not just relying on kHealthDataContributionEnabled's default) + # so this is true by construction of the CI config itself, not + # contingent on nobody ever changing that default later. + echo "ENABLE_HEALTH_DATA_CONTRIBUTION=false" >> .env # Decode the release keystore from a secret. The gradle config picks these # env vars up (ANDROID_KEYSTORE_PATH etc.) and signs the release build. @@ -127,6 +134,13 @@ jobs: run: | echo "COMPANION_URL=${{ secrets.COMPANION_URL }}" > .env echo "BACKEND_URL=${{ secrets.BACKEND_URL }}" >> .env + # Health-data contribution (full on-device DB upload) is OFF for + # every build we distribute, sideload included — matching + # PRIVACY.md's "we do not collect your data". Passed explicitly + # (not just relying on kHealthDataContributionEnabled's default) + # so this is true by construction of the CI config itself, not + # contingent on nobody ever changing that default later. + echo "ENABLE_HEALTH_DATA_CONTRIBUTION=false" >> .env - name: Install flutterfire (required by Crashlytics Xcode build phase) run: dart pub global activate flutterfire_cli 1.4.0 diff --git a/NOTICE.md b/NOTICE.md new file mode 100644 index 00000000..97c3ad5d --- /dev/null +++ b/NOTICE.md @@ -0,0 +1,11 @@ +# Notice + +Edge is an independent, open-source project (MIT License — see `LICENSE`). It +is not affiliated with, sponsored by, or endorsed by WHOOP, Inc. or any of its +trademarks. + +No WHOOP source code, binaries, firmware, or copyrighted assets are included +in this repository. The Bluetooth protocol support in this project was +independently developed by observing the band's own Bluetooth communications; +see [the protocol repo's README](https://github.com/OpenStrap/protocol) for +methodology notes. diff --git a/PRIVACY.md b/PRIVACY.md new file mode 100644 index 00000000..f1430749 --- /dev/null +++ b/PRIVACY.md @@ -0,0 +1,87 @@ +# Privacy Policy — Edge / OpenStrap + +_Last updated: July 18, 2026_ + +Edge ("the App") is an independent, open-source project. It is not affiliated +with, sponsored by, or endorsed by WHOOP, Inc. + +**We do not collect your data** +This section describes every build we ourselves distribute — the signed +Android APK and iOS IPA published on GitHub Releases, and any future App +Store/Play Store submission. Your biometric/health data from your paired +WHOOP 4.0 band — heart rate, heart rate variability (RR intervals), motion +(accelerometer), raw skin-temperature/blood-oxygen sensor channels, and (if +you record workouts) GPS location during those workouts — is processed and +stored entirely on your device in every one of those builds. We do not +upload it, we do not operate a backend that receives it, and we never see it +— *unless you separately choose to enable AI Coach or Health app +integration, described below, which send specific data to services you +configure.* + +Edge is open source. The underlying code contains an off-by-default, +compile-time flag (`kHealthDataContributionEnabled`, see +`lib/telemetry/health_uploader.dart`) that an independent developer could +enable in their *own*, separately-built and separately-distributed copy of +the app, pointed at a backend of their own choosing. No build we publish +enables it — our CI explicitly forces it off for every release (see +`.github/workflows/build.yml`) rather than relying on the flag's default. A +self-built copy compiled with that flag on is that builder's own software +and their own responsibility; it is not covered by this policy. + +**Anonymous diagnostics (on by default)** +In every build we distribute, the only thing the App sends off your device +*automatically* — aside from the optional, user-initiated integrations +described next — is basic crash/error and performance monitoring, via +Firebase (Google) — Crashlytics, Performance Monitoring, and Analytics. This +is on by default; you can turn it off at any +time in Settings ("Send anonymous diagnostics"), which stops any further +collection immediately. It never includes your health data — only crash +reports, basic device info (OS/model/app version), and coarse performance +timing. This data is handled under Firebase's own privacy and security +practices, not a system we built or operate ourselves — see Google's Firebase +privacy & security documentation: https://firebase.google.com/support/privacy. + +**Optional, user-initiated integrations** +If you choose to enable them, the App can also send data to services *you* +configure: +- **AI Coach** — if you enable this feature and supply your own API key, + summaries of your data are sent to the AI provider you configure (by + default, OpenAI) to generate coaching responses. Off by default and + requires your own API key. +- **Health app integration** — if you enable it, the App can write derived + daily metrics to Apple Health or Google Health Connect, which are controlled + by your device's own OS-level health app, not by us. + +**What we don't do** +We do not sell your data. We do not send your health data to WHOOP, Inc. or +any advertising network. We do not require a WHOOP account or credentials to +use the App. We do not operate a backend that stores your health data. + +**Your controls** +Turn off "Send anonymous diagnostics" at any time in Settings — this stops any +further collection immediately. You can also disable AI Coach or Health app +integration at any time in Settings if you'd previously turned them on. + +Uninstalling the App deletes all of your locally stored data immediately. +That's the whole picture *unless* you had separately enabled one of the +optional integrations above — in that case, uninstalling stops the App from +sending anything further, but does not reach back and delete data already +sent: +- Anonymous diagnostics already sent to Firebase are retained and governed by + Firebase's own practices (linked above), not by us. +- Data already sent to your configured AI Coach provider (e.g. OpenAI) is + retained and governed by that provider's own policies, not by us. +- Metrics already written to Apple Health or Google Health Connect are + retained and governed by that platform's own data controls, not by us — + manage or delete them from that app directly. + +**Children** +This App is not directed to children under 13 (or the relevant age of digital +consent in your jurisdiction) and we do not knowingly collect data from them. + +**Changes** +We may update this policy; material changes will be reflected here with an +updated date. + +**Contact** +Questions about this policy: abdulsaheel81@gmail.com. diff --git a/docs/privacy.html b/docs/privacy.html index c4791acb..2196718c 100644 --- a/docs/privacy.html +++ b/docs/privacy.html @@ -26,26 +26,51 @@

Privacy Policy — Edge / OpenStrap

Edge ("the App") is an independent, open-source project. It is not affiliated with, sponsored by, or endorsed by WHOOP, Inc.

-

Data we collect

- +

We do not collect your data

+

This section describes every build we ourselves distribute — the signed + Android APK and iOS IPA published on GitHub Releases, and any future App + Store/Play Store submission. Your biometric/health data from your paired + WHOOP 4.0 band — heart rate, heart rate variability (RR intervals), motion + (accelerometer), raw skin-temperature/blood-oxygen sensor channels, and (if + you record workouts) GPS location during those workouts — is processed and + stored entirely on your device in every one of those builds. We do not + upload it, we do not operate a backend that receives it, and we never see + it — unless you separately choose to enable AI Coach or Health app + integration, described below, which send specific data to services you + configure.

+ +

Edge is open source. The underlying code contains an off-by-default, + compile-time flag (kHealthDataContributionEnabled) that an + independent developer could enable in their own, separately-built + and separately-distributed copy of the app, pointed at a backend of their + own choosing. No build we publish enables it — our CI explicitly forces it + off for every release rather than relying on the flag's default. A + self-built copy compiled with that flag on is that builder's own software + and their own responsibility; it is not covered by this policy.

+ +

Anonymous diagnostics (on by default)

+

In every build we distribute, the only thing the App sends off your device + automatically — aside from the optional, user-initiated + integrations described next — is basic crash/error and performance + monitoring, via Firebase (Google) — Crashlytics, Performance Monitoring, and + Analytics. This is on by default; you can turn it off at any time in + Settings ("Send anonymous diagnostics"), + which stops any further collection immediately. It never includes your + health data — only crash + reports, basic device info (OS/model/app version), and coarse performance + timing. This data is handled under Firebase's own privacy and security + practices, not a system we built or operate ourselves — see Google's Firebase + privacy & security documentation: + firebase.google.com/support/privacy.

-

Where your data lives

-

By default, all of the above is stored locally on your device only. We do not - upload it anywhere unless you explicitly opt in to one of the following:

+

Optional, user-initiated integrations

+

If you choose to enable them, the App can also send data to services + you configure:

6. Third-Party Services

-

Certain optional features rely on third-party services you separately +

The App uses Firebase (Google) for anonymous crash/error and performance + monitoring (Crashlytics, Performance Monitoring, Analytics). This is on by + default and can be turned off at any time in Settings — see the Privacy + Policy for details. It never includes your health data.

+

Certain other, optional features rely on third-party services you separately configure or consent to, including: