Rezepte erfassen #4
Labels
No labels
status/blocked
status/claimed
status/entwurf
stufe/mvp-1
stufe/mvp-2
stufe/prio-b
stufe/spaeter
type/bug
type/feature
type/infra
type/tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
robert/rezeptbuch#4
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Neue Rezepte sollen mit möglichst wenig Aufwand ins System kommen: als Text,
Link, Foto oder Datei, auch unordentlich. Jede Eingabe wird zuerst ein
Entwurf, das Original bleibt immer erhalten, und nichts geht verloren –
auch nicht ohne Verbindung oder wenn die KI scheitert.
Entscheidung 08.10.2026: zuerst ohne KI
Dieses Issue wird ohne die KI-Schritte gebaut (Lena, Moeglichkeit B). Was nur mit KI geht, steht in #20 und wird nach dem Qualitaetstest (#19) angeschlossen. Betroffene Kriterien sind unten markiert. Bis dahin werden Fotos und Seiten ohne Rezeptdaten gespeichert und warten auf die KI-Verarbeitung; der Text kann jederzeit selbst eingegeben werden.
Grundlage
PRD Kapitel 07 (Grundregeln, Eingabekanäle, Erstbefüllung, Hintergrund,
Fehler- und Sonderfälle, Bilder), 08 (Fotoeingaben, Sofort-Prüfung),
18 (Performance, Stabilität, Plattform), 19 (Punkt 1)
Abhängig von
#1, #2
Akzeptanzkriterien
Original und Entwurf
KI abschalten, ein Foto erfassen → das Foto liegt bei den Entwürfen.
auch nach der Aufnahme ins Kochbuch; es ist über „Original ansehen“ erreichbar.
(Geändert 08.10.2026: Nach dem 4. Kochen wird es gelöscht – das baut #21.)
der Seite (ohne Bilder) gespeichert.
Zustände: „wartet auf Upload“, „wartet (Platz n)“, „wird verarbeitet“,
„bereit zur Prüfung (n markierte Stellen)“, „geprüft, zum Ausprobieren“,
„nicht erkannt“.
Prüfung warten.
Eingabekanäle
(z. B. „500 g Nudeln, 2 Zwiebeln, Sahne, Parmesan“). Enthält der Text einen
Link, werden Link und Text als ein Eintrag behandelt.
ohne KI gelesen. Sonst liest die KI den Seitentext (dieser Teil: #20). Gerichtsbilder der
Seite werden als Haupt- und Vorschaubild übernommen.
installierte App geschickt werden. Auf dem iPhone wird der Link kopiert
und unter „Link“ eingefügt (entschieden 08.10.2026); das Eingabefeld
übernimmt einen Link aus der Zwischenablage mit einem Tipp („Einfügen“).
gewählt werden. Mit „+ weiteres Foto zu diesem Rezept“ entsteht ein Eintrag
aus mehreren Fotos; die Reihenfolge ist änderbar.
fragt die App einmal „Ein Rezept“ oder „Jedes Foto ein eigenes Rezept“.
einmal. Der Text wird ohne KI aus der Datei gelesen. Prüfung mit allen
Dateien aus „erste Rezepte/“.
Screenshots oder Text hinzugefügt werden; sie gehören zum selben Eintrag.
Sofort-Prüfung bei Fotos
AK-13(nach #20 verschoben): Ist ein Foto unscharf, zu dunkel oder ohne erkennbaren Text,fragt die App innerhalb weniger Sekunden „Das Foto ist unscharf. Nochmal
aufnehmen?“ – noch bevor die große Verarbeitung läuft.
AK-14(nach #20 verschoben): Zeigt ein Foto keinen Rezepttext (z. B. ein fertiges Gericht),bietet die App an: als Bild zu einem bestehenden Rezept hinzufügen / als
neues Rezept anlegen (Merkzettel) / nochmal aufnehmen.
Verarbeitung im Hintergrund
wartet nicht auf die KI.
Warteposition ist sichtbar.
AK-17(nach #20 verschoben): Ein Rezeptfoto ist in unter 1 Minute verarbeitet (bei normalerVerbindung, gemessen mit den Testrezepten).
Gerät („wartet auf Upload“) und wird hochgeladen, sobald wieder eine
Verbindung besteht, spätestens beim nächsten Öffnen der App. Prüfung:
Flugmodus an, Foto erfassen, App schließen, Flugmodus aus, App öffnen →
Foto wird hochgeladen und verarbeitet.
5 Minuten, gezählt ab Beginn der eigentlichen Verarbeitung (Wartezeit in
der Warteschlange zählt nicht). Wird sie überschritten oder scheitert die
Verarbeitung, startet die App einmal automatisch einen zweiten Versuch.
Scheitert auch dieser, wird der Eintrag zu „nicht erkannt: Verarbeitung
abgebrochen“ und bietet „Erneut versuchen“. Das Original bleibt immer
erhalten. Die Zeitgrenze ist eine Einstellung auf dem Server.
Fehler- und Sonderfälle
kein Rezept auf der Seite) wird „nicht erkannt“ mit konkretem Hinweis, z. B.
„Auf dieser Seite habe ich kein Rezept gefunden. Füge einen Screenshot oder
den Rezepttext hinzu.“ Der Link bleibt als Quelle erhalten.
Text kann abgetippt oder später neu verarbeitet werden.
fragt sie „Hier sind 4 Rezepte. Welche möchtest du übernehmen?“ –
Mehrfachauswahl möglich, jedes wird ein eigener Entwurf mit derselben
Quelle. Die Wahl „als ein Rezept behalten“ ist immer vorhanden.
als Merkzettel bei den Entwürfen.
den Entwürfen oder im Papierkorb existiert, erscheint sofort ein Hinweis mit
„Öffnen“ und „Trotzdem neu anlegen“; im Papierkorb zusätzlich wer, wann,
warum, und „Wiederherstellen“. Links mit angehängten Tracking-Zusätzen
(z. B.
?utm_source=…) gelten als derselbe Link.Erstbefüllung
lassen sich in einem Rutsch über „Datei“ bzw. „Foto“ auswählen und laufen
über die Warteschlange.
Nicht in dieser Stufe
Papierkorb, Foto beim anderen ergänzen)
Offene Fragen
Zeitgrenze für den Abbruch (AK-19)– entschieden 08.10.2026:5 Minuten, vorher ein automatischer zweiter Versuch.
iOS-Kurzbefehl (AK-8)– entschieden 08.10.2026: In MVP-1 nurKopieren und Einfügen. Der fertige Kurzbefehl zum Antippen kommt in MVP-2
als eigenes Issue (#17).
Alle offenen Fragen sind geklärt; das Issue ist bereit zum Bau.
Entscheidung 08.10.2026 zu offener Frage 1 (Zeitgrenze): 5 Minuten ab Beginn der eigentlichen Verarbeitung, vorher ein automatischer zweiter Versuch; danach „nicht erkannt: Verarbeitung abgebrochen“ mit „Erneut versuchen“. AK-19 entsprechend angepasst.
Entscheidung 08.10.2026 zu offener Frage 2: In MVP-1 auf dem iPhone nur Kopieren und Einfügen (AK-8 angepasst). Der fertige Kurzbefehl kommt in MVP-2 als #17. Damit sind alle offenen Fragen geklärt; Lena hat die Kriterien durchgesehen, status/entwurf entfernt - das Issue ist bereit zum Bau (Vorbedingung bleibt der Qualitätstest der KI für die KI-Teile).
Hinweis aus #2 (Session "Go [7041ff]", Sicherheitspruefung), bitte beim Bau beachten:
ReactUi/src/offline/offlineConfig.tseintragen und mitqueueCommand(inReactUi/src/api/api.ts) vormerken. Jede vorgemerkte Aenderung behaelt ihren Idempotency-Key, der Server fuehrt sie nur einmal aus.offlineDb.tsliefern schon Promises, ein Wechsel aendert die Aufrufer nicht).Claimed by session "Go [7041ff]"
Blockiert (Session "Go [7041ff]"): Frage an Lena zur Reihenfolge.
Laut CLAUDE.md und PRD Kapitel 08 steht vor dem Bau von Erfassung und Pruefansicht der Qualitaetstest der KI (echte Rezepte durch 1-2 OpenAI-Modelle; Kriterien: keine falsch gelesene Menge ohne Markierung, Foto in unter 1 Minute; Ergebnis: Modell pro Aufgabe). Fuer diesen Test gibt es noch kein Issue, und er braucht einen OpenAI-API-Schluessel.
Moeglichkeiten:
Empfehlung: B, und den KI-Test parallel vorbereiten, sobald ein API-Schluessel da ist. Der groesste Teil dieses Issues haengt nicht von der KI ab.
Claim bleibt bei dieser Session.
Entscheidung 08.10.2026 (Lena): Moeglichkeit B. Dieses Issue wird ohne KI-Schritte gebaut; diese stehen jetzt in #20, der Qualitaetstest der KI in #19 (beide Entwurf). Blockade aufgehoben, Claim bleibt bei Session "Go [7041ff]".
Entscheidung 08.10.2026 (Lena): Originale in der Datenbank; nach dem 4. Kochen werden alle Originale geloescht (Option A, kritische Durchsicht Punkt 25). AK-2 angepasst, das Loeschen selbst baut #21.
Entwurf (Architekt + Sicherheit, Session "Go [7041ff]"), Bau in Etappen.
Daten
Draft(Entwurf vor dem Strukturieren): Zustand (wartet / wird verarbeitet / bereit zur Pruefung / nicht erkannt / Merkzettel; "geprueft" kommt mit #5), Hinweistext, Titel, Quelle (Link roh und vereinheitlicht), erfasst von (MemberId), Zeitpunkte, Anzahl Versuche, Rezeptdaten von der Seite (schema.org/Recipe als JSON, fuer #5).DraftOriginal: Art (Text, Text-Kopie einer Seite, Foto, Datei), Reihenfolge, Text, Dateiname, Typ, Inhalt (bytea, in der Datenbank wie entschieden). Loeschen nach dem 4. Kochen: #21.DraftImage: Haupt-/Vorschaubild (von der Seite), verkleinert und neu kodiert. Kein Original, bleibt also nach dem 4. Kochen.Aktionen: CreateTextDraftCommand (Text mit Link -> Link + Text in einem Eintrag), CreateLinkDraftCommand, spaeter Foto/Datei; AddToDraftCommand (Nachreichen), RetryDraftProcessingCommand, GetDraftsQuery (mit Warteposition), GetDraftCountQuery (Zaehler), GetDraftOriginalsQuery (Original ansehen), FindDraftsByLinkQuery (gleicher Link).
Verarbeitung im Hintergrund: ein Hintergrunddienst arbeitet wartende Entwuerfe nacheinander ab (AK-16). Zeitgrenze als Einstellung
Capture__ProcessingTimeoutMinutes(5), ein automatischer zweiter Versuch, dann "nicht erkannt: Verarbeitung abgebrochen" mit "Erneut versuchen" (AK-19). Ohne KI: Link mit Rezeptdaten -> bereit zur Pruefung; Link ohne Rezeptdaten -> nicht erkannt mit Hinweis (AK-20; die KI liest den Seitentext erst mit #20); nur ein Titel -> Merkzettel (AK-23); sonstiger Text/Datei -> bereit zur Pruefung, wird in der Pruefansicht (#5) von Hand bzw. spaeter von der KI aufbereitet.Sicherheit
Gleicher Link (AK-24): Link wird vereinheitlicht (Host klein, ohne utm_*, fbclid, gclid, Anker, Schluss-Schraegstrich). Geprueft werden Entwuerfe; Kochbuch und Papierkorb kommen mit #5/#15 dazu.
Etappen: 1) Text + Link + Entwurfsliste + Zaehler + Original ansehen + Hintergrund + Upload-Warteschlange fuer Text/Link. 2) Fotos und Dateien (PDF/DOCX/ODT-Text ohne KI). 3) Nachreichen, mehrere Fotos, Galerie-Frage.
Zwischenstand (Session "Go [7041ff]"): Etappe 1 ist fertig und auf master.
Getestet: 119 Server-Tests, 51 Oberflaechen-Tests; von Hand im Test-Container mit einer echten Rezeptseite.
Offen: Etappe 2 (Fotos, Dateien PDF/DOCX/ODT) und Etappe 3 (Nachreichen, mehrere Fotos, Galerie-Frage). Fuer die Fotos fehlt noch Lenas Antwort, ob versteckte Foto-Angaben (Ort, Geraet) entfernt werden sollen.
Zwischenstand (Session "Go [7041ff]"): Etappe 2a ist fertig und auf master.
Offen: Fotos (wartet auf Lenas Entscheidung zu versteckten Foto-Angaben), Upload-Warteschlange fuer Fotos/Dateien ohne Verbindung (braucht IndexedDB), Nachreichen (AK-12), mehrere Fotos und Galerie-Frage (AK-9, AK-10).
Zwischenstand (Session "Go [7041ff]"): Nachreichen (AK-12) ist fertig und auf master.
Noch offen in diesem Issue: Fotos (AK-9, AK-10, Foto-Teil von AK-12/AK-18; wartet auf Lenas Entscheidung zu versteckten Foto-Angaben) und die Upload-Warteschlange fuer Dateien/Fotos ohne Verbindung (IndexedDB).
Zwischenstand (Session "Go [7041ff]"): Fotos sind fertig und auf master (Etappe 2b).
Letzter offener Teil dieses Issues: Upload-Warteschlange ohne Verbindung fuer Fotos und Dateien (AK-18, braucht Speicher im Browser per IndexedDB). Die KI-Schritte stehen in #20.
Fertig (Session "Go [7041ff]"). Gebaut ohne KI (Entscheidung Lena 08.10.2026); die KI-Schritte stehen in #20, der Qualitaetstest in #19.
Was gebaut wurde
Wie getestet
Wichtige Entscheidungen
So probierst du es aus (Test-Container: http://localhost:8090, Passwort kochbuch-test)
Bekannte Luecken