Rezepte erfassen #4

Closed
opened 2026-10-07 22:22:35 +02:00 by lena · 13 comments
Collaborator

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

  • AK-1: Das Original wird gespeichert, bevor die KI anfängt. Prüfung:
    KI abschalten, ein Foto erfassen → das Foto liegt bei den Entwürfen.
  • AK-2: Das Original wird in der Datenbank gespeichert und bleibt am Rezept,
    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.)
  • AK-3: Bei einem Link wird zusätzlich eine Text-Kopie des Rezeptinhalts
    der Seite (ohne Bilder) gespeichert.
  • AK-4: Jede Eingabe erscheint sofort in der Entwurfsliste, mit einem der
    Zustände: „wartet auf Upload“, „wartet (Platz n)“, „wird verarbeitet“,
    „bereit zur Prüfung (n markierte Stellen)“, „geprüft, zum Ausprobieren“,
    „nicht erkannt“.
  • AK-5: Ein Zähler an den Entwürfen zeigt, wie viele Einträge auf eine
    Prüfung warten.

Eingabekanäle

  • AK-6 Text: Freier Text ohne Formatierung wird angenommen
    (z. B. „500 g Nudeln, 2 Zwiebeln, Sahne, Parmesan“). Enthält der Text einen
    Link, werden Link und Text als ein Eintrag behandelt.
  • AK-7 Link: Hat die Seite strukturierte Rezeptdaten, werden diese
    ohne KI gelesen. Sonst liest die KI den Seitentext (dieser Teil: #20). Gerichtsbilder der
    Seite werden als Haupt- und Vorschaubild übernommen.
  • AK-8 Link teilen: Auf Android kann ein Link über „Teilen“ direkt an die
    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“).
  • AK-9 Foto: Fotos können mit der Kamera aufgenommen oder aus der Galerie
    gewählt werden. Mit „+ weiteres Foto zu diesem Rezept“ entsteht ein Eintrag
    aus mehreren Fotos; die Reihenfolge ist änderbar.
  • AK-10 Galerie, mehrere Bilder: Werden mehrere Bilder auf einmal gewählt,
    fragt die App einmal „Ein Rezept“ oder „Jedes Foto ein eigenes Rezept“.
  • AK-11 Datei: PDF, DOCX und ODT werden angenommen, auch mehrere auf
    einmal. Der Text wird ohne KI aus der Datei gelesen. Prüfung mit allen
    Dateien aus „erste Rezepte/“.
  • AK-12 Nachreichen: Zu einem bestehenden Entwurf können weitere Fotos,
    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

  • AK-15: Nach dem Hochladen kann sofort weitergearbeitet werden; die App
    wartet nicht auf die KI.
  • AK-16: Mehrere Eingaben werden nacheinander verarbeitet; die
    Warteposition ist sichtbar.
  • AK-17 (nach #20 verschoben): Ein Rezeptfoto ist in unter 1 Minute verarbeitet (bei normaler
    Verbindung, gemessen mit den Testrezepten).
  • AK-18 Upload-Warteschlange: Ohne Verbindung bleibt eine Eingabe auf dem
    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.
  • AK-19 Abbruch (entschieden 08.10.2026): Die Zeitgrenze beträgt
    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

  • AK-20: Ein Link ohne Rezept (Login-Wand, Paywall, nicht erreichbar,
    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.
  • AK-21 (Erkennen durch die KI: #20): Ein unlesbares Foto wird „nicht erkannt“; das Foto bleibt, der
    Text kann abgetippt oder später neu verarbeitet werden.
  • AK-22 Mehrere Rezepte (Erkennen durch die KI: #20): Erkennt die App mehrere Rezepte in einer Quelle,
    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.
  • AK-23 Nur ein Titel: Eine Eingabe wie „Omas Gulasch, wie immer“ bleibt
    als Merkzettel bei den Entwürfen.
  • AK-24 Gleicher Link: Wird ein Link erfasst, der schon im Kochbuch, bei
    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

  • AK-25: Die ca. 30 Rezepte aus Lenas Sammlung (PDF, DOCX, ODT, Fotos)
    lassen sich in einem Rutsch über „Datei“ bzw. „Foto“ auswählen und laufen
    über die Warteschlange.

Nicht in dieser Stufe

  • Spracheingabe, Messenger-Import (Später)
  • fertiger iOS-Kurzbefehl zum Teilen von Links (MVP-2, #17)
  • Auswerten von Rezepten, die nur im Video stehen
  • Zusammenführen getrennt erfasster Entwürfe (stattdessen einen in den
    Papierkorb, Foto beim anderen ergänzen)
  • Push-Mitteilungen
  • Massenimport

Offene Fragen

  1. Zeitgrenze für den Abbruch (AK-19) – entschieden 08.10.2026:
    5 Minuten, vorher ein automatischer zweiter Versuch.
  2. iOS-Kurzbefehl (AK-8) – entschieden 08.10.2026: In MVP-1 nur
    Kopieren 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.

## 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 - **AK-1:** Das Original wird gespeichert, **bevor** die KI anfängt. Prüfung: KI abschalten, ein Foto erfassen → das Foto liegt bei den Entwürfen. - **AK-2:** Das Original wird in der Datenbank gespeichert und bleibt am Rezept, 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.)* - **AK-3:** Bei einem Link wird zusätzlich eine Text-Kopie des Rezeptinhalts der Seite (ohne Bilder) gespeichert. - **AK-4:** Jede Eingabe erscheint sofort in der Entwurfsliste, mit einem der Zustände: „wartet auf Upload“, „wartet (Platz n)“, „wird verarbeitet“, „bereit zur Prüfung (n markierte Stellen)“, „geprüft, zum Ausprobieren“, „nicht erkannt“. - **AK-5:** Ein Zähler an den Entwürfen zeigt, wie viele Einträge auf eine Prüfung warten. ### Eingabekanäle - **AK-6 Text:** Freier Text ohne Formatierung wird angenommen (z. B. „500 g Nudeln, 2 Zwiebeln, Sahne, Parmesan“). Enthält der Text einen Link, werden Link und Text als ein Eintrag behandelt. - **AK-7 Link:** Hat die Seite strukturierte Rezeptdaten, werden diese **ohne KI** gelesen. Sonst liest die KI den Seitentext *(dieser Teil: #20)*. Gerichtsbilder der Seite werden als Haupt- und Vorschaubild übernommen. - **AK-8 Link teilen:** Auf Android kann ein Link über „Teilen“ direkt an die 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“). - **AK-9 Foto:** Fotos können mit der Kamera aufgenommen oder aus der Galerie gewählt werden. Mit „+ weiteres Foto zu diesem Rezept“ entsteht ein Eintrag aus mehreren Fotos; die Reihenfolge ist änderbar. - **AK-10 Galerie, mehrere Bilder:** Werden mehrere Bilder auf einmal gewählt, fragt die App einmal „Ein Rezept“ oder „Jedes Foto ein eigenes Rezept“. - **AK-11 Datei:** PDF, DOCX und ODT werden angenommen, auch mehrere auf einmal. Der Text wird **ohne KI** aus der Datei gelesen. Prüfung mit allen Dateien aus „erste Rezepte/“. - **AK-12 Nachreichen:** Zu einem bestehenden Entwurf können weitere Fotos, 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 - **AK-15:** Nach dem Hochladen kann sofort weitergearbeitet werden; die App wartet nicht auf die KI. - **AK-16:** Mehrere Eingaben werden nacheinander verarbeitet; die Warteposition ist sichtbar. - ~~**AK-17**~~ *(nach #20 verschoben)*: Ein Rezeptfoto ist in unter 1 Minute verarbeitet (bei normaler Verbindung, gemessen mit den Testrezepten). - **AK-18 Upload-Warteschlange:** Ohne Verbindung bleibt eine Eingabe auf dem 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. - **AK-19 Abbruch** (entschieden 08.10.2026): Die Zeitgrenze beträgt **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 - **AK-20:** Ein Link ohne Rezept (Login-Wand, Paywall, nicht erreichbar, 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. - **AK-21** *(Erkennen durch die KI: #20)*: Ein unlesbares Foto wird „nicht erkannt“; das Foto bleibt, der Text kann abgetippt oder später neu verarbeitet werden. - **AK-22 Mehrere Rezepte** *(Erkennen durch die KI: #20)*: Erkennt die App mehrere Rezepte in einer Quelle, 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. - **AK-23 Nur ein Titel:** Eine Eingabe wie „Omas Gulasch, wie immer“ bleibt als **Merkzettel** bei den Entwürfen. - **AK-24 Gleicher Link:** Wird ein Link erfasst, der schon im Kochbuch, bei 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 - **AK-25:** Die ca. 30 Rezepte aus Lenas Sammlung (PDF, DOCX, ODT, Fotos) lassen sich in einem Rutsch über „Datei“ bzw. „Foto“ auswählen und laufen über die Warteschlange. ## Nicht in dieser Stufe - Spracheingabe, Messenger-Import (Später) - fertiger iOS-Kurzbefehl zum Teilen von Links (MVP-2, #17) - Auswerten von Rezepten, die nur im Video stehen - Zusammenführen getrennt erfasster Entwürfe (stattdessen einen in den Papierkorb, Foto beim anderen ergänzen) - Push-Mitteilungen - Massenimport ## Offene Fragen 1. ~~**Zeitgrenze für den Abbruch (AK-19)**~~ – entschieden 08.10.2026: 5 Minuten, vorher ein automatischer zweiter Versuch. 2. ~~**iOS-Kurzbefehl (AK-8)**~~ – entschieden 08.10.2026: In MVP-1 nur Kopieren 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.
Author
Collaborator

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 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.
Author
Collaborator

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).

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).
Author
Collaborator

Hinweis aus #2 (Session "Go [7041ff]", Sicherheitspruefung), bitte beim Bau beachten:

  • Die Upload-Warteschlange ist vorbereitet: Aktionen, die ohne Verbindung vorgemerkt werden duerfen, in ReactUi/src/offline/offlineConfig.ts eintragen und mit queueCommand (in ReactUi/src/api/api.ts) vormerken. Jede vorgemerkte Aenderung behaelt ihren Idempotency-Key, der Server fuehrt sie nur einmal aus.
  • Die Warteschlange liegt derzeit in localStorage und bleibt beim Abmelden erhalten. Bevor dort Rezeptinhalte landen, muss entschieden werden, was beim Abmelden und bei "nicht mehr angemeldet" (401) damit passiert: leeren, warnen oder behalten. Sonst koennten Eingaben einer Person nach dem Abmelden auf dem Geraet bleiben oder unter einem anderen Namen hochgeladen werden.
  • Fotos sind fuer localStorage zu gross; fuer die Upload-Warteschlange wird vermutlich IndexedDB noetig (die Funktionen in offlineDb.ts liefern schon Promises, ein Wechsel aendert die Aufrufer nicht).
Hinweis aus #2 (Session "Go [7041ff]", Sicherheitspruefung), bitte beim Bau beachten: - Die Upload-Warteschlange ist vorbereitet: Aktionen, die ohne Verbindung vorgemerkt werden duerfen, in `ReactUi/src/offline/offlineConfig.ts` eintragen und mit `queueCommand` (in `ReactUi/src/api/api.ts`) vormerken. Jede vorgemerkte Aenderung behaelt ihren Idempotency-Key, der Server fuehrt sie nur einmal aus. - Die Warteschlange liegt derzeit in localStorage und bleibt beim Abmelden erhalten. Bevor dort Rezeptinhalte landen, muss entschieden werden, was beim Abmelden und bei "nicht mehr angemeldet" (401) damit passiert: leeren, warnen oder behalten. Sonst koennten Eingaben einer Person nach dem Abmelden auf dem Geraet bleiben oder unter einem anderen Namen hochgeladen werden. - Fotos sind fuer localStorage zu gross; fuer die Upload-Warteschlange wird vermutlich IndexedDB noetig (die Funktionen in `offlineDb.ts` liefern schon Promises, ein Wechsel aendert die Aufrufer nicht).
lena self-assigned this 2026-10-08 11:04:38 +02:00
Author
Collaborator

Claimed by session "Go [7041ff]"

Claimed by session "Go [7041ff]"
Author
Collaborator

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:

  • A: Zuerst den KI-Qualitaetstest als eigenes Issue, danach dieses Issue. Braucht einen API-Schluessel und die Pruefung, dass der Server ins Internet kommt.
  • B: Dieses Issue jetzt ohne die KI-Schritte bauen: Original speichern, Entwuerfe mit Zustaenden, alle Eingabekanaele, Text aus PDF/DOCX/ODT ohne KI, Links mit strukturierten Rezeptdaten ohne KI, Upload-Warteschlange, Verarbeitung im Hintergrund mit Zeitgrenze. Die KI-Schritte (Foto lesen, Seitentext ohne Rezeptdaten, Sofort-Pruefung bei Fotos, AK-13/14/17 und Teile von AK-7) kommen hinter eine austauschbare Schnittstelle und werden nach dem Test angeschlossen. Das Issue bliebe dann offen, bis die KI-Teile da sind, oder sie wandern in ein eigenes Issue.

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.

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: - A: Zuerst den KI-Qualitaetstest als eigenes Issue, danach dieses Issue. Braucht einen API-Schluessel und die Pruefung, dass der Server ins Internet kommt. - B: Dieses Issue jetzt ohne die KI-Schritte bauen: Original speichern, Entwuerfe mit Zustaenden, alle Eingabekanaele, Text aus PDF/DOCX/ODT ohne KI, Links mit strukturierten Rezeptdaten ohne KI, Upload-Warteschlange, Verarbeitung im Hintergrund mit Zeitgrenze. Die KI-Schritte (Foto lesen, Seitentext ohne Rezeptdaten, Sofort-Pruefung bei Fotos, AK-13/14/17 und Teile von AK-7) kommen hinter eine austauschbare Schnittstelle und werden nach dem Test angeschlossen. Das Issue bliebe dann offen, bis die KI-Teile da sind, oder sie wandern in ein eigenes Issue. 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.
Author
Collaborator

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): 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]".
Author
Collaborator

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.

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.
Author
Collaborator

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

  • Abruf fremder Seiten (SSRF-Schutz): nur http/https, Ports 80/443, jede Ziel-IP wird beim Verbindungsaufbau geprueft (keine internen, lokalen oder privaten Adressen, auch nicht nach Weiterleitung oder DNS-Wechsel), hoechstens 3 Weiterleitungen, 10 s, 3 MB Seite, 10 MB Bild.
  • Bilder von der Seite werden mit ImageSharp (wie Checkly) geprueft, verkleinert und neu kodiert.
  • Textlaengen begrenzt (Text 50.000 Zeichen, Link 2.000).

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.

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** - Abruf fremder Seiten (SSRF-Schutz): nur http/https, Ports 80/443, jede Ziel-IP wird beim Verbindungsaufbau geprueft (keine internen, lokalen oder privaten Adressen, auch nicht nach Weiterleitung oder DNS-Wechsel), hoechstens 3 Weiterleitungen, 10 s, 3 MB Seite, 10 MB Bild. - Bilder von der Seite werden mit ImageSharp (wie Checkly) geprueft, verkleinert und neu kodiert. - Textlaengen begrenzt (Text 50.000 Zeichen, Link 2.000). **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.
Author
Collaborator

