mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 20:41:09 +02:00
Complete rename across the entire monorepo pre-launch: - Module, routes, API, i18n, standalone landing app directories - All code identifiers, display names, logo component - German user-facing label: "Essen" (English brand stays "Food") - Dexie table nutriFavorites -> foodFavorites - Infra configs (docker-compose, cloudflared, nginx, wrangler) Zero residue of nutriphi remains. No data migration needed (pre-launch). Follow-up: run pnpm install, update Cloudflare DNS (food.mana.how), rename Cloudflare Pages project. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
445 lines
13 KiB
Markdown
445 lines
13 KiB
Markdown
# Food MVP-Plan
|
|
|
|
> **Status:** Planung abgeschlossen
|
|
> **Letzte Aktualisierung:** 2026-01-24
|
|
|
|
## Vision
|
|
|
|
Food ist eine datenschutzorientierte, KI-gestützte Ernährungs-Tracking-Web-App für gesundheitsbewusste Menschen. Sie ermöglicht das Erfassen von Mahlzeiten per Foto oder Text und liefert vollständige Nährwertanalysen mit personalisierten Empfehlungen.
|
|
|
|
---
|
|
|
|
## Entscheidungen (bestätigt)
|
|
|
|
| Bereich | Entscheidung |
|
|
|---------|--------------|
|
|
| **Zielgruppe** | Gesundheitsbewusste Menschen |
|
|
| **Eingabemethoden** | Foto + Text (Sprache in Phase 2) |
|
|
| **Analyse-Tiefe** | Vollständig (Kalorien, Makros, Vitamine, Mineralstoffe) |
|
|
| **Tracking** | Tagesziele + Fortschrittsanzeige |
|
|
| **KI-Modell** | Google Gemini (neuestes, günstiges Modell) |
|
|
| **Portionsgröße** | KI-Schätzung + manuelle Korrektur |
|
|
| **Plattform** | Web-only (SvelteKit, mobile-optimiert) |
|
|
| **Monetarisierung** | ManaCore Credits |
|
|
| **Favoriten** | Ja, häufige Mahlzeiten speichern |
|
|
| **Statistiken** | Tagesübersicht, Wochen-Trend, Ziel-Fortschritt |
|
|
| **Empfehlungen** | Einfache Hinweise + KI-Coaching |
|
|
| **Datenschutz** | Maximum (lokale Verarbeitung, minimale Speicherung) |
|
|
|
|
---
|
|
|
|
## MVP Feature-Scope
|
|
|
|
### Muss (MVP v1.0)
|
|
|
|
#### Kern-Features
|
|
- [ ] **Foto-Analyse**: Foto hochladen/aufnehmen, Gemini analysiert Mahlzeit
|
|
- [ ] **Text-Eingabe**: Mahlzeit per Freitext beschreiben als Alternative
|
|
- [ ] **Vollständige Nährwert-Anzeige**: Kalorien, Protein, Kohlenhydrate, Fett, Ballaststoffe, Vitamine (A, B, C, D, E, K), Mineralstoffe (Eisen, Calcium, Magnesium, etc.)
|
|
- [ ] **Portionsschätzung**: KI schätzt Menge, Nutzer kann korrigieren (S/M/L oder Gramm)
|
|
- [ ] **Mahlzeit speichern**: Analyse in Tagesverlauf speichern
|
|
|
|
#### Tracking & Ziele
|
|
- [ ] **Tagesziele setzen**: Kalorienziel, optional Makro-Ziele
|
|
- [ ] **Tagesübersicht**: Alle Mahlzeiten des Tages, Fortschrittsbalken
|
|
- [ ] **Wochen-Trend**: Einfaches Diagramm der letzten 7 Tage
|
|
|
|
#### Favoriten & Historie
|
|
- [ ] **Favoriten speichern**: Häufige Mahlzeiten mit einem Klick wiederverwenden
|
|
- [ ] **Mahlzeiten-Historie**: Vergangene Einträge durchsuchen
|
|
|
|
#### Empfehlungen
|
|
- [ ] **Einfache Hinweise**: "Du hast heute wenig Protein", "Vitamin C unter Tagesziel"
|
|
- [ ] **KI-Coaching**: Personalisierte Tipps basierend auf Verlauf und Zielen
|
|
|
|
#### Datenschutz (Maximum)
|
|
- [ ] **Foto-Löschung**: Fotos werden nach Analyse sofort gelöscht (nur Ergebnis gespeichert)
|
|
- [ ] **Minimale Speicherung**: Nur notwendige Daten auf Server
|
|
- [ ] **Lokale Verarbeitung**: Wo möglich clientseitig (z.B. Statistik-Berechnung)
|
|
- [ ] **Export-Funktion**: Nutzer kann alle Daten exportieren (DSGVO)
|
|
- [ ] **Lösch-Funktion**: Account und alle Daten vollständig löschen
|
|
|
|
#### Auth & Credits
|
|
- [ ] **ManaCore Auth**: Login über zentralen Auth-Service
|
|
- [ ] **Credit-System**: X Credits pro Analyse, Integration mit ManaCore Credits
|
|
|
|
### Sollte (v1.1)
|
|
|
|
- [ ] Spracheingabe (Speech-to-Text)
|
|
- [ ] Barcode-Scanner für verpackte Lebensmittel
|
|
- [ ] Wassertracking
|
|
- [ ] PWA-Installation für Mobile-Erlebnis
|
|
|
|
### Könnte (v1.2+)
|
|
|
|
- [ ] Rezepterkennung (komplexe Gerichte)
|
|
- [ ] Mahlzeiten-Planung
|
|
- [ ] Integration mit Apple Health / Google Fit
|
|
- [ ] Gemeinsames Tracking (Familie/Partner)
|
|
- [ ] Allergen-Warnungen
|
|
|
|
---
|
|
|
|
## Technische Architektur
|
|
|
|
### Stack
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────┐
|
|
│ Frontend (SvelteKit) │
|
|
│ - Mobile-optimiertes UI │
|
|
│ - PWA-fähig │
|
|
│ - Kamera-Zugriff via Web API │
|
|
│ - Lokale Statistik-Berechnung │
|
|
└─────────────────────────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────┐
|
|
│ Backend (NestJS) │
|
|
│ - Gemini API Integration │
|
|
│ - Nährwert-Datenbank │
|
|
│ - Credit-Verwaltung │
|
|
│ - Empfehlungs-Engine │
|
|
└─────────────────────────────────────────────────────────┘
|
|
│
|
|
┌─────────────┼─────────────┐
|
|
▼ ▼ ▼
|
|
┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
│ PostgreSQL│ │ ManaCore │ │ Gemini │
|
|
│ (Supabase)│ │ Auth │ │ API │
|
|
└──────────┘ └──────────┘ └──────────┘
|
|
```
|
|
|
|
### Projektstruktur
|
|
|
|
```
|
|
apps/food/
|
|
├── apps/
|
|
│ ├── web/ # SvelteKit (mobile-optimiert)
|
|
│ └── backend/ # NestJS API
|
|
├── packages/
|
|
│ └── shared/ # Gemeinsame Types, Utils
|
|
└── CLAUDE.md
|
|
```
|
|
|
|
### Datenmodell (Entwurf)
|
|
|
|
```typescript
|
|
// User Ziele
|
|
interface UserGoals {
|
|
id: string;
|
|
userId: string;
|
|
dailyCalories: number;
|
|
dailyProtein?: number; // in Gramm
|
|
dailyCarbs?: number;
|
|
dailyFat?: number;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
}
|
|
|
|
// Mahlzeit
|
|
interface Meal {
|
|
id: string;
|
|
userId: string;
|
|
date: Date;
|
|
mealType: 'breakfast' | 'lunch' | 'dinner' | 'snack';
|
|
inputType: 'photo' | 'text';
|
|
description: string; // KI-generierte Beschreibung
|
|
// Foto wird NICHT gespeichert (Datenschutz)
|
|
createdAt: Date;
|
|
}
|
|
|
|
// Nährwerte pro Mahlzeit
|
|
interface MealNutrition {
|
|
mealId: string;
|
|
calories: number;
|
|
protein: number;
|
|
carbohydrates: number;
|
|
fat: number;
|
|
fiber: number;
|
|
sugar: number;
|
|
// Vitamine (in mg oder µg)
|
|
vitaminA?: number;
|
|
vitaminB1?: number;
|
|
vitaminB2?: number;
|
|
vitaminB6?: number;
|
|
vitaminB12?: number;
|
|
vitaminC?: number;
|
|
vitaminD?: number;
|
|
vitaminE?: number;
|
|
vitaminK?: number;
|
|
// Mineralstoffe (in mg)
|
|
calcium?: number;
|
|
iron?: number;
|
|
magnesium?: number;
|
|
potassium?: number;
|
|
sodium?: number;
|
|
zinc?: number;
|
|
}
|
|
|
|
// Favoriten
|
|
interface FavoriteMeal {
|
|
id: string;
|
|
userId: string;
|
|
name: string;
|
|
description: string;
|
|
nutrition: MealNutrition;
|
|
usageCount: number;
|
|
createdAt: Date;
|
|
}
|
|
|
|
// Empfehlungen
|
|
interface DailyRecommendation {
|
|
id: string;
|
|
userId: string;
|
|
date: Date;
|
|
type: 'hint' | 'coaching';
|
|
message: string;
|
|
nutrient?: string; // z.B. 'protein', 'vitaminC'
|
|
createdAt: Date;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## KI-Integration (Gemini)
|
|
|
|
### Prompt-Strategie
|
|
|
|
```
|
|
System: Du bist ein Ernährungsexperte. Analysiere das Bild/die Beschreibung
|
|
einer Mahlzeit und liefere eine detaillierte Nährwertanalyse.
|
|
|
|
Aufgaben:
|
|
1. Identifiziere alle Lebensmittel im Bild/Text
|
|
2. Schätze die Portionsgröße (in Gramm)
|
|
3. Berechne Nährwerte basierend auf Standard-Datenbanken
|
|
4. Gib Konfidenz-Score für die Schätzung an
|
|
|
|
Output-Format: JSON mit strukturierten Nährwertdaten
|
|
```
|
|
|
|
### Kosten-Schätzung (Gemini)
|
|
|
|
| Modell | Kosten | Use Case |
|
|
|--------|--------|----------|
|
|
| Gemini 1.5 Flash | ~$0.001/Analyse | Standard-Analysen |
|
|
| Gemini 1.5 Pro | ~$0.01/Analyse | Komplexe Gerichte, Coaching |
|
|
|
|
### Credit-Mapping
|
|
|
|
| Aktion | Credits |
|
|
|--------|---------|
|
|
| Foto-Analyse | 5 Credits |
|
|
| Text-Analyse | 2 Credits |
|
|
| KI-Coaching Anfrage | 10 Credits |
|
|
|
|
---
|
|
|
|
## Datenschutz-Implementierung
|
|
|
|
### Foto-Handling
|
|
|
|
```
|
|
1. Nutzer macht Foto
|
|
2. Foto wird direkt an Gemini gesendet (Base64)
|
|
3. Analyse-Ergebnis wird gespeichert
|
|
4. Foto wird NICHT gespeichert
|
|
5. Kein Foto-Caching auf Server
|
|
```
|
|
|
|
### Daten-Export (DSGVO Art. 20)
|
|
|
|
- JSON-Export aller Nutzerdaten
|
|
- PDF-Report mit Statistiken
|
|
- Ein-Klick Download
|
|
|
|
### Account-Löschung (DSGVO Art. 17)
|
|
|
|
- Sofortige Löschung aller Daten
|
|
- Keine Backups nach 30 Tagen
|
|
- Bestätigungs-E-Mail
|
|
|
|
---
|
|
|
|
## UI/UX Konzept
|
|
|
|
### Mobile-First Design
|
|
|
|
```
|
|
┌─────────────────────────────┐
|
|
│ Food [+] [Profile] │
|
|
├─────────────────────────────┤
|
|
│ │
|
|
│ Heute: 1.450 / 2.000 kcal │
|
|
│ ████████████░░░░░ 72% │
|
|
│ │
|
|
│ Protein Carbs Fett │
|
|
│ 85g/120 140g/200 45g/70 │
|
|
│ │
|
|
├─────────────────────────────┤
|
|
│ Frühstück 420 kcal │
|
|
│ Mittagessen 680 kcal │
|
|
│ Snack 350 kcal │
|
|
│ │
|
|
├─────────────────────────────┤
|
|
│ │
|
|
│ [📷 Foto] [✏️ Text] │
|
|
│ │
|
|
└─────────────────────────────┘
|
|
```
|
|
|
|
### Farbschema
|
|
|
|
- Primary: Grün (#22C55E) - Gesundheit, Natur
|
|
- Secondary: Orange (#F97316) - Energie, Wärme
|
|
- Background: Warm White (#FAFAF9)
|
|
- Accent: Teal (#14B8A6)
|
|
|
|
---
|
|
|
|
## Entwicklungs-Roadmap
|
|
|
|
### Phase 1: Foundation (Woche 1-2)
|
|
- [ ] Projekt-Setup im Monorepo
|
|
- [ ] Datenbank-Schema erstellen
|
|
- [ ] Auth-Integration
|
|
- [ ] Basis-UI Komponenten
|
|
|
|
### Phase 2: Kern-Features (Woche 3-4)
|
|
- [ ] Gemini API Integration
|
|
- [ ] Foto-Analyse Flow
|
|
- [ ] Text-Eingabe Flow
|
|
- [ ] Nährwert-Anzeige
|
|
|
|
### Phase 3: Tracking (Woche 5-6)
|
|
- [ ] Tagesübersicht
|
|
- [ ] Ziele setzen
|
|
- [ ] Statistiken
|
|
- [ ] Favoriten
|
|
|
|
### Phase 4: Intelligence (Woche 7-8)
|
|
- [ ] Empfehlungs-Engine
|
|
- [ ] KI-Coaching
|
|
- [ ] Wochen-Trends
|
|
|
|
### Phase 5: Polish (Woche 9-10)
|
|
- [ ] Datenschutz-Features (Export, Löschung)
|
|
- [ ] PWA-Optimierung
|
|
- [ ] Performance
|
|
- [ ] Testing
|
|
|
|
---
|
|
|
|
## Offene Punkte
|
|
|
|
- [ ] Gemini API Key beschaffen und konfigurieren (User richtet ein)
|
|
- [x] Nährwert-Referenzdatenbank: **Hybrid-Ansatz** (siehe unten)
|
|
- [x] Design-System: Shared Components aus `@manacore/shared-landing-ui`
|
|
- [x] Landing Page: Ja, mit Astro (wie andere Apps)
|
|
|
|
---
|
|
|
|
## Nährwert-Datenbank: Hybrid-Ansatz
|
|
|
|
### Entscheidung
|
|
|
|
| Datenbank | Verwendung |
|
|
|-----------|------------|
|
|
| **USDA FoodData Central** | Grundnahrungsmittel, präzise Mikronährstoffe |
|
|
| **Open Food Facts** | Verpackte Produkte, deutsche Marken (REWE, Lidl, Aldi) |
|
|
| **Gemini Fallback** | Wenn keine DB-Match, KI schätzt selbst |
|
|
|
|
### Ablauf
|
|
|
|
```
|
|
1. Gemini analysiert Foto → identifiziert Lebensmittel
|
|
2. Backend sucht in USDA (Grundnahrungsmittel) oder Open Food Facts (Markenprodukte)
|
|
3. Nährwerte werden aus DB geholt oder von Gemini geschätzt
|
|
4. Konfidenz-Score zeigt Datenqualität an
|
|
```
|
|
|
|
### Vorteile
|
|
|
|
- USDA: 150+ Nährstoffe, laborgeprüft
|
|
- Open Food Facts: 3 Mio. Produkte, viele deutsche
|
|
- Gemini: Intelligenter Fallback für unbekannte Gerichte
|
|
|
|
---
|
|
|
|
## Landing Page (Astro)
|
|
|
|
### Tech Stack
|
|
|
|
- **Framework:** Astro 5.x
|
|
- **Styling:** Tailwind CSS
|
|
- **Shared Components:** `@manacore/shared-landing-ui`
|
|
- **Deployment:** Cloudflare Pages
|
|
|
|
### Wiederverwendbare Shared Components
|
|
|
|
| Komponente | Verwendung in Food |
|
|
|------------|------------------------|
|
|
| `HeroSection` | "Fotografiere dein Essen, verstehe was du isst" |
|
|
| `FeatureSection` | KI-Analyse, Nährwerte, Tracking, Empfehlungen |
|
|
| `StepsSection` | Foto → Analyse → Tracking |
|
|
| `PricingSection` | Free/Pro mit Credit-System |
|
|
| `FAQSection` | Datenschutz, Genauigkeit, Diäten |
|
|
| `CTASection` | "Jetzt kostenlos starten" |
|
|
| `Navigation` | Shared Header |
|
|
| `Footer` | Shared Footer |
|
|
|
|
### Projektstruktur
|
|
|
|
```
|
|
apps/food/apps/landing/
|
|
├── src/
|
|
│ ├── pages/
|
|
│ │ └── index.astro
|
|
│ ├── layouts/
|
|
│ │ └── Layout.astro
|
|
│ ├── styles/
|
|
│ │ └── global.css # Food Theme (Grün)
|
|
│ └── components/ # Custom falls nötig
|
|
├── astro.config.mjs
|
|
├── package.json
|
|
└── wrangler.toml # Cloudflare Deploy
|
|
```
|
|
|
|
### Farbschema (CSS Custom Properties)
|
|
|
|
```css
|
|
/* Food Theme - Gesundheit/Natur */
|
|
--color-primary: #22C55E; /* Green 500 */
|
|
--color-primary-hover: #16A34A; /* Green 600 */
|
|
--color-secondary: #F97316; /* Orange 500 */
|
|
--color-accent: #14B8A6; /* Teal 500 */
|
|
--color-background-page: #0F1F0F; /* Dark Green tinted */
|
|
--color-background-card: #1A2F1A;
|
|
--color-text-primary: #F0FDF4; /* Green 50 */
|
|
--color-text-secondary: #BBF7D0; /* Green 200 */
|
|
```
|
|
|
|
### Seitenstruktur
|
|
|
|
```
|
|
Navigation
|
|
├── Hero: "Fotografiere dein Essen. Verstehe deinen Körper."
|
|
│ ├── Trust Badges: Datenschutz-First, KI-Powered, Kostenlos starten
|
|
│ └── CTA: Jetzt starten / Mehr erfahren
|
|
├── Features (6 Cards, 3 Spalten)
|
|
│ ├── Foto-Analyse
|
|
│ ├── Vollständige Nährwerte
|
|
│ ├── Tagesziele
|
|
│ ├── KI-Coaching
|
|
│ ├── Favoriten
|
|
│ └── Datenschutz
|
|
├── Steps: Wie es funktioniert (3 Schritte)
|
|
│ ├── 1. Foto machen
|
|
│ ├── 2. KI analysiert
|
|
│ └── 3. Insights erhalten
|
|
├── Pricing (Free / Pro)
|
|
├── FAQ (6 Fragen)
|
|
└── CTA: Starte jetzt kostenlos
|
|
Footer
|
|
```
|