Start · Devlog

Tag 3 · Freitag, 15. Mai 2026

Freitag, 2026-05-15 — Tag 3

webinfraprofiledrinksmeals

Spieler-Sicht

Drei Sachen zusammen: Universal-Links für die kommende iOS-/Mac- App, ein Profil mit Tagesziel-Empfehlung, und ein kleiner Infrastruktur-Fix.

Was sich für dich ändert

  • Profil mit Empfehlung. Du kannst Alter, Geschlecht, Gewicht, Größe und Aktivitätsniveau eintragen — die App rechnet dir daraus einen sinnvollen Tages-Kalorienwert plus Makro-Verteilung als Vorschlag.
  • Apple-Health-Import (in der nativen App) — Profil-Werte können aus Apple Health übernommen werden, statt alles selbst zu tippen.
  • Universal-Links live — sobald die App veröffentlicht ist, öffnet ein Nutriphi-Link aus Mail oder Messenger direkt in der App.
  • Bild-Upload geht wieder schnell — ein interner Port-Fehler hatte den Foto-Service kurz verlangsamt; ist behoben.

Hintergrund

Der Profil-Pass ist ein echter Komfort-Sprung: vorher musstest du dein Tagesziel kennen, jetzt schlägt die App eines vor — auf Basis der Standard-Formeln (Mifflin-St-Jeor), wie sie auch Ernährungs- beraterinnen nutzen.

Macher-Sicht

AASA-Endpoint für Native-Universal-Links, Mana-Media-Port-Fix (3015 → 3011), User-Profile-Schema mit BMR/TDEE-Empfehlung + Apple-Health-Import-Pfad.

Stats

3 Commits, +1 042 / −4 LoC, 14 Files. 10× .ts, 1× .sql- Migration. Top-Dirs: api/db (36 %), nutriphi-domain (29 %). Tags: web, infra, profile. Active-Time 0 Min (claudebot-Commits).

Schritte

  • feat(web): AASA für nutriphi-native Universal-Links. /.well-known/apple-app-site-association mit appID: QP3GLU8PH3.ev.mana.nutriphi und Pfad-Patterns (/meals/*, /share/*, …).
  • fix(infra): mana-media-Port von 3015 auf 3011 korrigieren. docker-compose.yml-Mismatch zwischen lokal (3011) und Mac- Mini-Pinning (3015). Folge: Photo-Upload-503 in einer Test-Session.
  • feat(profile): User-Profile mit BMR/TDEE-Empfehlung + Apple- Health-Import.
    • DB-Schema: user_profiles mit sex, dob, mass_kg, height_cm, activity_level, goal_kcal, goal_protein_g, goal_carbs_g, goal_fat_g.
    • packages/nutriphi-domain/src/recommendation.ts: Mifflin-St-Jeor-Formel für BMR, Activity-Level-Multiplier für TDEE, Makro-Verteilung als Empfehlung.
    • API-Routen GET/PATCH /api/v1/profile, POST /api/v1/profile/recommendation (returns suggestion).
    • POST /api/v1/profile/import-health als Endpoint-Stub für Native-Side (nimmt von App vorbereitete Werte und persistiert).
    • Web-Route /profile mit Sheet zum Bearbeiten.

Architektur-Entscheidungen

  • Recommendation als pure Funktion in nutriphi-domain- Paket, nicht im API-Handler. Damit von Native auch direkt importierbar.
  • Apple-Health-Import als Server-Endpoint, nicht reiner Client-Pfad. Server validiert + speichert; bei späterem Multi-Device-Setup ist Server-State Quelle.
  • Mifflin-St-Jeor + Activity-Level-Multiplier als Standard- Formeln, nicht Harris-Benedict oder Katch-McArdle. Ernährungs- Beratungs-Mainstream, gut dokumentiert.
  • Makro-Verteilung als Default (40 % Carbs, 30 % Protein, 30 % Fat), aber im Profil überschreibbar.
  • AASA-File mit App-Group für Multiple-Apps auf mana.how- Domain: nutriphi, cards, manaspur, zitare. Jede App hat eigene Pfad-Patterns.

Trade-offs

  • +984 LoC für Profile in einem Commit — substantielle Logik (BMR/TDEE-Berechnung + Drizzle-Schema + DTOs + Routes + Sheet), hätte man auf zwei (Schema/Logik separat) splitten können.
  • DB-Schema-Hinzufügen ohne Down-Migration — Drizzle macht das, aber bei Schema-Roll-back wäre user_profiles-Drop nötig. Accepted, weil greenfield.
  • Apple-Health-Import-Endpoint serverseitig statt purer Client-Path: zusätzlicher Round-Trip pro Import, aber State- Konsistenz garantiert.
  • mana-media-Port-Drift (3015 vs. 3011) ist ein klassisches „Doku in PORTS.md vs. Realität in compose.yml"-Problem. PORTS.md ist SOT, compose hatte den falschen.

Offene Punkte

  • Lost-Pixel-Snapshots für /profile vor Live noch nicht.
  • Health-Import-Native-Endpunkt (Server-Side) ist Stub — echte Sex/DateOfBirth-Validation gegen Apple-Health-Format steht aus.
  • Mass-Unit-Toggle (kg vs. lbs) im Profil fehlt. DE-first zwingt nicht, US-Roll-out aber.
  • Goal-Aktualisierung-Audit (wann hat sich das Goal zuletzt geändert?) fehlt — User könnten ihre Geschichte sehen wollen.
  • Compliance-Erwähnung Health-Profil-Daten in COMPLIANCE.md fehlt.

Stats

6
Commits
+3193/-121
Zeilen
47
Files
-0.0 h
Aktiv
Erster Commit
11:23 (Freitag)
Letzter Commit
01:06
Spannweite
13.7 Stunden
Aktiv (ohne Pausen > 30min)
-0.0 Stunden
Pausen
5
Längster Fokus
0.0 Stunden

Wo wurde gearbeitet

  • 28% apps/api/src/db
  • 20% apps/api/src/routes
  • 19% packages/nutriphi-domain/src
  • 9% apps/web/src/routes
  • 7% apps/api/src/lib

Commits (6)

Volle Liste aufklappen
  • 1a5e465 feat(web): AASA für nutriphi-native Universal-Links
  • 0aba980 fix(infra): mana-media-Port von 3015 auf 3011 korrigieren
  • dfc39bf feat(profile): User-Profile mit BMR/TDEE-Empfehlung + Apple-Health-Import
  • 4169109 feat(drinks): kind-Diskriminator, Hydration-Aggregation, AI-Drink-Mode
  • d1af8eb devlog: 3 Tage geschrieben (Live → Theming → AASA + Profile)
  • 6a85663 feat(meals): EXIF-Aufnahmezeit + TZ-aware Tage
Geschrieben mit Claude — Hand veredelt