Zwischenstand (Session "Go [7041ff]"): Etappe 1 ist fertig und auf master.

  • Text und Link erfassen, Text mit Link als ein Eintrag (AK-6, AK-7 ohne KI-Teil, AK-8)
  • Original sofort gespeichert, Text-Kopie der Seite, Original ansehen (AK-1 bis AK-3)
  • Entwurfsliste mit Zustaenden, Warteposition, Zaehler (AK-4, AK-5, AK-16)
  • Verarbeitung im Hintergrund mit Zeitgrenze und zweitem Versuch, Erneut versuchen (AK-15, AK-19)
  • Seite ohne Rezeptdaten mit Hinweis, Merkzettel, gleicher Link (AK-20, AK-23, AK-24 fuer Entwuerfe)
  • Upload-Warteschlange fuer Text und Link ohne Verbindung (AK-18 fuer Text/Link)
  • Gerichtsbild von der Seite als Haupt- und Vorschaubild

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 1 ist fertig und auf master. - Text und Link erfassen, Text mit Link als ein Eintrag (AK-6, AK-7 ohne KI-Teil, AK-8) - Original sofort gespeichert, Text-Kopie der Seite, Original ansehen (AK-1 bis AK-3) - Entwurfsliste mit Zustaenden, Warteposition, Zaehler (AK-4, AK-5, AK-16) - Verarbeitung im Hintergrund mit Zeitgrenze und zweitem Versuch, Erneut versuchen (AK-15, AK-19) - Seite ohne Rezeptdaten mit Hinweis, Merkzettel, gleicher Link (AK-20, AK-23, AK-24 fuer Entwuerfe) - Upload-Warteschlange fuer Text und Link ohne Verbindung (AK-18 fuer Text/Link) - Gerichtsbild von der Seite als Haupt- und Vorschaubild 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.
Author
Collaborator

