Baseform
Ernährungs-, Trainings- und Erholungs-PWA: ohne Server, ohne Konto, offline nutzbar.
- Rolle
- Alleinentwickler, Eigenprojekt
- Zeitraum
- Juli 2026 bis laufend
- React 18
- Vite
- PWA
- ZXing
- localStorage
- SVG
- Google Health API
- OAuth 2.0
- Anthropic Messages API
Worum es ging
Aus Eigenbedarf entstanden: Ernährung, Training und Erholung an einem Ort, ohne dass dafür Daten das Gerät verlassen. Barcode- und QR-Scan gegen Open Food Facts, ein Trainingsplan mit 26 datengetriebenen Übungsanimationen, Fitbit-Werte über Google Health und ein KI-Coach, der mit dem verbleibenden Tagesbudget rechnet.
Kein Server und kein Konto war die Ausgangsbedingung, nicht das Ergebnis. Das verschiebt die schwierigen Fragen von der Berechtigung zur Speicherung: Wem gehört der Zustand, wenn es keinen Server gibt, der schlichtet?
Baseform ist das einzige Projekt, das ich selbst täglich benutze, seit Ende Juli als Trainingsprotokoll im Gym. Die Korrekturen vom September stammen alle aus dieser Nutzung, nicht aus einem Testplan.
Zahlen
- Zeilen Code
- ~2300 Zeilen Code
- datengetriebene Übungsanimationen
- 26 datengetriebene Übungsanimationen
- Server, 0 Konten
- 0 Server, 0 Konten
Einblicke





Datenverlust bei zwei offenen Fenstern, und was daraus im Schema wurde
Zwei parallel geöffnete Fenster überschrieben sich gegenseitig: Alle Daten lagen als ein JSON-Block unter einem Schlüssel, beide Fenster schrieben ihn komplett zurück, und das Fenster mit dem älteren Stand löschte Tage, die es nie gesehen hatte. Der Fehler hat echte Trainingsdaten gekostet, was ihn zur besten Lektion des Projekts macht. Die Sofortlösung war ein Merge beim Speichern statt eines Überschreibens. Die eigentliche Lehre floss in die Struktur: Im vorbereiteten Supabase-Schema ist es eine Zeile pro Tag und Übung statt eines JSON-Blocks pro Tag. Damit kann der Konflikt nicht mehr entstehen, statt dass er nur behandelt wird, und das ist der Unterschied zwischen einem Bugfix und einer Entscheidung.
Stack
- UI
- React 18.3
- Hooks und JSX
- useMemo für Wochen- und Kalenderrechnung
- Build
- Vite 8.1
- @vitejs/plugin-react
- dynamischer Import für den Scanner
- Scan
- @zxing/browser
- @zxing/library
- EAN, UPC und QR im Browser
- Open Food Facts
- Styling
- Inline-Styles
- zentrales Farbsystem
- handgezeichnetes SVG
- 26 datengetriebene Animationen
- PWA
- Web-App-Manifest
- Apple-Meta-Tags
- Icons
- Installation auf dem Homescreen
- Daten
- localStorage
- JSON-Backup
- offline-tauglich
- vorbereitet: Supabase mit Row Level Security
- KI und Auth
- Anthropic Messages API
- Claude Sonnet 4.6
- Google Identity Services
- OAuth 2.0 Token Client
- Google Health API mit drei Nur-Lese-Scopes
Status
In täglichem Eigengebrauch als PWA auf dem iPhone, Weiterentwicklung laufend. Repository privat, Einsicht auf Anfrage.