Read-only PRD for a coding agent
Nutzer möchte seinen persönlichen Trainingsfortschritt digital und offline auf seinem…
1. Problem, goal & success metric
- Problem: Nutzer möchte seinen persönlichen Trainingsfortschritt digital und offline auf seinem eigenen Gerät festhalten.
- Ziel: Persönliches Trainingstagebuch mit Trainingsplänen, Übungen pro Trainingstag, Workout-Logging mit vorbefülltem letztem Gewicht, pro Satz variierbare Werte, freies Training, Rest Days ohne Streak-Unterbrechung, Fortschrittsübersicht, Streak-Anzeige, vier Tabs (Home, Training, Freunde, Profil), Home-Header mit rotem Datum/Wochentag und englischem Zitat über rotierenden Hintergrundbildern, vier Panels (Sport, Ernährung, Schlaf, Biohacking) mit PubMed-Studien, BeReal-ähnliche Foto-Funktion unter „Freunde“ – nur Foto, Datum und Uhrzeit, keine Trainingsdaten, Freundschaftsanfragen per Link oder Nutzername, nur Fotos bestätigter Freunde sichtbar, keine Kommentare oder Feed-Algorithmus, Kalender (Apple-Stil) mit eingefärbten Tagen, Fortschritt mit Streak, Monats-Tage, Gesamt-Trainings, Kraftentwicklungs-Graph pro Übung, Gesamtgraph, Muskel-Heatmap mit durchsichtiger Mann/Frau, Rekorde-Panel.
- Erfolgsmetrik: Nutzer kann einen Trainingsplan anlegen, ein Workout loggen und den Streak einsehen, alles offline auf dem eigenen Gerät.
- Design-Zusatz: Home-Startbild nimmt den gesamten Bildschirm ein bis zum ersten Runterrollen. Das rotierende Hintergrundbild wechselt alle 10 Sekunden. Das Zitat bleibt den ganzen Tag gleich (zufällig aus 30er-Pool pro Tag, lokal gespeichert). Datum und Wochentag stehen in kleiner roter Schrift mittig auf dem Bild, darunter das Zitat auf Englisch.
2. Users & roles
- Primär: Eine Person, die eigene Trainingspläne erstellt und Workouts loggt (lokal auf dem Gerät, offline nutzbar).
- Sekundär: Freunde und Familie, die sich per Link, Nutzername oder über Telefonbuch-Kontakte verbinden, aber nur Fotos (nicht Trainingsdaten) des anderen sehen dürfen.
- Jeder installiert die App separat auf seinem eigenen Gerät.
- Sprache: Deutsch.
- Zusatz: Beim Öffnen der App startet man in Home. Der erste sichtbare Bildschirm nimmt das gesamte Display ein mit Hintergrundbild, rotem Datum/Wochentag und englischem Zitat. Erst beim Runterrollen kommen Button „Hier beginnt dein Training“ und die vier Panels zum Vorschein.
3. Core workflows
- App starten: Startet im Reiter „Home“. Der Startbild nimmt das gesamte Display ein: rotierendes Hintergrundbild (alle 10 Sekunden Wechsel), roter Wochentag und Datum mittig, englisches Zitat darunter (zufällig aus 30er-Pool pro Tag, lokal gespeichert, den ganzen Tag gleich).
- Home scrollen: Button „Hier beginnt dein Training“ führt zum Reiter „Training“. Unterhalb vier Panels (Sport, Ernährung, Schlaf, Biohacking) in 2x2-Anordnung mit festen PubMed-Links und deutschen Zusammenfassungen.
- Training: Auswahl zwischen „Trainingsdatum“, „Trainingstag“, „Plan erstellen“ und „Pläne verwalten“. Bei „Plan erstellen“ Trainings-Split anlegen und Übungen (aus Vorauswahl oder selbst eingegeben) einzelnen Tagen zuordnen. Aktiven Plan unter „Pläne verwalten“ auswählen, alte Pläne löschen.
- Trainingstag wählen: Übungen des letzten gleichen Tages samt letztem Gewicht pro Satz werden vorbefüllt. Option „Freies Training“ (spontane Übungsauswahl) oder „Rest Day“ (unterbricht Streak nicht). Übungen im Plan flexibel änderbar.
- Training speichern oder Entwurf verwerfen.
- Freunde: Unterteilt in „Community“ (Fotos bestätigter Freunde, neueste oben, eigene oben, auch ohne eigenes Bild sichtbar, Text-Behind-Subject mit Datum/Uhrzeit), „Freunde finden“ (Suche nach Nutzernamen/Kürzel, Kontaktvorschläge aus Telefonbuch bei Erlaubnis, nur Namen und Nummern), „Anfragen“ (annehmen/ablehnen, roter Punkt bei neuen Anfragen).
- Profil: Name, Profilbild, Kürzel (weiterleitbar über kleinen Pfeil in andere soziale Netzwerke), Panels „Kalender“ (Apple-Stil, Tage eingefärbt: Pull blau, Push rot, Rest Day weiß), „Fortschritt“ (Streak, Monats-Tage, Gesamt-Trainings, Kraftgraph pro Übung als Tagesdurchschnitt, Gesamtgraph, Muskel-Heatmap mit durchsichtiger Mann/Frau, Rekorde), „Tagebuch".
- Direkt zum Home-Bild ohne separates Onboarding.
4. Features & requirements
- Trainingsplan erstellen: Trainingstage anlegen und Übungen jedem Tag direkt zuordnen. Übungen aus Vorauswahl oder selbst eingegeben. Übungen im Plan jederzeit flexibel änderbar.
- Workout loggen: Trainingstag wählen; Übungen samt letztem Gewicht, Sätzen und Wiederholungen werden vorgefüllt; pro Satz Gewicht, Sätze und Wiederholungen eingeben (Werte können pro Satz variieren).
- Freies Training: Übungen spontan ohne Plan auswählen und loggen.
- Rest Day: Ruhetag protokollieren; unterbricht den Streak nicht.
- Fortschritt anzeigen: Übersicht über bisherige Einträge pro Übung.
- Streak anzeigen: Anzahl der Tage in Folge, an denen der Nutzer sich eingetragen hat (Workout oder Rest Day).
- Foto posten: Nutzer macht ein Foto; gespeichert werden nur das Foto, Datum und Uhrzeit; keine Trainingsdaten. Upload nur online. Foto erscheint im Community-Feed von bestätigten Freunden. Text-Behind-Subject-Effekt mit Datum und Uhrzeit im Foto.
- Freundschaftsanfrage per Link oder Nutzername: Link erzeugen, in anderen sozialen Netzwerken teilen, empfangene Anfragen annehmen/ablehnen. Roter Punkt bei neuen Anfragen.
- Freundes-Feed (Community): Nur Fotos der bestätigten Freunde sehen, sortiert nach Datum/Uhrzeit. Eigene Fotos auch ohne eigenes hochgeladenes Bild sichtbar. Text-Behind-Subject-Effekt mit Datum und Uhrzeit im Foto.
- Kalender: Apple-Stil, Tage eingefärbt nach Trainingstyp (Pull blau, Push rot, Rest Day weiß).
- Fortschritts-Panel: Streak, Monats-Tage, Gesamt-Trainings, Kraftgraph pro Übung (Tagesdurchschnitt), Gesamtgraph, Muskel-Heatmap (durchsichtiger Mann/Frau auswählbar), Rekorde-Panel.
- Home-Startbild: Vollbild-Hintergrundbild (rotiert alle 10 Sekunden, 15 Bilder im Stil dunkel/nebelhaft/fotorealistisch: Gym, Laufen, Radfahren, Schwimmen, Leichtathletik; 4 beigefügte Bilder unter images/, 11 weitere vom Agenten im gleichen Stil), roter Wochentag und Datum mittig, englisches Zitat darunter (zufällig aus 30er-Pool pro Tag, lokal gespeichert). Button „Hier beginnt dein Training“ erscheint erst nach Scrollen.
- Telefonbuch-Kontaktvorschläge: Lesen von Kontaktnamen und Telefonnummern bei Erlaubnis des Nutzers.
5. Scope: must / later / never
Must: persönlicher Trainingsplan, Übungen pro Trainingstag zuordnen, Workout loggen mit vorbefülltem letzten Gewicht, pro Satz unterschiedliche Werte, freies Training, Rest Day, Fortschrittsübersicht. Later: Freunde/Familie einladen, gemeinsame Einträge sehen, Statistiken und Diagramme. Never: soziale Feed-Funktionen, Kommentare, Live-Streaming, bezahlte Abos.
6. Screens & UI
- Home: Vollbild-Hintergrundbild (rotiert alle 10 Sekunden, 15 Bilder im Stil dunkel/nebelhaft/fotorealistisch: Gym, Laufen, Radfahren, Schwimmen, Leichtathletik; 4 beigefügte Bilder unter images/, 11 weitere vom Agenten im gleichen Stil), roter Wochentag und Datum mittig, englisches Zitat darunter (zufällig aus 30er-Pool pro Tag, lokal gespeichert). Scrollen enthüllt Button „Hier beginnt dein Training“ und vier Panels (Sport, Ernährung, Schlaf, Biohacking) in 2x2-Anordnung mit PubMed-Links und deutschen Zusammenfassungen. Siehe images/screenshot-1.jpg (Liquid Glass Referenz) und images/A2B6F9A8-..., images/9FE4B18E-..., images/AEFFD651-..., images/AD7445A4-... (Dunkle, vernebelte, fotorealistische Stimmung).
- Training: Übersicht mit „Trainingsdatum“, „Trainingstag“, „Plan erstellen“, „Pläne verwalten“. Ganz unten Buttons „Training speichern“ und „Entwurf verwerfen".
- Plan erstellen/bearbeiten: Trainingstage anlegen, Übungen (aus Vorauswahl oder selbst eingegeben) jedem Tag zuordnen, Übungen flexibel änderbar.
- Workout loggen: Trainingstag auswählen, Übungen mit vorbefülltem letztem Gewicht/Sätzen/Wiederholungen anzeigen, pro Satz Werte eintragen.
- Freies Training: Übungssuche/auswahl, pro Satz Gewicht, Sätze, Wiederholungen eintragen.
- Rest Day: Ruhetag protokollieren.
- Freunde: Drei Unterbereiche „Community“, „Freunde finden“, „Anfragen“. Community: Fotos bestätigter Freunde, neueste oben, eigenes Bild oben, Text-Behind-Subject mit Datum/Uhrzeit, kein Doppelkamera-Effekt, eigene Fotos auch ohne eigenes Bild sichtbar. Freunde finden: Suchleiste für Nutzernamen/Kürzel, Kontaktvorschläge aus Telefonbuch (Namen und Nummern). Anfragen: Annehmen/ablehnen, roter Punkt bei neuen Anfragen.
- Profil: Name, Profilbild, Kürzel (weiterleitbar), Panels „Kalender“, „Fortschritt“, „Tagebuch“. Kalender: Apple-Stil, Tage eingefärbt (Pull blau, Push rot, Rest Day weiß). Fortschritt: Streak, Monats-Tage, Gesamt-Trainings, Kraftgraph pro Übung, Gesamtgraph, Muskel-Heatmap (durchsichtiger Mann/Frau), Rekorde.
- Einstellungen: Dunkelmodus (Standard), App-Infos.
7. Design system & visual style
Dunkelmodus ist Standard. Akzentfarbe elektrisches Rot #FF1744. Abgerundete Ecken (Border Radius 12–16 px). Cleanes Layout mit viel Weißraum auf dunklem Grund. Apple Liquid Glass Optik: halbtransparente, unscharfe Oberflächen mit leichtem Glanz. Typografie: system-ui / San Francisco-ähnliche Schrift. Komponenten-Bibliothek: shadcn/ui mit Tailwind CSS. Die App soll wie eine moderne iOS-App aussehen (siehe Liquid Glass Referenz, falls Screenshot bereitgestellt).
8. Data model
Lokal auf dem Gerät (IndexedDB):
| Entität: Trainingsplan | Feld | Typ | Pflicht |
|---|---|---|---|
| id | uuid | ja | |
| name | text | ja | |
| erstellt_am | datetime | ja | |
| aktualisiert_am | datetime | ja | |
| aktiv | boolean | ja |
| Entität: Trainingstag | Feld | Typ | Pflicht |
|---|---|---|---|
| id | uuid | ja | |
| plan_id | uuid | ja | |
| name | text | ja | |
| wochentag | integer (0–6) | nein | |
| erstellt_am | datetime | ja |
| Entität: Übung | Feld | Typ | Pflicht |
|---|---|---|---|
| id | uuid | ja | |
| name | text | ja | |
| eigene | boolean | ja |
| Entität: Tagesübung | Feld | Typ | Pflicht |
|---|---|---|---|
| id | uuid | ja | |
| trainingstag_id | uuid | ja | |
| uebung_id | uuid | ja | |
| sortierung | integer | ja |
| Entität: Workout-Eintrag | Feld | Typ | Pflicht |
|---|---|---|---|
| id | uuid | ja | |
| trainingstag_id | uuid | nein | |
| typ | text (training, frei, rest) | ja | |
| datum | date | ja | |
| logged_am | datetime | ja |
| Entität: Satz | Feld | Typ | Pflicht |
|---|---|---|---|
| id | uuid | ja | |
| workout_entry_id | uuid | ja | |
| uebung_id | uuid | ja | |
| satz_nr | integer | ja | |
| gewicht | decimal | nein | |
| wiederholungen | integer | nein |
| Entität: Zitat-Tageswahl | Feld | Typ | Pflicht |
|---|---|---|---|
| datum | date | ja | |
| zitat_index | integer (0–29) | ja |
In Supabase (Cloud):
| Entität: Freundschaft | Feld | Typ | Pflicht |
|---|---|---|---|
| id | uuid | ja | |
| nutzer_id | uuid | ja | |
| freund_id | uuid | ja | |
| status | text (offen, angenommen, abgelehnt) | ja | |
| link_token | text | nein | |
| erstellt_am | datetime | ja |
| Entität: Foto | Feld | Typ | Pflicht |
|---|---|---|---|
| id | uuid | ja | |
| nutzer_id | uuid | ja | |
| bild_url | text | ja | |
| datum | date | ja | |
| uhrzeit | time | ja | |
| erstellt_am | datetime | ja |
9. APIs & integrations
Supabase Free Tier für: Speicherung von Freundschaftsfotos (nur Foto-Datei, Datum, Uhrzeit, Nutzer-ID), Freundschaftsanfragen (Sender, Empfänger, Status: offen/angenommen/abgelehnt, Link-Token). Keine Integration mit sozialen Netzwerken für den Upload; der Nutzer kopiert den Link manuell und teilt ihn dort.
10. Auth, permissions & security
Kein Benutzerkonto für das lokale Trainingstagebuch. Für die Freundes-Foto-Funktion: E-Mail-Anmeldung über Supabase Auth. Jeder Nutzer hat eine eigene Nutzer-ID. Nur bestätigte Freunde dürfen die Fotos des anderen sehen. Keine Passwort-Wiederherstellung im Must-have (später).
11. Performance, privacy & accessibility
Performance: erster Bildschirm unter 3 Sekunden, Bilder max. 300 KB. Datenschutz: Trainingsdaten verlassen das Gerät nie, Cloud nur Fotos und Freundschaftsstatus, Telefonbuch nur Namen und Nummern nach Erlaubnis. Barrierefreiheit: WCAG AA Kontrast, keine Alt-Texte.
12. Edge cases & errors
Offline-Upload wird nachgeholt; keine Freunde zeigt Hinweis; verweigerter Kontaktzugriff blendet Vorschläge aus; doppelte Anfragen werden verhindert; Löschen und Verwerfen mit Bestätigung; fehlendes Vorgewicht bleibt leer; Fotos werden verkleinert; Zitat-Fallback.
13. Stack & constraints
Progressive Web App (PWA) gehostet auf Vercel. Frontend mit React oder Vue und shadcn/ui + Tailwind CSS. Lokale Speicherung auf dem Gerät (IndexedDB oder LocalStorage) für Trainingspläne, Workouts, Fortschritt und Streak. Kein Backend für die persönlichen Daten. Für die Freundes-Foto-Funktion eine Cloud-Datenbank (z. B. Supabase Free Tier) für Fotos, Datum/Uhrzeit und Freundschaftsanfragen. Installierbar über den Browser auf iPhone und Android. Offline nutzbar für Workouts; Foto-Upload und Freundschaftsanfragen nur online.
14. Existing code & do-not-change
Not needed: Neues Projekt, kein bestehender Code.
15. Build order
- Startbildschirm und Navigation: Vier Tabs (Home, Training, Freunde, Profil) unten in der App. Home zeigt das Vollbild-Startbild mit rotierendem Hintergrund (alle 10 Sekunden), rotem Datum/Wochentag und dem Tageszitat aus dem 30er-Pool. Erst beim Runterscrollen erscheinen der Button „Hier beginnt dein Training“ und die vier Panels mit PubMed-Links. Klickbar im Browser und auf dem Smartphone installierbar.
- Training lokal: Pläne anlegen, Trainingstage hinzufügen, Übungen aus Vorauswahl oder eigene zuordnen, Pläne aktivieren/löschen. Trainingstag wählen (Vorbefüllung mit letztem Gewicht pro Satz), freies Training und Rest Day loggen, speichern oder verwerfen. Vollständig offline.
- Profil und Fortschritt lokal: Kalender im Apple-Stil mit eingefärbten Tagen (Pull blau, Push rot, Rest Day weiß), Streak, Monats-Tage, Gesamt-Trainings, Kraftgraph pro Übung, Gesamtgraph, Muskel-Heatmap mit Mann/Frau-Auswahl, Rekorde und Tagebuch. Vollständig offline.
- Freunde mit Cloud: E-Mail-Anmeldung über Supabase Auth, Community-Feed mit Foto-Upload (Text-Behind-Subject mit Datum/Uhrzeit), Freunde finden per Nutzername/Kürzel, Telefonbuch-Vorschläge nach Erlaubnis, Anfragen mit rotem Punkt. Upload wird nachgeholt, wenn wieder online.
- Feinschliff und Bereitstellung: Ladezeit prüfen (unter 3 Sekunden), Bestätigungsdialoge für Löschen und Verwerfen, Fehlermeldungen, Dunkelmodus und Liquid-Glass-Optik abgleichen, Deployment auf trainingsstagebuch.vercel.app.
16. Acceptance criteria & tests
- Home-Ablauf: Beim Öffnen zeigt die App das Vollbild-Startbild mit Datum, Wochentag und Zitat. Das Bild wechselt alle 10 Sekunden. Erst nach dem Scrollen erscheinen der Button „Hier beginnt dein Training“ und die vier Panels.
- Ladezeit: Der erste sichtbare Bildschirm erscheint in unter 3 Sekunden auf einem mittleren Smartphone.
- Tageszitat: Das Zitat ist den ganzen Tag gleich und wechselt am nächsten Tag.
- Plan und Training: Ein Plan mit Trainingstagen und Übungen lässt sich anlegen, aktivieren und löschen. Ein Workout mit vorbefülltem letztem Gewicht pro Satz lässt sich speichern.
- Freies Training und Rest Day: Freies Training und Rest Day lassen sich loggen. Rest Day unterbricht den Streak nicht.
- Streak: Der Streak zählt Tage in Folge mit Workout oder Rest Day.
- Offline: Workouts und Pläne funktionieren ohne Internet.
- Foto-Upload: Ein Foto, das offline gemacht wurde, wird beim nächsten Online-Zugang hochgeladen.
- Freunde-Sichtbarkeit: Nur Fotos bestätigter Freunde sind sichtbar, auch wenn man selbst kein Bild hochgeladen hat.
- Anfragen: Eine neue Anfrage zeigt einen roten Punkt am Button „Anfragen“. Doppelte Anfragen werden verhindert.
- Kalenderfarben: Pull blau, Push rot, Rest Day weiß.
- Bestätigung: Löschen und Verwerfen verlangen eine Bestätigung.
- Kontakte: Ohne Erlaubnis fürs Telefonbuch erscheinen keine Kontaktvorschläge.
17. Deployment, environments & secrets
- Hosting: Vercel, kostenloser Tarif, Domain trainingsstagebuch.vercel.app.
- Umgebungen: Eine Produktionsumgebung plus lokale Entwicklungsumgebung.
- Secrets: Supabase-URL und Anon-Key als Vercel-Umgebungsvariablen; kein Service-Key im Frontend.
- Datenbank: Supabase Free Tier, Row-Level-Security aktiv, Nutzer sehen nur eigene Daten und Daten bestätigter Freunde.
18. Open questions & assumptions
- Default: Zitat-Fallback bei fehlendem Pool: fester Satz „Keep going.“
- Default: Telefonbuch nur Namen und Nummern, keine E-Mail-Adressen.
- Default: Fotos werden vor dem Upload auf maximal 1080 px verkleinert.
- Default: Kein Onboarding, direkter Start im Home-Bild.
- Default: Kein Passwort-Reset im ersten Release.
- Default: Deployment auf Vercel mit einer Produktionsumgebung plus lokaler Entwicklung; Supabase-Schlüssel nur als Umgebungsvariablen.
- Default: Akzeptierte Bildformate für Fotos sind JPEG und PNG.