Zwischenstand (Session "Go [7041ff]"): Etappe 2a ist fertig und auf master.

  • Dateien PDF, DOCX, ODT, auch mehrere auf einmal (AK-11, AK-25 fuer Dateien); Text ohne KI gelesen, Tabellenzeilen (Menge | Zutat) zusammengesetzt
  • Datei bleibt Original und kann geoeffnet werden (AK-2)
  • Datei ohne Text oder kaputte Datei: nicht erkannt mit Hinweis
  • Geprueft mit allen Dateien aus erste Rezepte/ (automatisch und im Test-Container)
  • Behoben auf Lenas Meldung: zerteilte Schritte bei einfachkochen.de gingen verloren

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]"): Etappe 2a ist fertig und auf master. - Dateien PDF, DOCX, ODT, auch mehrere auf einmal (AK-11, AK-25 fuer Dateien); Text ohne KI gelesen, Tabellenzeilen (Menge | Zutat) zusammengesetzt - Datei bleibt Original und kann geoeffnet werden (AK-2) - Datei ohne Text oder kaputte Datei: nicht erkannt mit Hinweis - Geprueft mit allen Dateien aus erste Rezepte/ (automatisch und im Test-Container) - Behoben auf Lenas Meldung: zerteilte Schritte bei einfachkochen.de gingen verloren 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).
Author
Collaborator

