HealthLog ist eine quelloffene, selbst-hostbare Anwendung zur
persönlichen Gesundheitsprotokollierung. Der Quellcode wird
- unter der GNU Affero General Public License v3.0 auf{" "}
+ unter der PolyForm Noncommercial License 1.0.0 auf{" "}
github.com/MBombeck/HealthLog
{" "}
- under the GNU Affero General Public License v3.0. This policy
+ under the PolyForm Noncommercial License 1.0.0. This policy
describes how the instance serving this page and the companion
iOS application HealthLog for iOS (bundle identifier{" "}
Wenn der Nutzer der iOS-Anwendung Lesezugriff auf Apple
HealthKit erteilt, liest HealthLog Stichproben der unten
- aufgeführten Identifier. HealthKit-Daten verbleiben auf dem
- Gerät des Nutzers und in dessen iCloud-gestütztem
- Health-Speicher; die iOS-Anwendung überträgt die relevant- en
- Stichproben über HTTPS (TLS 1.3, Zertifikat-Pinning) an den
- HealthLog-Server (Endpunkt{" "}
+ aufgeführten Identifier. Apple Health verwaltet HealthKit-Daten
+ auf dem Gerät und kann sie nach den Apple-Einstellungen des
+ Nutzers über dessen Apple-Konto synchronisieren. Das ist
+ Apple-seitiges HealthKit-Verhalten und keine iCloud- oder
+ CloudKit-Speicherung durch HealthLog. Die iOS-Anwendung
+ überträgt relevante Stichproben über HTTPS (TLS 1.3,
+ Zertifikat-Pinning) an den HealthLog-Server (Endpunkt{" "}
HKQuantityTypeIdentifier:
- Aktiviert der Nutzer die KI-Coach-Oberfläche und konfiguriert
- einen Sprachmodell-Anbieter, übermittelt HealthLog auf
- Anforderung ein Snapshot-Bündel an diesen Anbieter. Das Bündel
- enthält Gesundheitskontext aus den oben genannten Daten
- (Aggregate, jüngste Beobachtungen, Zielbereiche, optionaler
- Medikamentenkontext) und{" "}
-
- niemals rohe HealthKit-Identifier oder rohe Sample-IDs
-
- ; der Server normalisiert HK-Stichproben vorab in die interne
- Metrik-Taxonomie. Die Übertragung erfolgt verschlüsselt (TLS
- 1.3); standardmäßig ist die KI-Coach- Funktion deaktiviert und
- wird nur nach ausdrücklicher Nutzereinwilligung pro Anbieter
- aktiviert (siehe Einwilli- gungsnachweis unter Abschnitt 2.7).
- HealthLog speichert keinen langlebigen Gesprächszustand über den
- letzten Thread hinaus. Abschnitt 4 listet die in Frage kommenden
- Anbieter (Anthropic, OpenAI) auf.
+ Ein Profilbild sowie für den Dokumententresor ausdrücklich
+ ausgewählte Fotos, Scans und PDFs werden zum HealthLog-Server
+ hochgeladen und dem Konto zugeordnet. Beim Schnell-Erfassen von
+ Medikamenten oder Laborwerten bleibt das Quellbild dagegen auf
+ dem Gerät: Apple Vision erkennt Text lokal, und nur die vom
+ Nutzer geprüften, bearbeiteten und bestätigten Zeilen werden an
+ den Server gesendet. Das gilt nicht automatisch als Upload in
+ den Dokumententresor.
- Jede Einwilligung in die KI-Übermittlung — sowohl die
- Aktivierung pro Anbieter als auch Änderungen am
- Datentiefe-Schalter — wird mit Zeitstempel, Anbieter,
- Versionskennung des Einwilligungstextes und Hash des
- Snapshot-Schemas als „Consent Receipt“ persistiert.
- Der Endpunkt zum Abruf ist{" "}
+ Externe KI ist standardmäßig deaktiviert. Vor der ersten
+ Übertragung nennt die App das konkrete Ziel und die Kategorien:
+ die Frage oder Anweisung des Nutzers, Gesundheitskontext,
+ jüngste Beobachtungen oder Aggregate, Zielbereiche und optional
+ Medikamenten-, Labor- oder Dokumentkontext. Der Server
+ normalisiert HealthKit-Daten; rohe HealthKit-Identifier und rohe
+ Sample-IDs gehören nicht zum Coach-Snapshot.
+
+ Bei Dokumenten können Vorschlag, Zusammenfassung und Index nach
+ Einwilligung das gespeicherte Originalbild bzw. PDF oder den
+ erkannten Text verarbeiten. Der Dokument-Chat sendet die Frage
+ des Nutzers zusammen mit dem indexierten Kontext des gewählten
+ Dokuments und streamt eine darauf gestützte Antwort zurück. Die
+ Freigabe gilt nicht für andere Ziele. Unter{" "}
+ Einstellungen → Assistent kann der Nutzer externe KI
+ ausschalten oder den Anbieter wechseln; damit werden weitere
+ Server-Anfragen blockiert. Beim BYO-Pfad entfernt der Widerruf
+ zusätzlich Schlüssel und Freigabe für diesen Anbieter.
+
+ Der Server hält für server-verwaltete KI einen kontogebundenen
+ Einwilligungsnachweis mit Art, signiertem Zeitpunkt und
+ Artefakt. Der aktuelle Status ist über{" "}
@@ -436,7 +436,10 @@ export default function PrivacyPage() {
2.1 Konto und Authentifizierung
{" "}
+ abrufbar. Ein Widerruf wird mit Zeitstempel festgehalten und
+ blockiert zukünftige externe Verarbeitung. Diese Nachweise
+ werden als Teil des Konto-Auditverlaufs aufbewahrt und bei der
+ Konto-Löschung kaskadiert gelöscht; es gibt keinen belegten
+ separaten festen Fünf-Jahres-Löschjob.
-
POST /api/measurements
), damit die Web-Oberfläche dieselben Verläufe darstellen kann
- wie das iPhone. Es findet keine Übertragung an Dritte statt; die
- Daten werden ausschließlich auf der unter Abschnitt 5
- beschriebenen Infrastruktur in Deutschland gespeichert.
+ wie das iPhone. HealthLog synchronisiert dabei die unterstützte
+ Standarddarstellung der Herzfrequenz für Trends und
+ Workout-Kontext. Das interne Experiment für einen ungefilterten
+ Roh-Herzfrequenzstrom ist in dieser öffentlichen Version nicht
+ verfügbar und wird nicht beworben oder erhoben. Eine Weitergabe
+ an einen KI-Anbieter erfolgt nur über die separat aktivierten
+ und eingewilligten Pfade in Abschnitt 2.7.
- 2.6 KI-Coach und Insights — Off-Device-Transit
+ 2.6 Dokumente, Scans und lokale Texterkennung
- 2.7 Einwilligungsnachweis (Consent Receipt)
+ 2.7 KI-Pfade, Ziele und Einwilligung
+
+
+ 2.8 Einwilligungsnachweis (Consent Receipt)
+
+
- GET /api/account/consents
-
- ; die Speicherdauer der Belege beträgt fünf Jahre, danach werden
- sie automatisch gelöscht. Ein Widerruf wird als eigenes Receipt
- mit umgekehrter Polarität abgelegt; der Anbieter erhält ab
- diesem Zeitpunkt keine Snapshot-Bündel mehr.
+ GET /api/consent/ai/latest
+
When the user grants the iOS application read access to Apple
HealthKit, HealthLog reads samples for the identifiers listed
- below. HealthKit data remains on the user's device and the
- user's iCloud-backed Health store; the iOS application
+ below. Apple Health manages HealthKit data on the device and may
+ sync it through the user's Apple account according to Apple
+ platform settings. That is Apple-managed HealthKit behaviour,
+ not iCloud or CloudKit storage by HealthLog. The iOS application
copies relevant samples to the HealthLog server over HTTPS (TLS
1.3, certificate pinning) via{" "}
POST /api/measurements
{" "}
- so the web surface can render the same trends as the iPhone. No
- third-party transit; data lives on the German-located
- infrastructure described in section 5.
+ so the web surface can render the same trends as the iPhone.
+ HealthLog syncs the supported default heart-rate representation
+ used for trends and workout context. The internal unfiltered
+ raw-heart-rate experiment is unavailable in this public build;
+ it is neither advertised nor collected. Transit to an AI
+ provider occurs only through the separately enabled and
+ consented paths in section 2.7.
HKQuantityTypeIdentifier:
- When the user enables the AI Coach surface and configures a - language-model provider, HealthLog sends a snapshot bundle to - that provider on demand. The bundle contains health context - derived from the data above (aggregates, recent observations, - target ranges, optional medication context) and{" "} - - never includes raw HealthKit identifiers or raw sample IDs - - ; the server normalises HK samples into the internal metric - taxonomy first. Transit is encrypted (TLS 1.3). The AI Coach is - off by default and is enabled per- provider only after explicit - user consent (see consent receipt in section 2.7). HealthLog - does not retain long-term conversation state beyond the most - recent thread. Section 4 enumerates the eligible providers - (Anthropic, OpenAI). + A profile image and photos, scans, or PDFs explicitly selected + for the document vault are uploaded to the HealthLog server and + linked to the account. Medication and lab quick-entry work + differently: Apple Vision recognises text on the device, the + source image is not uploaded, and only rows the user reviews, + edits, and confirms are sent to the server. Quick entry does not + automatically save the source image in the document vault.
- Every consent to AI transit — both per-provider activation and - changes to the data-depth toggle — is persisted as a - “consent receipt” with timestamp, provider, - consent-text version, and a hash of the snapshot schema. The - retrieval endpoint is{" "} + External AI is off by default. Before the first transmission, + the app identifies the destination and categories: the + user's question or instruction, health context, recent + observations or aggregates, target ranges, and optional + medication, lab, or document context. The server normalises + HealthKit data; raw HealthKit identifiers and raw sample IDs are + not part of a Coach snapshot. +
++ For documents, suggest, summary, and index operations may + process the stored original image or PDF, or recognised text, + after consent. Per-document chat sends the user's question + with indexed context from the selected document and streams a + grounded answer back. Consent does not transfer to a different + destination. The user can disable external AI or change the + provider under Settings → Assistant; this blocks future + server requests. For BYO, revocation also removes that + provider's key and grant. +
+
+ For server-managed AI, the server keeps an account-bound consent
+ receipt with its kind, signed time, and artefact. The current
+ state is available through{" "}
- GET /api/account/consents
+ GET /api/consent/ai/latest
- ; receipts are retained for five years and then deleted
- automatically. A withdrawal is recorded as a separate
- reverse-polarity receipt; from that moment the provider receives
- no further snapshot bundles.
+ . Withdrawal is timestamped and blocks future external
+ processing. Receipts remain part of the account audit trail and
+ are cascade-deleted with the account; no separate fixed
+ five-year cleanup job is evidenced by the server source.
- Folgende Anbieter können personenbezogene Daten im Auftrag des - Betreibers verarbeiten. Die Liste ist für den veröffentlichten - Funktionsumfang abschließend. Anbieter werden nur für die - Funktionen eingebunden, die der Nutzer ausdrücklich aktiviert - hat. Für jede Übertragung in Drittländer (insbesondere USA) - bestehen Standardvertrags- klauseln nach Art. 46 Abs. 2 lit. c - DSGVO mit dem jeweiligen Anbieter. + Folgende benannte Anbieter können personenbezogene Daten für + aktivierte Funktionen verarbeiten. Zusätzlich kann ein Betreiber + oder BYO-Nutzer einen lokalen oder generischen HTTPS-Endpunkt + mit OpenAI-kompatibler API festlegen. Für ein solches nutzer- + oder betreiberdefiniertes Ziel gelten dessen eigene Angaben zu + Verantwortlichkeit, Ort und Speicherdauer; deshalb ist die Liste + nicht als abschließend für frei konfigurierbare Ziele zu + verstehen.
Die englische Übersetzung enthält die detaillierte Auflistung @@ -1144,13 +1247,12 @@ export default function PrivacyPage() { bodyEn={ <>
- The following providers may process personal data on behalf of - the HealthLog operator. The list is exhaustive for the released - feature set; sub-processors are only engaged for the features - the user has explicitly enabled. Each transfer to a third - country (notably the United States) is covered by Standard - Contractual Clauses under Art. 46 (2) (c) GDPR with the - respective provider. + The named providers below may process personal data for enabled + features. An operator or BYO user may also configure a local or + generic HTTPS endpoint with an OpenAI-compatible API. That user- + or operator-specified destination is governed by its own + controller, location, and retention terms, so this list is not + exhaustive for freely configurable destinations.
User.delete
{" "}
@@ -1382,7 +1565,8 @@ export default function PrivacyPage() {
onDelete: Cascade
- ; Backups laufen innerhalb des 30-Tage-Fensters aus.
+ . Neue Sicherungen enthalten das gelöschte Konto nicht; ältere
+ Kopien laufen nach der aktiven Bucket-Lifecycle-Regel aus.
User.delete
{" "}
@@ -1448,7 +1637,8 @@ export default function PrivacyPage() {
onDelete: Cascade
- ; backups age out within the 30-day window.
+ . New backups omit the deleted account; older copies age out
+ under the active bucket lifecycle rule.
Die Privacy-Nutrition-Labels der iOS-Anwendung in App Store Connect ordnen sich folgenden Kategorien zu (jeweils{" "} - linked to the user, ausschließlich zur App- Funktion - verwendet): + linked to the user, zur App-Funktion und, soweit + angegeben, Konto-Verwaltung):
+ Tracking: Nein. HealthLog verwendet keine + Werbung, kein anwendungsübergreifendes Tracking, keine + Werbemessung und kein Drittanbieter-Analytics-SDK. Optionale + KI-Anbieter erhalten Daten nur für die vom Nutzer ausgelöste + App-Funktion, nicht für Werbung oder Tracking. +
> } bodyEn={ @@ -1606,7 +1817,8 @@ export default function PrivacyPage() {The iOS application's Privacy Nutrition Labels in App Store Connect map to the following categories (each - linked to the user, used only for app functionality): + linked to the user, used for app functionality and, + where stated, account management):
+ Tracking: No. HealthLog uses no advertising, + cross-app tracking, advertising measurement, or third-party + analytics SDK. Optional AI providers receive data only for the + app function the user invokes, not for advertising or tracking. +
> } />