Privacy Policy — cellTrainer
Effective date: May 19, 2026 Version: 1.0
1. Controller
The data controller within the meaning of Article 4(7) GDPR is:
Michael Skerwiderski Zweigstraße 30a 82178 Puchheim Germany
Email: michael@skerwiderski.de Web: https://celltrainer.skerwiderski.cloud
2. Principle
cellTrainer is built on a privacy-by-design principle. The app processes training, sensor, and profile data exclusively on your iOS device. There is no provider-operated cloud backend: no personal data is transmitted to any server operated by the provider — except via third-party integrations that you explicitly enable (see Section 7).
cellTrainer contains no tracking, no telemetry, no advertising, and no analytics SDKs, and performs no profiling within the meaning of Article 4(4) GDPR.
3. Categories of Data Processed
3.1 Sensor Data (Bluetooth Low Energy)
cellTrainer connects to wireless sensors that you pair yourself. The following raw data fields are read and processed:
- Heart rate (HR) and RR intervals (time between consecutive heartbeats — basis of heart rate variability, HRV)
- Muscle oxygen saturation SmO₂ and hemoglobin concentrations O₂Hb / HHb (with compatible NIRS sensors such as Train.Red FYER)
- Core body temperature, skin temperature, Heat Strain Index (when a greenteg CORE2 thermal sensor is connected). When a heart-rate strap is also connected, cellTrainer forwards the heart-rate value to the CORE2 over the existing BLE connection so the sensor can improve its own accuracy at high intensity. No data is transmitted to the CORE manufacturer's servers.
- Power in watts (power meter)
- Cadence
- Speed, incline, distance, stride length, elapsed time (treadmill / indoor bike, standard FTMS)
3.2 Computed Training Metrics
cellTrainer derives metrics locally on your device from the raw sensor data:
- Detrended Fluctuation Analysis α1 (DFA α1) and quality score
- Training zones (power, pace) based on your FTP / pace threshold
- Ventilatory thresholds VT1 / VT2 (DFA-based, calibratable)
3.3 Profile and Settings
You voluntarily enter the following data in the app:
- First name, last name (optional)
- Date of birth (used for age-based calculations)
- Gender
- Body weight, height
- FTP, pace threshold, individual DFA thresholds
- App configuration (paired sensors, display layout, training modes)
3.4 Training Sessions
For each training session, the following are stored:
- Time series with one row per second — all sensor values from 3.1 and metrics from 3.2
- Summaries (duration, distance, elevation gain, average and peak values)
- Lap breakdowns
- When a treadmill and a run sensor (Stryd-style footpod) are used together in Run mode: additionally the run sensor's raw readings (speed, cadence, power) as "second-source" columns per sample, plus a post-session calibration factor (ratio of treadmill distance to run-sensor distance). Both are kept solely to let you compare the two sources later and to calibrate the footpod.
- Optionally: environment data (temperature, humidity) from your Home Assistant instance, if connected (see Section 7.6)
cellTrainer does not collect location (GPS) data, audio, video, or contact data. The app is designed for indoor training; distances are integrated from sensor speed, not derived from GPS positions.
3.5 Device Status
While the app is in use, cellTrainer reads the battery level and charging state of your iPhone / iPad via the standard iOS UIDevice interface, in order to display a subtle in-tile warning indicator (yellow < 25 %, orange < 15 %, red < 10 %) when the battery drops below 25 % and the device is not connected to power. This information is kept exclusively in the running app's memory, never persisted, and never transmitted to third parties or the provider. When the app terminates it is gone.
4. Purposes and Legal Bases
4.1 Performance of Core Functionality — Article 6(1)(b) GDPR
Processing of sensor, profile, and training data is necessary to provide the app in the scope you adopt by installing and configuring it.
4.2 Health Data — Article 9(2)(a) GDPR
Sensor data such as heart rate, RR intervals, muscle oxygenation, core body temperature, and the metrics derived from them are health data within the meaning of Article 4(15) GDPR. Their processing is based exclusively on your explicit consent, which you give by pairing a sensor and starting a training session. You can withdraw consent at any time by unpairing the sensor or uninstalling the app (see Section 11).
4.3 Local Storage — Section 25(2)(2) TTDSG (German Telecommunications-Telemedia Data Protection Act)
Storing profile, settings, and training data on your device is technically necessary to provide the function you have requested; therefore, no separate consent under Section 25(1) TTDSG is required.
4.4 Third-Party Integrations — Article 6(1)(a) GDPR and Article 49(1)(a) GDPR
Data transmissions to Garmin Connect, Intervals.icu, Dropbox, HiDrive, Strava, and Home Assistant occur exclusively based on your explicit consent, which you provide by deliberately enabling and authenticating each integration (details in Section 7). To the extent data is transferred to a third country, the transfer is also based on your explicit consent within the meaning of Article 49(1)(a) GDPR.
cellTrainer does not rely on legitimate interests (Article 6(1)(f) GDPR) for any processing.
5. Local Storage
5.1 Storage Locations on Your Device
- iOS Keychain: OAuth tokens and API keys for the third-party integrations you have enabled (Garmin Connect, HiDrive, Intervals.icu, Home Assistant). The Keychain is hardware-backed encrypted and protected by your device passcode or Face ID / Touch ID.
- App sandbox: Training sessions as files (
.ctd.json.gz, FIT, XLSX), profile settings, and app configuration. These files reside exclusively in the app's isolated data container and are protected by iOS device encryption.
5.2 Encryption
- All app data is protected by iOS device encryption, provided you have set a device passcode or Face ID / Touch ID.
- When exporting settings to the
.ctsformat, you may set a passphrase; sensitive content such as third-party tokens is encrypted in this file using AES-256-GCM (PBKDF2-SHA-256, 200,000 iterations).
5.3 Deletion
- Uninstalling the app removes all data stored by cellTrainer.
- You can disconnect any third-party integration at any time in the app settings; the corresponding tokens are removed from the Keychain.
- You can delete your user profile within the app settings.
5.4 iCloud Backup
If you have enabled iCloud Backup on your device, training sessions and settings are — like all app data — backed up to your Apple iCloud account. Tokens stored in the Keychain are subject to your iCloud account's backup rules. The cellTrainer provider has no access to these backups; they are governed exclusively by your contract with Apple.
5.5 Background Execution
To avoid breaking an active training session when you briefly switch to another app (e.g. to change a music playlist), cellTrainer uses two iOS background modes:
bluetooth-central: the app stays connected to paired BLE sensors and keeps receiving their measurementsaudio: while a session is active, the app plays a silent zero-volume audio loop with the.mixWithOthersoption. Its sole purpose is to prevent iOS from suspending the app's 1 Hz sample timer; it produces no audible signal and does not overlay or modify the audio playback of other apps. The loop ends when the session is stopped or reset.
Additionally, Bluetooth state restoration (CBCentralManagerOptionRestoreIdentifierKey) is enabled. If iOS terminates the app entirely in the background, an incoming BLE event can wake it up automatically — without any action on your part — to restore the sensor connection.
In these background states the app processes the same sensor data as in the foreground. In particular, no additional data is collected, no location is queried, and nothing is transmitted to third parties.
6. HealthKit
cellTrainer does not use HealthKit. The app does not read data from the Apple Health app and does not write data to it. No HealthKit permission is requested.
7. Optional Third-Party Integrations
The following integrations are optional. They are active only if you deliberately set them up and authenticate against the respective provider with your own account. You can disconnect any integration at any time in the app settings; the associated tokens are removed from the Keychain.
cellTrainer is not the operator of these services. Processing of your data by each third-party provider is governed exclusively by that provider's privacy policy.
7.1 Garmin Connect
- Provider: Garmin International, Inc., 1200 East 151st Street, Olathe, Kansas 66062, USA
- Authentication: OAuth 1.0a + OAuth 2.0 (you sign in with your Garmin account)
- Data flow:
- Upload (initiated by you or automatically after a session, if enabled): the full training file in FIT format, including all data from Section 3.4
- Download: athlete profile, training plans, training calendar, biometric thresholds (lactate threshold, FTP) — if available in Garmin Connect
- Third-country transfer: Garmin processes data in the United States. The transfer is based on your explicit consent under Article 49(1)(a) GDPR and — to the extent valid at the time of transfer — Garmin's EU-US Data Privacy Framework certification.
- Garmin's privacy policy: https://www.garmin.com/en-US/privacy/connect/
7.2 Intervals.icu
- Provider: David Federlein (Intervals.icu), Australia
- Authentication: API key (which you generate at https://intervals.icu/settings and enter into cellTrainer)
- Data flow:
- Upload: training data as FIT files (content as in Section 7.1)
- Download: training plan, athlete profile, training zones
- Third-country transfer: Intervals.icu is operated in Australia. There is no European Commission adequacy decision for Australia. The transfer is based exclusively on your explicit consent under Article 49(1)(a) GDPR.
- Intervals.icu privacy policy: https://intervals.icu/privacy
7.3 Dropbox
- Provider (EEA): Dropbox International Unlimited Company, One Park Place, Hatch Street Upper, Dublin 2, Ireland
- Provider (outside EEA): Dropbox, Inc., 1800 Owens Street, San Francisco, CA 94158, USA
- Authentication: OAuth 2.0 with PKCE (you sign in with your Dropbox account; cellTrainer holds no client secret)
- Access scope: cellTrainer operates in App Folder mode — Dropbox creates
/Apps/cellTrainer/for the app, and cellTrainer can only access that subtree. Other folders in your Dropbox are unreachable for cellTrainer. - Data flow:
- Upload: training exports (FIT, XLSX, CTD) into
/Apps/cellTrainer/Exports/(content as in Section 7.1) - Download: ZWO workout files from
/Apps/cellTrainer/Workouts/ - Display name (display_name) of your Dropbox account, used solely to confirm successful sign-in
- Third-country transfer: Dropbox offers data-residency options for EEA accounts, but its US parent Dropbox, Inc. retains technical support access. The transfer takes place on the basis of your explicit consent under Article 49(1)(a) GDPR and — to the extent it is in force at the time of transfer — Dropbox's EU-US Data Privacy Framework certification.
- Dropbox privacy policy: https://www.dropbox.com/privacy
7.4 HiDrive (Strato)
- Provider: STRATO GmbH, Otto-Ostrowski-Straße 7, 10249 Berlin, Germany
- Authentication: OAuth 2.0 (you sign in with your HiDrive account)
- Data flow:
- Upload: training exports (FIT, XLSX, CTD) into a folder of your choice
- Download: ZWO workout files from a folder of your choice
- Third-country transfer: None; HiDrive is operated in Germany.
- HiDrive privacy policy: https://www.strato.de/en/data-protection/
7.5 Strava
- Provider: Strava, Inc., 1330 Orleans Pier, Suite 200, San Francisco, CA 94158, USA
- Authentication: OAuth 2.0 (Authorization Code; you sign in with your Strava account and approve the permissions "Upload activities" and "Read profile"). Strava does not support PKCE for mobile apps; the client secret is bundled in the app binary and cannot be used to access your account without your consent.
- Scope: only
activity:write(to upload new activities) andread(to display your account name after successful sign-in). cellTrainer cannot read, modify, or delete existing activities, cannot access training plans, and cannot view your account's connections or private data. - Data flow:
- Upload: after every manually stopped training session the FIT file (content per Section 7.1) is sent to
POST /api/v3/uploads— flagged as indoor (trainer=1) and as virtual run / virtual ride (sport_type=VirtualRun/VirtualRide) - Polling: cellTrainer polls the upload's processing status at 1-second intervals for up to 30 seconds, so it can show you success or failure
- Display name (firstname + lastname) of your Strava account, used solely to confirm successful sign-in
- No download: the Strava API does not expose planned workouts; cellTrainer therefore does not retrieve any data from Strava
- Third-country transfer: Strava operates its infrastructure in the USA. The transfer is based exclusively on your explicit consent (Article 49(1)(a) GDPR) and — to the extent valid at the time of transfer — Strava's EU-US Data Privacy Framework certification.
- Strava privacy policy: https://www.strava.com/legal/privacy
7.6 Home Assistant
- Provider: You operate the Home Assistant server yourself (local home network or self-hosted). The cellTrainer provider has no contract with any Home Assistant operator.
- Authentication: long-lived access token (which you generate in Home Assistant and enter into cellTrainer)
- Data flow:
- cellTrainer connects via WebSocket to the URL you specify
- Receive: live values of selected sensors (temperature, humidity)
- cellTrainer does not send any training data to your Home Assistant server
- Third-country transfer: depends entirely on where you operate your Home Assistant server. cellTrainer has no influence on this.
7.7 OpenRouter — AI Coach Analysis
- Provider: OpenRouter, Inc., USA
- Authentication: API key (which you generate at https://openrouter.ai/keys and enter into cellTrainer). The key is stored in your device's iOS Keychain and is not synchronised.
- Data flow:
- One HTTPS request per completed training session to
https://openrouter.ai/api/v1/chat/completions - Transmitted: an aggregated snapshot of the session (typically under 2 KB) — workout plan (if loaded), aggregate values (avg/max for heart rate, power, cadence, speed), normalised power, intensity factor, TSS, distance, calories, elevation, time per training zone, DFA α1 histogram, HRV aggregates (rMSSD/SDNN, ectopic-event count), and — if a CORE2 sensor is connected — aggregate values for core body temperature and Heat Strain Index, plus a fat/carbohydrate substrate estimate
- Not transmitted: second-by-second raw time series, raw RR intervals, raw NIRS values, profile fields such as name or date of birth, device or sensor identifiers
- Receive: a 3–5-sentence coach report in your device language
- Model selection: you choose the model yourself (e.g. from Anthropic, OpenAI, Google or smaller open-source providers). OpenRouter is a proxy that forwards the request to the model provider you have selected. The downstream model provider's privacy policy applies in addition.
- Status: this feature is off by default. As long as you do not enter an API key, the app does not contact OpenRouter. You can disable auto-generation after a session stop on a per-user basis.
- Third-country transfer: OpenRouter is operated in the USA. The downstream model provider may also be located in a third country. The transfer takes place exclusively on the basis of your express consent (Art. 49(1)(a) GDPR).
- OpenRouter's privacy policy: https://openrouter.ai/privacy
8. What Does Not Happen
In particular, cellTrainer does not:
- transmit data to any provider-operated server (no such server exists)
- engage in advertising tracking, advertising, or use the IDFA / advertising identifier
- collect analytics, telemetry, or usage statistics for the provider
- embed any tracking, analytics, or crash-reporter SDKs (Sentry, Firebase, Crashlytics, Mixpanel, Amplitude, Adjust, Branch, AppsFlyer, etc.)
- engage in profiling within the meaning of Article 4(4) GDPR
- share your data with third parties without your explicit action (you enable third-party integrations yourself; see Section 7)
9. App Store / Apple
cellTrainer is distributed via the Apple App Store. Your relationship with Apple when obtaining the app is subject to Apple's Privacy Policy (https://www.apple.com/legal/privacy/en-ww/).
If you have enabled "Share With App Developers" under iOS Settings → Privacy & Security → Analytics & Improvements, Apple transmits anonymized crash and performance reports to cellTrainer. These reports contain no personal data and no training data. You can disable this at any time in iOS Settings.
9.1 In-App Purchases
cellTrainer is fully free of charge. There are no in-app purchases and no subscription; every feature is available without payment.
If optional paid features are introduced in a future version, this privacy policy will be updated accordingly; until then, no payment-related data is processed.
10. Your Rights
You have the following rights under the GDPR vis-à-vis the controller:
- Access to data processed about you (Article 15)
- Rectification of inaccurate data (Article 16)
- Erasure of your data (Article 17)
- Restriction of processing (Article 18)
- Data portability of data you provided (Article 20)
- Objection to processing (Article 21)
- The right not to be subject to a decision based solely on automated processing (Article 22)
Because cellTrainer transmits no personal data to any provider-operated server and the provider holds none of your data, your rights under Articles 15, 17, 18, and 20 GDPR can practically be exercised only through the app itself (delete profile, disconnect third-party integration, uninstall the app). For inquiries, please contact the controller listed in Section 1.
Right to lodge a complaint: You have the right to lodge a complaint with a data-protection supervisory authority. The competent authority for the controller is:
Bayerisches Landesamt für Datenschutzaufsicht (BayLDA) Promenade 18, 91522 Ansbach, Germany https://www.lda.bayern.de/
11. Withdrawal of Consent
You can withdraw any consent you have given at any time with effect for the future:
- Bluetooth permission: iOS Settings → Privacy & Security → Bluetooth → disable cellTrainer. Without this permission, the app cannot read sensors.
- Photos permission: iOS Settings → Privacy & Security → Photos → disable or restrict cellTrainer. Without this permission, the app cannot save screenshots to your photo library.
- Third-party connections: disconnect each integration in the app settings; the tokens stored in the Keychain are removed.
- Complete removal of all data stored by cellTrainer: uninstall the app.
Withdrawal does not affect the lawfulness of processing carried out before withdrawal.
12. Changes to This Privacy Policy
This privacy policy may be amended when app functionality changes or when required by law. The current version is available at https://celltrainer.skerwiderski.cloud. You will be notified in the app of any material changes before they take effect.
13. Date
Effective: May 19, 2026 Version: 1.0
Changelog
Newest entries are listed first.
- 1.0 (2026-05-19): Initial version, prior to public release.