Zwischenstand (Session "Go [7041ff]"): Nachreichen (AK-12) ist fertig und auf master.

  • Zu jedem Entwurf koennen Text oder eine Datei hinzugefuegt werden; danach wird er mit allem zusammen neu verarbeitet.
  • Link ohne Rezeptdaten oder nicht erreichbar + nachgereichter Text -> bereit zur Pruefung, Link bleibt Quelle (AK-20).
  • Merkzettel + nachgereichtes Rezept -> bereit zur Pruefung.
  • 161 Server-Tests, 58 Oberflaechen-Tests gruen.

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]"): Nachreichen (AK-12) ist fertig und auf master. - Zu jedem Entwurf koennen Text oder eine Datei hinzugefuegt werden; danach wird er mit allem zusammen neu verarbeitet. - Link ohne Rezeptdaten oder nicht erreichbar + nachgereichter Text -> bereit zur Pruefung, Link bleibt Quelle (AK-20). - Merkzettel + nachgereichtes Rezept -> bereit zur Pruefung. - 161 Server-Tests, 58 Oberflaechen-Tests gruen. 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).
Author
Collaborator

Zwischenstand (Session "Go [7041ff]"): Fotos sind fertig und auf master (Etappe 2b).

  • Foto aufnehmen oder aus der Galerie, mehrere Fotos zu einem Rezept, Reihenfolge aenderbar (AK-9)
  • Galerie mit mehreren Bildern: Frage "Ein Rezept" / "Jedes Foto ein eigenes Rezept" (AK-10)
  • Foto nachreichen (AK-12), Foto beim Original ansehen (AK-2)
  • Versteckte Foto-Angaben werden entfernt, volle Groesse bleibt (Entscheidung Lena, kritische Durchsicht Punkt 26); geprueft mit dem echten Foto aus erste Rezepte/
  • Ohne KI: Foto bleibt mit Hinweis bei den Entwuerfen (AK-1); mit eingetipptem Text bereit zur Pruefung
  • 169 Server-Tests, 63 Oberflaechen-Tests gruen

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.

