1 Claude Code öffnen — nicht die App, der Prompt holt Daten und baut eine Datei 2 Prompt reinhauen 3 sagen, welche Uhr du trägst — den Rest fragt er dich.
Du baust mir aus den Daten meiner eigenen Uhr vier Bildschirme: Recovery, Strain,
Sleep - der mir sagt, wie viel Schlaf ich in dieser Nacht wirklich gebraucht hätte -
und Pace of Aging, mein Alterstempo. Egal ob ich Garmin, Apple Watch, COROS, Whoop,
Oura, Polar oder Fitbit trage.
Du arbeitest Schritt für Schritt. Nach jedem Schritt zeigst du mir, was du gefunden
hast, und wartest, bis ich Weiter sage. Du überspringst nichts, du baust die Seite
nicht vor Schritt 6, und du erfindest keine Zahl, die du nicht aus einer Datei
gelesen hast. Wenn du eine Bestätigung für einen Befehl brauchst, frag einfach -
ich sage dann Ja.
SCHRITT 1 - WELCHE UHR TRAEGST DU
Frag mich zuerst, welches Geraet ich nachts trage. Danach richtet sich alles.
Es gibt zwei Wege, und der Unterschied ist gross genug, dass ich ihn kennen sollte,
bevor wir anfangen:
LIVE-ANBINDUNG (nur Garmin). Du holst die Daten selbst und jederzeit neu. Damit
gibt es alle vier Bildschirme, inklusive Alterstempo.
DATEI-EXPORT (alle anderen: Apple Watch, COROS, Whoop, Oura, Polar, Fitbit,
Samsung). Ich exportiere einmal, du liest die Datei. Damit gibt es Recovery,
Strain und Sleep. Das Alterstempo braucht eine Fitnessalter-Reihe ueber Monate,
und die liefert bisher nur Garmin - fuer alle anderen bekomme ich statt einer
Tempo-Zahl die Richtung der Groessen, die dahinterstehen. Sag mir das, bevor du
anfaengst, nicht am Ende.
Sieh dann nach, ob hier oder in meinem Benutzerordner schon Daten liegen: ein
Ordner garmin, eine data.json, ein Apple-Health-Export, eine CSV aus einem Tracker.
Wenn ja, sag mir den Zeitraum und DREI Anzahlen getrennt: wie viele Tage haben HRV,
wie viele haben einen Ruhepuls, wie viele haben Schlafphasen. Diese drei Zahlen sind
fast nie gleich, und sie entscheiden alles, was danach kommt.
SCHRITT 2 - DIE DATEN HOLEN
Nimm genau den Weg fuer mein Geraet. Alle Klickwege sind vom Herbst 2026; findest du
den Menuepunkt nicht, such in den Einstellungen nach "Export" und sag mir, was du
stattdessen siehst.
GARMIN - Live-Anbindung, der beste Weg
Richte eine Synchronisierung ein, die eine lokale data.json schreibt. Nimm das
Python-Paket garminconnect.
Frag mich nach meiner Mailadresse. Das Passwort tippe ich selbst in eine
Eingabeaufforderung - du schreibst es in keine Datei, gibst es nicht aus und legst
es in keine Umgebungsvariable. Lies es mit getpass. Kommt eine Zwei-Faktor-Abfrage,
fragst du mich nach dem Code. Der Login braucht ein echtes Terminal; laeuft er bei
dir nicht, gib mir den Befehl zum Selbsteintippen, statt es anders zu versuchen.
Hol 90 Tage. Fuer das Alterstempo zusaetzlich das Fitnessalter ueber 12 Monate:
get_fitnessage_data(datum), alle 14 Tage ein Punkt - ein eigener Aufruf, der auch
rueckwirkend Werte liefert.
Nur lesen. Es wird nie etwas in mein Konto zurueckgeschrieben.
APPLE WATCH - und alles, was nach Apple Health synchronisiert
Health-App, oben rechts aufs Profilbild, ganz unten "Alle Gesundheitsdaten
exportieren". Das erzeugt eine ZIP mit einer export.xml.
Die Datei ist gross, oft mehrere hundert Megabyte. Du liest sie NICHT als Ganzes
ein. Schreib ein Skript, das die XML streamend durchgeht (iterparse) und nur die
Datensaetze herauszieht, die wir brauchen: HKCategoryTypeIdentifierSleepAnalysis
mit seinen Werten fuer Deep, Core, REM und Awake, dazu
HKQuantityTypeIdentifierHeartRateVariabilitySDNN, RestingHeartRate,
VO2Max und die Workouts. Danach wirf den Rest weg.
Achtung: Apple liefert Schlaf als EINZELNE ZEITABSCHNITTE, nicht als fertige
Nachtsummen. Du musst die Abschnitte zu Naechten gruppieren - eine Nacht endet,
wenn zwischen zwei Abschnitten mehr als eine Stunde Luecke liegt.
COROS - ueber Apple Health
COROS gibt Schlafdaten offiziell nur ueber den Support heraus. Der praktikable Weg:
in der COROS-App unter Profil, Einstellungen, Drittanbieter-Apps die Synchronisierung
mit Apple Health einschalten, ein paar Minuten warten, dann den Apple-Weg oben gehen.
WHOOP - der eigene Export
In der App unten rechts ins Menue, dann Data Export. Die CSVs kommen per Mail, das
dauert Minuten. Darin stehen Recovery, Strain, Schlafphasen und HRV bereits fertig
gerechnet. Rechne die Werte trotzdem nach unseren Formeln neu - der Sinn der Uebung
ist, dass ich den Rechenweg sehen kann.
OURA - Web-Export
Im Web unter Trends den Zeitraum waehlen und "Download Data". Braucht eine laufende
Mitgliedschaft. Geht das nicht, im Membership Hub den vollstaendigen Datenexport
anfordern - das kann bis zu zehn Tage dauern.
POLAR, FITBIT, SAMSUNG UND ANDERE
Alle haben einen Kontodaten-Export, meist unter Konto, Datenschutz oder
"Meine Daten". Frag mich, was ich vorfinde, und arbeite mit dem, was kommt. Die
Formeln ab Schritt 5 haengen an keinem Hersteller.
DER WEG, DER IMMER GEHT
Wenn gar nichts klappt: zwei bis vier Screenshots der Monatsansicht aus der App
meines Geraets. Das ist grober, reicht aber fuer Basislinien und die Trends.
Frag danach, statt aufzugeben.
Speicher pro Tag das VOLLSTAENDIGE Antwortobjekt beziehungsweise die vollstaendige
Zeile, nicht nur die Felder, die du gerade brauchst. Der ganze Sinn von Schritt 3
ist, dass das Nuetzliche in den Teilen steckt, die niemand benannt hat.
SCHRITT 3 - IN DEN ROHBLOCK SCHAUEN, BEVOR DU EINEM FELD GLAUBST
Diesen Schritt ueberspringen alle, und er ist der, an dem sich entscheidet, ob der
Rest echt ist. Jeder Hersteller benennt seine Felder anders, und die Namen aendern
sich ohne Ankuendigung. Du liest deshalb die tatsaechlichen Namen aus MEINER Datei,
statt dich auf welche zu verlassen, die du kennst.
Oeffne einen Tag beziehungsweise eine Nacht und gib mir die echten Feldnamen aus.
Sieh gezielt nach diesen fuenf Groessen und sag mir zu jeder, unter welchem Namen du
sie gefunden hast - oder dass sie fehlt:
1. Schlafdauer und Schlafphasen (tief, leicht, REM, wach)
2. HRV pro Nacht
3. Ruhepuls
4. Aktivitaeten mit Dauer und Puls, moeglichst mit einer Trainingslast
5. Zeitstempel von Einschlafen und Aufwachen
BEI GARMIN gibt es dabei eine Falle, die du pruefen MUSST: In sleepLevels bedeuten
die Stufen 0 tief, 1 leicht, 2 REM, 3 wach. Das steht in keiner oeffentlichen
Dokumentation. Nimm es an und pruef es sofort nach: summier die Sekunden je Stufe und
vergleich sie mit deepSleepSeconds, lightSleepSeconds, remSleepSeconds und
awakeSleepSeconds aus dailySleepDTO. Sie muessen auf die Minute genau uebereinstimmen.
Tun sie das nicht, hoer auf und sag es mir - entweder ist die Antwort unvollstaendig
oder die Kodierung wurde geaendert, und jedes Diagramm danach waere ueberzeugend und
falsch. Zieh dazu auch den baseline-Block aus dem HRV-Objekt, in dem Garmin mein
eigenes rollendes Band fuehrt.
BEI APPLE ist die entsprechende Falle eine andere: "Core" heisst dort, was anderswo
Leichtschlaf heisst, und "InBed" ist KEIN Schlaf. Wer InBed mitzaehlt, bekommt zu
lange Naechte und damit eine zu gute Schlafleistung. Pruef, ob die Summe deiner
Phasen zur Spanne zwischen Einschlafen und Aufwachen passt.
Sag mir dann klar, was ich habe und was leer ist. Diese Luecken sind normal:
- Atemfrequenz fehlt: nimm sie aus der Recovery raus und verteil ihr Gewicht.
Schreib das auf die Seite.
- Sauerstoffsaettigung fehlt: raus. Sie ist ohnehin der schwaechste Eingabewert.
- Hauttemperatur fehlt: raus.
- HRV fehlt in einzelnen Naechten: HRV gibt es nur fuer Naechte, in denen die Uhr am
Handgelenk war. Sag mir, dass ich tagsueber laden soll, nicht nachts.
- Keine Trainingslast im Export: dann rechnest du sie dir in Schritt 5 aus der
Pulskurve selbst. Das ist kein Notbehelf, das ist der Normalfall ausserhalb von
Garmin.
SCHRITT 4 - ERST MEINE BASISLINIEN, DANN IRGENDEIN WERT
Alle vier Bildschirme vergleichen mich mit mir, nicht mit einer Bevölkerung. Rechne
und zeig mir:
- HRV: Mittelwert und Standardabweichung über alle Nächte, die ich habe. Dazu
Anzahl, kleinster und größter Wert. Habe ich weniger als 14 Nächte, sagst du
ausdrücklich, dass die Basislinie dünn ist und der Wert die ersten Wochen springt.
- Ruhepuls: Mittelwert und Standardabweichung der letzten 30 Tage.
- Schlaf: Median und 75. Perzentil der nächtlichen Schlafdauer.
Dann prüfst du, was die Basislinie lügen lässt:
- Ein Wert, der wandert, beschönigt jedes feste Fenster. Rechne HRV und Ruhepuls
BEIDE zweimal: über 30 Tage und über 14 Tage. Weichen sie mehr als eine halbe
Standardabweichung voneinander ab, sag mir das hin, und nimm für den heutigen Wert
das kurze Fenster. Das gilt ausdrücklich auch für die HRV - sie trägt die Hälfte
des Erholungswerts, und genau dort wird der Trend sonst übersehen.
- Nächte unter 4 Stunden sind Nickerchen. Aus der Basislinie raus, in der Tabelle
bleiben sie stehen.
- Garmin führt selbst eine persönliche HRV-Basislinie im baseline-Block. Zeig sie
neben deiner gerechneten. Liegen sie weit auseinander, ist das ein Hinweis auf zu
wenige Nächte, nicht auf einen Fehler.
SCHRITT 5 - DIE DREI FORMELN, HINGESCHRIEBEN
Nimm genau diese. Druck sie auf die Seite. Der ganze Wert dieses Aufbaus gegenüber
einem Abo ist, dass ich die Formel lesen und ihr widersprechen kann.
ERHOLUNG, 0 bis 100 Prozent
hrv_z = (hrv_letzte_nacht - hrv_mittel) / hrv_streuung
rhr_z = (ruhepuls_heute - rhr_mittel) / rhr_streuung
hrv_wert = begrenze(50 + 20 * hrv_z, 0, 100) mehr HRV ist besser
rhr_wert = begrenze(50 - 20 * rhr_z, 0, 100) weniger Ruhepuls ist besser
schlaf_wert = min(100, schlafleistung_prozent) aus dem Schlafblock unten
erholung = 0,50 * hrv_wert + 0,25 * rhr_wert + 0,25 * schlaf_wert
Bänder: 67 bis 100 grün, 34 bis 66 gelb, 0 bis 33 rot.
Die HRV trägt mit Absicht die Hälfte - sie ist der Wert, der zuerst und am
deutlichsten reagiert. Fehlt ein Eingabewert, verteilst du sein Gewicht anteilig auf
die übrigen und schreibst die tatsächlich benutzte Gewichtung auf die Seite.
BELASTUNG, 0 bis 21
Die Skala von 0 bis 21 stammt von der Borg-Skala des empfundenen Anstrengungsgrads
und ist logarithmisch: jeder weitere Punkt kostet mehr als der davor. Das ist der
ganze Charakter der Zahl.
tageslast = Summe aller activityTrainingLoad des Tages + 4,0
(die 4,0 sind das Leben neben dem Training)
anker = 95. Perzentil der Tageslast über die Tage MIT Aktivität
der letzten 90 Tage, mindestens aber 60
belastung = min(21, 21 * ln(1 + tageslast / 12) / ln(1 + anker / 12))
Bänder: 0 bis 9 leicht, 10 bis 13 moderat, 14 bis 17 hoch, 18 bis 21 alles gegeben.
Der Anker ist persönlich, und das ist der Punkt. Die Fassungen, die im Netz
herumgehen, setzen dort eine feste 90 ein. Diese 90 stammt aus einer anderen
Lastskala. Garmins activityTrainingLoad liegt bei einer normalen Einheit im
dreistelligen Bereich - mit der festen 90 kommt bei jedem zweiten Trainingstag ein
Wert über 21 auf einer Skala heraus, deren Höchstwert 21 ist. Sag mir nach der
Rechnung, wie hoch mein Anker ist und an wie vielen Tagen ich in jedem Band lag.
Steht mein Anker auf der Untergrenze 60, weil ich zu wenig trainiert habe, sagst du
das dazu.
Gibt Garmin für eine Aktivität keine Trainingslast her, rechne sie dir aus der
Pulskurve selbst, mit TRIMPexp:
puls_anteil = (puls - ruhepuls) / (maxpuls - ruhepuls)
trimp = Summe über die Minuten von
puls_anteil * 0,64 * e^(1,92 * puls_anteil)
Zwei Dinge brechen das, und beide gehören mir gesagt:
- Aktivitäten ohne Pulsdaten liefern nichts. Ein aufgezeichneter Spaziergang mit der
Uhr auf dem Tisch ist eine Null, kein leichter Tag. Listest du getrennt auf, damit
eine Lücke nicht wie Ruhe aussieht.
- Handgelenkspuls wirft einzelne Ausreißer, 20 bis 40 Schläge über allem Echten,
meist im ersten Kilometer. Filter die weg, bevor du irgendein Maximum nimmst - der
Maximalpuls steht in der obigen Formel im Nenner.
SCHLAFBEDARF
bedarf = grundbedarf + f(belastung) + defizit - nickerchen
grundbedarf = 8 Stunden 0 Minuten. Sag mir, dass ich das anpassen kann.
f(belastung) = 1,7 / (1 + e^((17 - belastung_gestern) / 3,5)) in Stunden
defizit = min(0,35 * Summe der Fehlstunden gegenüber dem Grundbedarf
über die letzten 3 Nächte, 1,5 Stunden)
schlafleistung = geschlafen / bedarf
f(belastung) läuft von etwa einer Minute an einem Ruhetag bis etwa 1 Stunde
17 Minuten nach einem Tag, an dem alles rausging. Das Defizit ist gedeckelt, weil man
eine Woche nicht in einer Nacht zurückzahlt, und es ist der einzige Wert hier, der
sich aufsummiert.
Achtung auf die Kette: f(belastung) hängt an der Belastung von gestern. Ist die
Belastungsskala kaputt, ist der Schlafbedarf still mit kaputt. Prüf deshalb erst die
Belastungsverteilung aus Schritt 7 und rechne den Bedarf danach.
BELASTUNGSZIEL AUS DER ERHOLUNG
Das ist die Schleife, die aus drei Diagrammen ein Produkt macht:
Erholung 67 bis 100 Prozent, grün Zielbelastung 14,0 bis 18,0
Erholung 34 bis 66 Prozent, gelb Zielbelastung 9,0 bis 13,5
Erholung 0 bis 33 Prozent, rot Zielbelastung 0 bis 8,0
PACE OF AGING - DEIN ALTERSTEMPO
Garmin fuehrt ein Fitnessalter. Es kommt aus vier Groessen: Ruhepuls, intensive
Minuten pro Woche, intensive Tage pro Woche und BMI. Das Tempo ist die Steigung
dieser Zahl gegen die Kalenderzeit:
tempo = (fitnessalter_heute - fitnessalter_vor_einem_jahr) / verstrichene_kalenderjahre
Ein Tempo von 1,0 heisst: dein Fitnessalter steigt so schnell wie dein echtes
Alter. Kleiner als 1,0 heisst langsamer, groesser als 1,0 schneller.
DIE PRUEFUNG, OHNE DIE DIESE ZAHL NICHTS WERT IST
Garmins Fitnessalter hat einen Boden. Wer ihn erreicht, bekommt monatelang exakt
denselben Wert - und eine Steigung ueber eine Reihe, die unten abgeschnitten ist,
ist keine Steigung.
Zaehl deshalb, wie oft der kleinste Wert der Reihe exakt vorkommt. Liegt das ueber
einem Viertel der Messpunkte, schreibst du das Tempo als UNTERGRENZE hin, nicht als
Messung, und sagst mir dazu, dass ich am Boden des Modells klebe.
Rechne das Tempo ausserdem ueber drei Fenster: 365, 180 und 90 Tage. Weichen die
Ergebnisse stark voneinander ab, gehoert das auf die Seite. Bei mir kamen dabei
0,41 und -1,00 und -2,00 heraus, aus derselben Reihe - genau das ist der Beleg
dafuer, dass eine einzelne Tempozahl hier zu viel behauptet.
OHNE FITNESSALTER-REIHE
Liefert mein Geraet kein Fitnessalter ueber Monate - also bei allem ausser Garmin -,
dann erfindest du keine Tempo-Zahl. Du zeigst stattdessen die RICHTUNG der drei
Groessen, die ein Fitnessalter ueberhaupt bewegen: Ruhepuls, woechentliche intensive
Minuten und, falls vorhanden, VO2max. Je eine Linie ueber den verfuegbaren Zeitraum,
darunter ein Satz, in welche Richtung das zeigt. Und die Ueberschrift heisst dann
nicht "Alterstempo", sondern "Richtung". Eine Steigung ohne Reihe ist keine Steigung.
Und sag klar dazu, was diese Zahl nicht ist: kein Labor, keine Zellalterung, kein
Modell eines Anbieters mit Abo. Es ist Garmins Fitnessalter und seine Steigung,
mehr nicht. Nenne den Messstand des BMI mit - er ist oft Jahre alt und geht
trotzdem in jeden Wert ein.
SCHRITT 6 - DIE SEITE BAUEN
Eine einzige, selbsttragende HTML-Datei. Kein Build, keine Pakete, kein Server, keine
Schrift und kein Skript von einem fremden Rechner. Ich mache sie im Browser auf.
Die Daten werden in die Datei eingebettet, nicht nachgeladen. Eine lokal geöffnete
Datei darf kein JSON per fetch holen, und das scheitert lautlos.
KEINE Reiter. Ein einziges Dokument zum Scrollen, in einer schmalen Spalte von
hoechstens 520 Pixeln, mittig auf dem Grund - so, wie eine App auf dem Telefon
aussieht. Alles steht untereinander, in dieser Reihenfolge:
1) KOPFZEILE. Links eine kleine runde Marke, mittig eine Kapsel mit dem gewaehlten
Datum (die zugleich die Auswahl ist, damit ich zurueckblaettern kann), rechts in
kleinen Versalien, woher die Daten kommen.
2) DIE WORTMARKE, mittig, klein, in weit gesperrten Versalien.
3) DIE RINGREIHE. Drei gleich grosse Ringe nebeneinander, in dieser Anordnung:
Sleep links, Recovery in der Mitte, Strain rechts. Die Mitte traegt die
Hierarchie, nicht die Groesse - mach den mittleren Ring NICHT groesser. Im Ring
steht der Wert gross, darunter der Name klein in gesperrten Versalien. Recovery
und Sleep in Prozent, Strain als Zahl von 21.
Die Masse haengen alle am Durchmesser des Rings, nicht an festen Pixeln:
Strichstaerke 6,5 Prozent des Durchmessers
Schriftgrad im Ring 32 Prozent des Durchmessers
Schriftgrad Label 12 Prozent, Sperrsatz 0,19 em
Abstand Ring/Label 14 Prozent
Durchmesser 0,72 mal dem Abstand der Ringmitten
(die Ringe stehen also fast auf Lueckenschluss)
FARBE: Nur der Recovery-Ring traegt die Ampel - gruen, gelb oder rot, je nach
Band. Sleep und Strain bekommen beide dieselbe eine Akzentfarbe. Das ist kein
Detail, sondern das System: EIN Wert wird bewertet, die anderen zwei werden
nur gezeigt. Wer alle drei einfaerbt, hat drei Ampeln und keine Aussage.
4) EINE KARTE MIT DEM BEFUND DES TAGES. Eine fette Zeile mit dem Band als Wort, und
darunter zwei bis drei Saetze in normaler Sprache: wo die Recovery liegt, welches
Strain-Zielband daraus folgt, ob ich heute darueber, darunter oder drin lag, und
wie viel ich von meinem Schlafbedarf bekommen habe. Diese Saetze rechnest du aus
den Zahlen, du schreibst sie nicht als Floskel hin.
5) ABSCHNITT "MEIN TAG": die Einheiten dieses Tages mit Dauer, Durchschnittspuls und
Lastpunkten. Darunter die Tageslast und mein Anker.
6) ABSCHNITT "RECOVERY": je eine Zeile pro Eingabewert mit Rohwert, meiner
Basislinie, der Abweichung und dem Gewicht, das er getragen hat. Darunter ein
Streifen ueber sieben Tage.
7) ABSCHNITT "SLEEP": der Bedarf Zeile fuer Zeile aufgeschluesselt (Grundbedarf,
Strain von gestern, Defizit), dann die Phasenaufteilung als ein durchgehender
Balken in vier Grautoenen, die Legende mit Prozentwerten, dazu Zeit im Bett gegen
Zeit im Schlaf und die Effizienz.
8) ABSCHNITT "STRAIN": ein Balkendiagramm ueber sieben Tage und darunter, ob der Tag
im Zielband lag.
9) ABSCHNITT "PACE OF AGING": das Alterstempo als erste Zeile, darunter Fitnessalter
heute, mein echtes Alter, der laut Garmin erreichbare Wert und die Groessen, aus
denen das Modell rechnet, jeweils mit Messstand. Danach der Verlauf ueber zwoelf
Monate als Kurve, mit dem Boden des Modells als gestrichelte Linie und dem
heutigen Punkt als kleiner Kreis.
10) ABSCHNITT "EHRLICHKEITSCHECK" mit den Ergebnissen aus Schritt 7 und den Formeln
aus Schritt 5, wortwoertlich abgedruckt.
Jede Zahl auf dem Schirm lässt sich auf ein Feld aus Schritt 3 oder eine Formel aus
Schritt 5 zurückführen. Ist etwas geschätzt, steht das dran.
DESIGNVORGABEN - BITTE GENAU SO
Grund #0A0A0A, Flächen und Karten #161616
Schrift #F2F2F2, zweite Ebene #B4B4B4, dritte #969696
Linien weiß mit 11 Prozent Deckkraft, 1 Pixel, keine Schatten
Baender gruen #3FBF6A, gelb #E0B23C, rot #E05555 - kraeftig, aber nicht neon
Akzent #D97757 - die Ringe fuer Sleep und Strain, der heutige Punkt in der
Alterskurve, der gewaehlte Balken im Streifen. Sonst nichts.
Radius 18 Pixel für Karten, 999 für Kapseln
Schrift system-ui, dann Helvetica Neue, dann Arial
Die Grauleiter ist streng neutral: Rot, Grün und Blau sind in jedem Grauton
gleich. Kein blaustichiges Dunkel.
Das Material sitzt auf der Kante, nicht in der Fläche. Karten haben eine
Haarlinie und keinen Farbverlauf.
Farbe traegt Bedeutung, nicht Dekoration. Gefaerbt sind die drei Ringe - Recovery
nach seinem Band, Sleep und Strain im Akzent. Sonst bleibt alles grau. Keine
bunten Flaechen, keine eingefaerbten Karten, keine Verlaeufe hinter Zahlen.
Zahlen eng laufend (letter-spacing -0,03 em) und halbfett. Beschriftung klein, in
der dritten Schriftebene, Versalien mit weitem Sperrsatz.
Die Ringe brauchen die echte Pfadlänge: rechne den Umfang aus dem Radius mit
2 mal pi mal r und setz stroke-dasharray genau darauf. Ein geschätzter Wert lässt
den Ring bei 100 Prozent nicht schließen, und das sieht aus wie ein Fehler in
meinen Daten.
Prüf jede Text-auf-Grund-Kombination auf mindestens 4,5 zu 1 Kontrast und schreib
mir die gerechneten Werte hin. Nicht schätzen.
Bau KEINE fremde Marke nach. Kein fremdes Logo, keine fremde Wortmarke, kein
Telefonrahmen, keine fremden Markenfarben und keine abgeschriebenen Textbausteine.
Die Form oben ist die Form einer Erholungs-App, und die gehoert niemandem - die
Marke gehoert schon.
SCHRITT 7 - DER EHRLICHKEITSCHECK
Bevor du mir sagst, dass es fertig ist, lass das hier laufen und druck die Ergebnisse:
1. Die Phasensummen stimmen mit dailySleepDTO überein, an drei zufälligen Nächten.
2. Meine Spannweite bei Tiefschlaf und REM über alle vollen Nächte, als kleinster bis
größter Prozentanteil. Nicht kommentieren, nur hinschreiben. Schlafphasen sind auf
jedem Handgelenk geschätzt, und die Spannweite ist die ehrliche Art, das zu zeigen.
3. Die Anzahlen, auf denen die Basislinien stehen, für HRV, Ruhepuls und Schlaf -
sichtbar auf der Seite selbst, nicht nur in der Ausgabe.
4. Tage mit Aktivität, aber ohne Pulsdaten, mit Datum aufgelistet.
5. Die Verteilung der Belastung über die 90 Tage auf die vier Bänder. Liegt auch nur
ein Tag über 21, ist der Anker falsch - dann hör auf und sag es mir, statt zu
deckeln.
6. Wie oft die Fitnessalter-Reihe auf ihrem kleinsten Wert liegt, als Anteil. Ueber
einem Viertel heisst: das Tempo ist eine Untergrenze, und das steht auf der Seite.
7. Tage ohne aufgezeichnete Aktivität, gezählt. Miss dabei nicht Ruhe mit fehlender
Aufzeichnung gleich: Wenn ich auf einem Rad mit einem anderen Computer sitze,
sieht die Uhr davon nichts, und die Belastung des Tages ist zu niedrig, nicht
niedrig.
SCHRITT 8 - EINE GEWOHNHEIT, KEIN EINMALEFFEKT
Gib mir einen Befehl, der die Synchronisierung neu laufen lässt und die Seite neu
baut. Sag mir, wohin er gehört, damit er jeden Morgen läuft. Unter macOS ein
LaunchAgent, unter Linux cron oder ein systemd-Timer, unter Windows die
Aufgabenplanung.
Zwei Dinge, die dabei schiefgehen: Ein Auftrag, der eine Shell startet, bekommt unter
macOS in meinem Dokumentenordner keine Rechte - ruf das Python der virtuellen
Umgebung direkt auf. Und leg eine .gitignore an, die Token, Gesundheitsdaten, Logs
und die virtuelle Umgebung ausschließt, falls ich den Ordner je versioniere.
WAS DU NICHT TUST
Du erfindest keine Zahl. Fehlt ein Wert, steht da, dass er fehlt.
Du baust keinen Schalter ein, mit dem sich ein Wert von Hand setzen lässt. Was
gerechnet wird, wird gerechnet.
Du deckelst die Belastung nicht still bei 21, um die Prüfung aus Schritt 7 zu
bestehen. Die Deckelung steht in der Formel, aber wenn sie greift, hast du den Anker
falsch.
Du färbst nichts grün, weil es schöner aussieht, und nichts rot, weil es
eindrucksvoller ist.
Du gibst mir keine medizinische Einschätzung. Du bist kein Arzt und tust auch nicht
so. Wenn dir etwas auffällt, das eine Abklärung verdient - lange Nächte bei niedriger
HRV und hohem Ruhepuls, Schnarchen, Tagesmüdigkeit -, sagst du mir das in einem Satz
und schickst mich zu einem Menschen, statt daraus einen Trainingshinweis zu machen.
WAS DAS NICHT ERSETZT
Sag mir das am Ende ehrlich zurück, ich will es lieber wissen:
- Ein eigenes Band misst den Puls durchgehend und hochfrequent, am Oberarm oder am
Finger, und bekommt ein saubereres Signal als ein Handgelenk unter einem
Uhrenarmband. Trage ich meine Uhr nachts nicht, gibt es nichts von alledem.
- Das Alterstempo ist die Steigung eines Fitness-Modells, keine Zellalterung. Wer
dir aus einem Handgelenk ein biologisches Alter verkauft, verkauft ein Modell.
- Schlafphasen werden auf JEDEM verkauften Gerät geschätzt, auf ihrem auch. Niemand
an deinem Handgelenk liest Hirnströme. Die Spannweite aus Schritt 7 ist genau der
Blick auf diese Schätzung von innen.
- Diese Formeln sind MEINE, nicht ihre. Die Bausteine sind belegt - die Skala von
0 bis 21 ist die Borg-Skala, TRIMPexp ist publiziert -, die Zusammensetzung
darueber ist eine begruendete Nachbildung. Kein Hersteller legt seine Version
offen, und deshalb kann auch niemand behaupten, das hier sei dieselbe Zahl. Der
Unterschied ist ein anderer: du kannst hier jeden Schritt nachlesen und mir
widersprechen.
—
Dieser Prompt ist Folge 12 von 100 aus "Sport KI" von Dan Felser.
Instagram: @felsr — alle Prompts der Reihe: felsr.com