Nachbesserungen aus der fachlichen Begutachtung (Skill
ernaehrungswissenschaftler):
- Kalorien-Untergrenze von 800 auf 1.200 kcal angehoben (goalsInput und
upsertWeeklyCaloriePlan, neue Konstante MIN_CALORIE_GOAL). Im Ziele-Tab
Sicherheitswarnung bei einem Ziel unter 1.500 kcal.
- Defizit-Banner wird nur noch bei moderatem Defizit (10-25 % unter dem
Basis-Tagesziel) gefeiert und gegen baseDailyGoal statt inkl. Sportbonus
gerechnet. Bei einem Defizit über 25 % erscheint stattdessen ein sanfter
"iss genug"-Hinweis statt Lob.
- Wochenbudget-Verteilung: der am 1.200-Floor gekappte Rest wird iterativ
auf die übrigen Tage weiterverteilt, sodass das Wochenbudget erhalten
bleibt, solange es geht. Neue Funktion weeklyExtrasOverflow meldet den
unvermeidbaren Überschuss; die Wochenbudget-Seite weist ihn ehrlich aus
statt pauschal "bleibt gleich" zu versprechen.
- Dashboard-Makros: Kohlenhydrate und Fett als geschätzt (~) gekennzeichnet
inkl. erklärendem Hinweis; Protein bleibt real getrackt.
- 2 neue API-Tests (iterative Floor-Verteilung, weeklyExtrasOverflow).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pro-Tag-Mehrbedarf statt fester Tageswerte:
- DB: Spalte extraCalories in weekly_calorie_plans (Migration 0018).
- API: neuer Endpoint setWeeklyExtras nimmt die ganze Woche entgegen
und verteilt eingeplante Mehrkalorien serverseitig. Reine, getestete
Verteilungslogik distributeWeeklyExtras haelt das Wochenziel konstant
(Tage mit Blocker = Tagesziel + Extra; uebrige Tage anteilig reduziert,
Floor 1200). statsSummary liefert extraCalories pro Tag mit.
- 3 neue API-Tests (Verteilung konstant, Floor, Endpoint).
- Wochenbudget-UI: je Tag ein "+kcal"- und ein "Anlass"-Feld plus ein
einziger "kcal neu verteilen"-Button. Blocker-Tage werden hervorgehoben.
Das fehleranfaellige Einzel-Datumsformular entfaellt.
- Dashboard nimmt den verteilten Plan-Wert des Tages als Basis-Tagesziel
(z. B. 1.740 nach Ausgleich, 2.800 an einem Blocker-Tag) und zeigt einen
Hinweis. Behebt zugleich den Sync: Wochenbudget-Aenderungen invalidieren
jetzt alle statsSummary-Varianten, sodass das Dashboard sofort mitzieht.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Health-/Ernährungslogik überarbeitet:
- Fix: upsertProfile speichert fehlende Größe/Gewicht als null statt 0
(Round-Trip-Bug: gespeicherte 0 scheiterte beim erneuten Speichern an
z.number().positive()). Frontend clampt zudem mealsPerDay/cooksPerDay
auf die Zod-Grenzen. 3 neue API-Tests.
- Ziele-Bearbeitung vom Standalone /ziele in den Einstellungen-Tab
?tab=ziele gezogen; /ziele-Seite + Sidebar-Eintrag entfernt. Liest/
schreibt jetzt aus der DB (vorher las der Tab veraltetes localStorage).
- Wochenziel wird automatisch als Tagesziel × 7 berechnet (Feld entfällt).
- Sportbonus klar dargestellt: Tagesansicht addiert den heutigen Sport
aufs Budget (nur wenn sportAddsCalories aktiv) mit Bolt-Badge; Wochen-
Box mit Icon und Info "ganze Woche". Dashboard invalidiert alle
statsSummary-Varianten.
- Belohnende Banner bei Sport heute und bei Kaloriendefizit.
- Doku: rules.md-Verweis auf docs/projektreferenz.md korrigiert.
- Neuer Skill: ernaehrungswissenschaftler (fachliche Abnahme der
Health-Logik).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>