feat: stabilization + recipe edit/create UI

This commit is contained in:
clawd
2026-02-18 09:55:39 +00:00
commit ee452efa6a
75 changed files with 15160 additions and 0 deletions

344
features/DESIGN-CONCEPT.md Normal file
View File

@@ -0,0 +1,344 @@
# 🎨 Luna Recipes — Design-Konzept
## 1. Farbschema
Warm, einladend, modern-feminin ohne kitschig zu wirken. Inspiriert von Backzutaten: Vanille, Karamell, Beeren.
| Rolle | Farbe | Hex | Verwendung |
|---|---|---|---|
| **Primary** | Dusty Rose | `#C4737E` | Buttons, aktive States, Akzente |
| **Primary Light** | Soft Blush | `#F2D7DB` | Hover, Badges, Tags |
| **Secondary** | Warm Caramel | `#D4A574` | Sekundäre Buttons, Icons |
| **Background** | Cream White | `#FBF8F5` | Seitenhintergrund |
| **Surface** | Pure White | `#FFFFFF` | Cards, Modals |
| **Text Primary** | Espresso | `#2D2016` | Überschriften, Body |
| **Text Secondary** | Warm Grey | `#7A6E65` | Subtexte, Metadaten |
| **Success** | Sage Green | `#7BAE7F` | Timer fertig, Erfolg |
| **Error** | Berry Red | `#C94C4C` | Fehler, Löschen |
| **Border** | Sand | `#E8E0D8` | Trennlinien, Card-Borders |
### Dark Mode (optional, Phase 2)
- Background: `#1A1614`
- Surface: `#2D2620`
- Text: `#F5EDE8`
## 2. Typografie
| Rolle | Font | Gewicht | Größe |
|---|---|---|---|
| **Logo/Brand** | *Playfair Display* | 700 | 28px |
| **H1** | *Playfair Display* | 600 | 24px |
| **H2** | *Playfair Display* | 600 | 20px |
| **H3** | *Inter* | 600 | 17px |
| **Body** | *Inter* | 400 | 15px |
| **Small/Meta** | *Inter* | 400 | 13px |
| **Kochmodus** | *Inter* | 500 | 2228px |
| **Timer** | *JetBrains Mono* | 500 | 48px |
> Playfair Display für Eleganz in Überschriften, Inter als saubere UI-Schrift. Monospace nur für Timer-Anzeige.
## 3. Screen-Übersicht
```
┌─────────────────────────────────────────────┐
│ App-Struktur │
├─────────────────────────────────────────────┤
│ │
│ 📱 Bottom Navigation: │
│ [Startseite] [Suche] [+Neu] [Liste] [Me] │
│ │
│ Screens: │
│ ├── Startseite (Feed) │
│ ├── Kategorie-Ansicht │
│ ├── Suche + Filter │
│ ├── Rezept-Detail │
│ │ ├── Kochmodus (Fullscreen) │
│ │ └── Notizen-Sheet │
│ ├── Rezept erstellen/bearbeiten │
│ ├── Einkaufsliste │
│ ├── Profil / Einstellungen │
│ └── Onboarding (Erststart) │
│ │
└─────────────────────────────────────────────┘
```
## 4. Component-Liste
### Layout
- `AppShell` — Wrapper mit Bottom-Nav
- `BottomNav` — 5 Icons, aktiver State mit Farbe + Label
- `TopBar` — Kontextuell: Titel, Back-Button, Actions
- `FullscreenOverlay` — Für Kochmodus
### Cards
- `RecipeCard` — Foto (3:4), Titel, Kategorie-Badge, Dauer, Favorit-Herz
- `RecipeCardSmall` — Horizontal, Thumbnail links, Infos rechts
- `CategoryCard` — Rundes Bild + Label darunter
### Rezept-Detail
- `HeroImage` — Parallax-Scroll Foto oben
- `RecipeMeta` — Dauer, Portionen, Schwierigkeit als Icons
- `IngredientList` — Checkbare Zutatenliste mit Mengenrechner
- `StepList` — Nummerierte Schritte mit optionalen Bildern
- `NoteSection` — Eigene Notizen mit Bearbeiten-Button
- `ActionBar` — Kochmodus starten, zur Liste hinzufügen, Teilen
### Kochmodus
- `CookingStep` — Großer Text, Schrittnummer, Swipe-Geste
- `CookingTimer` — Kreisförmiger Countdown, Vibration bei Ende
- `CookingProgress` — Fortschrittsbalken oben
- `CookingNav` — Vor/Zurück-Buttons unten
### Suche & Filter
- `SearchBar` — Prominent, mit Mikrofon-Icon (Phase 2)
- `FilterChips` — Horizontale Scroll-Chips (Kategorie, Zeit, Zutat)
- `FilterSheet` — Bottom-Sheet mit erweiterten Filtern
### Einkaufsliste
- `ShoppingItem` — Checkbox + Zutat + Menge + Rezeptherkunft
- `ShoppingSection` — Gruppiert nach Rezept oder Abteilung
- `AddItemInput` — Schnelles Hinzufügen eigener Einträge
### Formulare
- `RecipeForm` — Multi-Step Formular für Rezepterstellung
- `ImageUpload` — Drag/Drop + Kamera-Auslöser
- `IngredientInput` — Menge + Einheit + Zutat als Inline-Row
- `StepInput` — Textfeld + optionales Bild + Timer-Feld
### Allgemein
- `Button` — Primary, Secondary, Ghost, Danger Varianten
- `Badge` — Kategorie-Tags farblich kodiert
- `Toast` — Erfolgs-/Fehlermeldungen
- `EmptyState` — Illustration + Text wenn Liste leer
- `Skeleton` — Loading-Platzhalter für Cards
## 5. Wireframe-Beschreibungen
### 5.1 Startseite (Feed)
```
┌──────────────────────────┐
│ 🍰 Luna Recipes [👤] │ ← TopBar mit Logo + Profil-Avatar
├──────────────────────────┤
│ ○Backen ○Torten ○Mittag │ ← Horizontale Kategorie-Chips (scrollbar)
│ ○Frühstück ○Snacks ... │
├──────────────────────────┤
│ ┌────────┐ ┌────────┐ │
│ │ 📷 │ │ 📷 │ │ ← Pinterest-artiges Masonry Grid
│ │ │ │ groß │ │ Unterschiedliche Höhen
│ │ Titel │ │ │ │ Tap → Rezept-Detail
│ │ 30min ❤│ │ Titel │ │
│ └────────┘ │ 45min ❤│ │
│ ┌────────┐ └────────┘ │
│ │ 📷 │ ┌────────┐ │
│ │ Titel │ │ 📷 │ │
│ │ 20min ❤│ │ Titel │ │
│ └────────┘ └────────┘ │
├──────────────────────────┤
│ [🏠] [🔍] [] [🛒] [👤] │ ← Bottom Navigation
└──────────────────────────┘
```
- Standard: Alle Rezepte, neuste zuerst
- Kategorie-Chips filtern den Feed inline
- Pull-to-Refresh
- Endlos-Scroll mit Lazy Loading
- Favorit-Herz direkt auf der Card antippbar
### 5.2 Suche + Filter
```
┌──────────────────────────┐
│ [← ] 🔍 Suche... [✕] │ ← Autofokus auf Suchfeld
├──────────────────────────┤
│ Letzte Suchen: │
│ Schokoladentorte Pasta │ ← Antippbare Tags
├──────────────────────────┤
│ [Kategorie ▼] [Zeit ▼] │ ← Filter-Chips
│ [Schwierigkeit ▼] │
├──────────────────────────┤
│ 3 Ergebnisse │
│ ┌────────────────────┐ │
│ │ 🖼 │ Schwarzwälder │ │ ← RecipeCardSmall Layout
│ │ │ Kirschtorte │ │ Horizontal für Suchergebnisse
│ │ │ ⏱90min ⭐Mittel │ │
│ └────────────────────┘ │
│ ┌────────────────────┐ │
│ │ 🖼 │ Schoko-Mousse │ │
│ └────────────────────┘ │
└──────────────────────────┘
```
- Suche durchsucht: Titel, Zutaten, Tags, Notizen
- Debounced (300ms) Live-Ergebnisse
- Filter kombinierbar (AND-Verknüpfung)
- Zeitfilter: <15min, 1530, 3060, >60min
### 5.3 Rezept-Detail
```
┌──────────────────────────┐
│ [←] [❤] [⋯]│ ← Floating über Hero-Bild
│ │
│ ┌──────────────┐ │
│ │ │ │ ← Hero-Image, 16:10
│ │ 📷 Foto │ │ Parallax beim Scrollen
│ │ │ │
│ └──────────────┘ │
├──────────────────────────┤
│ Schwarzwälder Kirschtorte│ ← H1 Playfair Display
│ 🏷 Torten ⏱ 90min │
│ 👤 8 Portionen ⭐ Mittel │
├──────────────────────────┤
│ [🍳 Kochen] [🛒 Liste] │ ← Primary + Secondary Button
├──────────────────────────┤
│ ── Zutaten ──────────────│
│ Portionen: [] 8 [+] │ ← Mengenrechner
│ ☐ 200g Mehl │
│ ☐ 150g Zucker │ ← Antippbar → Einkaufsliste
│ ☐ 5 Eier │
│ ☐ 500ml Sahne │
│ ... │
├──────────────────────────┤
│ ── Zubereitung ──────────│
│ 1. Eier trennen und... │
│ 2. Mehl mit Kakao... │ ← Kompakte Schritt-Liste
│ 3. Backofen auf 180°... │
│ ... │
├──────────────────────────┤
│ ── Meine Notizen ────────│
│ 📝 "Nächstes Mal weniger │ ← Editierbar
│ Zucker, dafür mehr │
│ Kirschen!" │
│ [✏️ Bearbeiten] │
├──────────────────────────┤
│ [🏠] [🔍] [] [🛒] [👤] │
└──────────────────────────┘
```
- Drei-Punkte-Menü (⋯): Bearbeiten, Teilen, Löschen
- Zutaten-Checkbox → einzeln zur Einkaufsliste
- Portionen-Rechner skaliert alle Mengen live
- Notizen: Inline-Edit, Markdown-Unterstützung
### 5.4 Kochmodus (Fullscreen)
```
┌──────────────────────────┐
│ Schritt 3 von 12 [✕] │ ← Progress-Info + Schließen
│ ████████░░░░░░░░░░░░░░░░ │ ← Fortschrittsbalken
├──────────────────────────┤
│ │
│ │
│ Backofen auf 180°C │ ← GROSSE SCHRIFT (2228px)
│ Ober-/Unterhitze │ Zentriert
│ vorheizen. │ Max 3-4 Zeilen
│ │
│ │
│ ┌──────────┐ │
│ │ 05:00 │ │ ← Timer (falls Schritt Timer hat)
│ │ ▶ Start │ │ Kreisförmig
│ └──────────┘ │
│ │
├──────────────────────────┤
│ [← Zurück] [Weiter →] │ ← Navigation + Swipe-Geste
└──────────────────────────┘
```
- Bildschirm bleibt an (Wake Lock API)
- Swipe links/rechts für Navigation
- Timer: Antippen startet, Vibration + Sound bei 0:00
- Mehrere Timer gleichzeitig möglich (Badge-Anzeige)
- Schließen fragt "Wirklich beenden?"
### 5.5 Einkaufsliste
```
┌──────────────────────────┐
│ Einkaufsliste [🗑 ✓] │ ← Erledigte löschen
├──────────────────────────┤
│ [+ Eigenen Artikel ...] │ ← Quick-Add Input
├──────────────────────────┤
│ 🍰 Schwarzwälder Kirsch. │ ← Gruppiert nach Rezept
│ ☐ 200g Mehl │
│ ☑ 150g Zucker │ ← Durchgestrichen
│ ☐ 5 Eier │
│ ☐ 500ml Sahne │
├──────────────────────────┤
│ 🥗 Caesar Salad │
│ ☐ 1 Römersalat │
│ ☐ Parmesan │
├──────────────────────────┤
│ 📝 Eigene │
│ ☐ Küchenrolle │
├──────────────────────────┤
│ [🏠] [🔍] [] [🛒] [👤] │
└──────────────────────────┘
```
- Gleiche Zutaten aus verschiedenen Rezepten werden zusammengefasst (Phase 2)
- Wisch nach links → Artikel entfernen
- Sortierbar: nach Rezept oder nach Abteilung
- Offline verfügbar (PWA!)
### 5.6 Rezept erstellen/bearbeiten
```
┌──────────────────────────┐
│ [✕] Neues Rezept [Save] │
├──────────────────────────┤
│ Schritt 1 von 4 │
│ ●───○───○───○ │ ← Stepper
├──────────────────────────┤
│ │
│ [📷 Foto hinzufügen] │ ← Kamera oder Galerie
│ │
│ Titel * │
│ [________________________]│
│ │
│ Kategorie * │
│ [Backen ▼] │
│ │
│ Tags │
│ [Schoko] [Torte] [+ ...]│
│ │
│ Portionen Dauer │
│ [_8_] [_90_] min │
│ │
│ Schwierigkeit │
│ ○ Einfach ● Mittel ○ Pro│
│ │
│ [Weiter →] │
└──────────────────────────┘
```
- 4 Schritte: Basis → Zutaten → Zubereitung → Vorschau
- Auto-Save als Entwurf
- Zutaten: dynamische Rows (Menge + Einheit + Name)
- Zubereitung: Schritte mit optionalem Timer pro Schritt
### 5.7 Profil / Einstellungen
- Anzahl Rezepte, Favoriten
- Kategorien verwalten (eigene hinzufügen)
- Einheiten-Präferenz (metrisch/imperial)
- Dark Mode Toggle
- Daten exportieren/importieren
- App-Version & Info
## 6. Design-Prinzipien
1. **Fotos im Fokus** — Große, appetitliche Bilder treiben die Navigation
2. **One-Thumb-Use** — Alle wichtigen Aktionen im Daumenbereich
3. **Kochmodus = Stressfrei** — Große Schrift, einfache Navigation, keine Ablenkung
4. **Schnelles Wiederfinden** — Suche, Kategorien, Favoriten auf max 2 Taps
5. **Offline First** — Einkaufsliste und gespeicherte Rezepte immer verfügbar
## 7. Animationen & Micro-Interactions
- Card-Tap: Sanftes Scale-Up (0.98 → 1.0)
- Favorit-Herz: Kurze Bounce-Animation + Farbwechsel
- Kochmodus-Swipe: Slide-Transition zwischen Schritten
- Timer-Ende: Pulsieren + Vibration
- Pull-to-Refresh: Custom Cupcake-Animation (Phase 2)
- Page-Transitions: Shared Element Transition für Hero-Image (Card → Detail)