Zwischenstand (Session "Go [7041ff]"): Fotos sind fertig und auf master (Etappe 2b). - Foto aufnehmen oder aus der Galerie, mehrere Fotos zu einem Rezept, Reihenfolge aenderbar (AK-9) - Galerie mit mehreren Bildern: Frage "Ein Rezept" / "Jedes Foto ein eigenes Rezept" (AK-10) - Foto nachreichen (AK-12), Foto beim Original ansehen (AK-2) - Versteckte Foto-Angaben werden entfernt, volle Groesse bleibt (Entscheidung Lena, kritische Durchsicht Punkt 26); geprueft mit dem echten Foto aus erste Rezepte/ - Ohne KI: Foto bleibt mit Hinweis bei den Entwuerfen (AK-1); mit eingetipptem Text bereit zur Pruefung - 169 Server-Tests, 63 Oberflaechen-Tests gruen 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.
Author
Collaborator

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

  • Rezept erfassen mit vier Wegen:
    • Link (mit Knopf "Einfuegen", Android "Teilen")
    • Text
    • Foto (aufnehmen oder aus der Galerie, mehrere Fotos zu einem Rezept, Reihenfolge aenderbar, Frage "Ein Rezept / Jedes Foto ein eigenes Rezept")
    • Datei (PDF, Word, LibreOffice, auch mehrere auf einmal)
  • Original zuerst: Das Original wird gespeichert, bevor irgendetwas verarbeitet wird, und ist ueber "Original ansehen" erreichbar (Text-Kopie der Seite, Foto, Datei zum Oeffnen). Versteckte Foto-Angaben (Ort, Geraet) werden entfernt.
  • Ohne KI gelesen: Rezeptdaten von Rezeptseiten (Titel, Zutaten, Schritte, Gerichtsbild) und der Text aus PDF/DOCX/ODT.
  • Entwurfsliste mit Zustaenden, Warteposition und Zaehler in der Kopfzeile. Die Verarbeitung laeuft im Hintergrund nacheinander, mit 5 Minuten Zeitgrenze, einem automatischen zweiten Versuch und "Erneut versuchen".
  • Sonderfaelle: Link ohne Rezept oder nicht erreichbar -> "nicht erkannt" mit Hinweis; nur ein Titel -> Merkzettel; gleicher Link -> Hinweis mit "Oeffnen" / "Trotzdem neu anlegen". Fotos ohne KI bleiben mit Hinweis bei den Entwuerfen.
  • Nachreichen: Text, Foto oder Datei zu einem Entwurf hinzufuegen.
  • Ohne Verbindung: Text, Links, Fotos und Dateien bleiben auf dem Geraet ("wartet auf Upload") und werden spaeter hochgeladen.

