Unsere APP bekam den Namen "GET UP!"

Manchmal ist der beste Weg, sich selbst bei der Stange zu halten, das Werkzeug dafür gleich selbst zu bauen. GETUP ist aus zwei Motiven entstanden: mehr Verbindlichkeit beim eigenen Training — und die Lust, nebenbei etwas zu lernen. Beides hat funktioniert, und das Lernen war am Ende der größere Teil.

Die App richtet sich an Menschen, die Krafttraining langsamer aufbauen sollten als üblich und gleichzeitig auf die Ernährung achten müssen. Also an alle, für die die gängigen Fitness-Apps zu schnell, zu laut und zu sehr auf Bestleistung gebürstet sind.

Zwei Einheiten, kleine Schritte

Der Plan sieht zwei Trainingstage pro Woche vor. Gesteuert wird nicht über den Puls, sondern über das Anstrengungsempfinden auf der Borg-Skala — eine Zahl von 1 bis 10 nach jedem Satz. Das ist robuster, weil es unabhängig von Medikamenten und Tagesform funktioniert, und es braucht keine Uhr und keinen Brustgurt.

Gesteigert wird nach dem Prinzip Doppelprogression: erst mehr Wiederholungen, dann mehr Gewicht, dann wieder von vorn. Läuft eine Woche schlecht, geht der Plan selbstständig eine Stufe zurück. Der Rückwärtsgang ist genauso eingebaut wie der Vorwärtsgang — das nimmt Druck raus.

Der Ernährungsteil zählt keine Kalorien, sondern Portionen: Gemüse, Protein, Ballaststoffe, Wasser. Jeder Strich sind fünf Prozent. Die Rechnung belohnt Breite vor Tiefe, weil ein ausgewogener Tag mehr wert ist als ein einzelnes übererfülltes Ziel. Dazu 25 Rezepte und eine Einkaufsliste, die sich nach Supermarkt-Abteilungen sortiert.

Eine einzige Datei

Technisch ist GETUP angenehm altmodisch: eine HTML-Datei, rund 280 KB, mit Stylesheet, Logik, Zeichnungen und Diagrammen darin. Kein Build, kein Framework, keine Abhängigkeit, die in zwei Jahren ein Update braucht. Ein Service Worker macht sie offline-tauglich — im Keller beim Ergometer gibt es kein WLAN.

Die Übungszeichnungen und alle Diagramme sind handgeschriebenes SVG. Es ist erstaunlich, wie weit man damit kommt, wenn man auf Bibliotheken verzichtet.

Der Server kann nichts lesen

Zwei Geräte teilen sich einen Datenbestand — Training auf dem Tablet, Ernährung am Telefon. Der Abgleich läuft über einen eigenen kleinen PHP-Endpunkt, der die Daten aber gar nicht entschlüsseln kann: Aus einem Code, den nur die Geräte kennen, wird per PBKDF2 ein AES-Schlüssel abgeleitet. Am Server liegt eine Kennung und ein Block Base64.

Zusammengeführt wird, statt zu überschreiben. „Der letzte gewinnt" hätte Einträge gelöscht, die auf dem anderen Gerät entstanden sind.

Erinnerungen kommen über einen Telegram-Bot statt über Web-Push — kein Schlüsselpaar, kein Push-Dienst, kein Berechtigungsdialog. Drei Nachrichten pro Woche, mehr nicht.

Was ich dabei gelernt habe

Am meisten gelernt habe ich an den Stellen, an denen etwas schiefging. PowerShell liest Dateien ohne BOM als Windows-1252 — schreibt man sie als UTF-8 zurück, ist jeder Umlaut doppelt kodiert. Und ein CSS-Selektor mit einem Element darin schlägt einen mit zwei Klassen, was im Kalender dazu führte, dass ein Zustand schlicht unsichtbar war.

Beides fand sich nur, weil rund 440 automatische Prüfungen mitlaufen — plus ein Selbsttest, der direkt in der App steckt und auch auf dem Tablet läuft. Tests zu schreiben, die wirklich etwas prüfen und nicht nur beruhigen, war die eigentliche Übung.