Wie getestet

  • 173 Server-Tests, 66 Oberflaechen-Tests, darunter alle Dateien und das Foto aus "erste Rezepte/".
  • Von Hand im Test-Container mit echten Rezeptseiten (BBC Good Food, einfachkochen.de) und Lenas Dateien.
  • Zwei Sicherheitspruefungen, alle Funde behoben: Abruf fremder Seiten ohne Zugriff aufs eigene Netz, keine langsamen Suchmuster, Grenzen gegen praeparierte Dateien und riesige Anfragen; ohne Anmeldung wird der Inhalt einer Anfrage gar nicht gelesen.

Wichtige Entscheidungen

  • Originale liegen in der Datenbank und werden nach dem 4. Kochen geloescht (#21).
  • Bilder mit SkiaSharp (ImageSharp kostet in der neuen Version Lizenzgebuehren), PDF mit PdfPig.
  • Die Upload-Warteschlange bleibt beim Abmelden auf dem Geraet.

So probierst du es aus (Test-Container: http://localhost:8090, Passwort kochbuch-test)

  1. "Rezept erfassen" -> Link zu einer Rezeptseite -> Speichern: Nach ein paar Sekunden steht der Entwurf mit Titel und Bild auf "bereit zur Pruefung".
  2. Unter "Datei" mehrere Dateien aus "erste Rezepte/" waehlen.
  3. Unter "Foto" zwei Bilder aus der Galerie -> "Ein Rezept" -> Reihenfolge tauschen -> Speichern.
  4. Einen Entwurf oeffnen -> "Original ansehen" und "Etwas hinzufuegen".

Bekannte Luecken

  • "Bereit zur Pruefung" fuehrt noch nirgendwohin (Pruefansicht #5).
  • Fotos und Seiten ohne Rezeptdaten liest erst die KI (#20).
  • Gleicher Link prueft nur Entwuerfe (Papierkorb: #22, Kochbuch: #5).
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** - **Rezept erfassen** mit vier Wegen: - Link (mit Knopf "Einfuegen", Android "Teilen") - Text - Foto (aufnehmen oder aus der Galerie, mehrere Fotos zu einem Rezept, Reihenfolge aenderbar, Frage "Ein Rezept / Jedes Foto ein eigenes Rezept") - Datei (PDF, Word, LibreOffice, auch mehrere auf einmal) - **Original zuerst:** Das Original wird gespeichert, bevor irgendetwas verarbeitet wird, und ist ueber "Original ansehen" erreichbar (Text-Kopie der Seite, Foto, Datei zum Oeffnen). Versteckte Foto-Angaben (Ort, Geraet) werden entfernt. - **Ohne KI gelesen:** Rezeptdaten von Rezeptseiten (Titel, Zutaten, Schritte, Gerichtsbild) und der Text aus PDF/DOCX/ODT. - **Entwurfsliste** mit Zustaenden, Warteposition und Zaehler in der Kopfzeile. Die Verarbeitung laeuft im Hintergrund nacheinander, mit 5 Minuten Zeitgrenze, einem automatischen zweiten Versuch und "Erneut versuchen". - **Sonderfaelle:** Link ohne Rezept oder nicht erreichbar -> "nicht erkannt" mit Hinweis; nur ein Titel -> Merkzettel; gleicher Link -> Hinweis mit "Oeffnen" / "Trotzdem neu anlegen". Fotos ohne KI bleiben mit Hinweis bei den Entwuerfen. - **Nachreichen:** Text, Foto oder Datei zu einem Entwurf hinzufuegen. - **Ohne Verbindung:** Text, Links, Fotos und Dateien bleiben auf dem Geraet ("wartet auf Upload") und werden spaeter hochgeladen. **Wie getestet** - 173 Server-Tests, 66 Oberflaechen-Tests, darunter alle Dateien und das Foto aus "erste Rezepte/". - Von Hand im Test-Container mit echten Rezeptseiten (BBC Good Food, einfachkochen.de) und Lenas Dateien. - Zwei Sicherheitspruefungen, alle Funde behoben: Abruf fremder Seiten ohne Zugriff aufs eigene Netz, keine langsamen Suchmuster, Grenzen gegen praeparierte Dateien und riesige Anfragen; ohne Anmeldung wird der Inhalt einer Anfrage gar nicht gelesen. **Wichtige Entscheidungen** - Originale liegen in der Datenbank und werden nach dem 4. Kochen geloescht (#21). - Bilder mit SkiaSharp (ImageSharp kostet in der neuen Version Lizenzgebuehren), PDF mit PdfPig. - Die Upload-Warteschlange bleibt beim Abmelden auf dem Geraet. **So probierst du es aus** (Test-Container: http://localhost:8090, Passwort kochbuch-test) 1. "Rezept erfassen" -> Link zu einer Rezeptseite -> Speichern: Nach ein paar Sekunden steht der Entwurf mit Titel und Bild auf "bereit zur Pruefung". 2. Unter "Datei" mehrere Dateien aus "erste Rezepte/" waehlen. 3. Unter "Foto" zwei Bilder aus der Galerie -> "Ein Rezept" -> Reihenfolge tauschen -> Speichern. 4. Einen Entwurf oeffnen -> "Original ansehen" und "Etwas hinzufuegen". **Bekannte Luecken** - "Bereit zur Pruefung" fuehrt noch nirgendwohin (Pruefansicht #5). - Fotos und Seiten ohne Rezeptdaten liest erst die KI (#20). - Gleicher Link prueft nur Entwuerfe (Papierkorb: #22, Kochbuch: #5).
lena 2026-10-08 19:48:16 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
robert/rezeptbuch#4
No description provided.