10 KiB
Wiederverwendbarer ChatGPT-Prompt
Kopiere den gesamten Text unterhalb der Trennlinie in ChatGPT und ersetze Mein Wunsch. Der Prompt enthält eine vollständige Formatvorlage und funktioniert auch ohne Anhänge. Für zusätzliche Orientierung kannst du public/examples/hamham.schema.json und public/examples/pljeskavica.json beifügen.
Erstelle ein kulinarisch plausibles, vollständig nachkochbares Rezept für meine selbst gehostete Rezept-App HamHam.
Mein Wunsch: [z. B. Serbische Pljeskavica für 4 Personen]
Antworte ausschließlich mit einem vollständigen JSON-Objekt, ohne Markdown-Codeblock, Einleitung oder Begleittext. Die Ausgabe soll direkt als UTF-8-Datei mit Endung .json in HamHam importierbar sein. Verwende das unten definierte HamHam-Format, kein Schema.org-/Recipe-Format und keine selbst erfundenen Feldnamen. Falls das HamHam-JSON-Schema beigefügt ist, halte dich auch daran.
Verbindliche Struktur und Datentypen
- Die oberste Ebene enthält nur
"version": 1und"recipes": [...]. Erstelle genau ein Rezept, sofern ich nicht ausdrücklich mehrere wünsche. Keinformat,schemaVersionoder zusätzlichesrecipe-Objekt. - Jedes Rezept enthält alle in der Vorlage gezeigten Felder. Rezept-
id,createdAtundupdatedAtweglassen; die App erzeugt sie. Zutaten, Schritte und Timer benötigen dagegen jeweils eine eigeneid. title,subtitle,descriptionundcuisinesind Texte.categoriesundtagssind Listen von Texten. Herkunft bei Bedarf incuisineoderdescriptionangeben, nicht in einem zusätzlichencountry-Feld.difficultyist exakt einer dieser Texte:"Einfach","Mittel","Anspruchsvoll". Keine englischen Werte wie"easy","medium"oder"hard".prepMinutes,cookMinutesundrestMinutessind ganze JSON-Zahlen zwischen 0 und 10080, jeweils in Minuten.servingsist eine positive JSON-Zahl, höchstens 10000. Keine Zahlen als Strings und keine Zeitangaben wie"12 Stunden"in diesen Feldern.- Jede Zutat enthält exakt
id,name,amount,unit,section,note,optional:amount: positive JSON-Zahl bis 1000000 odernull; Dezimalpunkt statt Dezimalkomma. Keine Bruchstrings und keine Einheit im Mengenfeld.unit: ausschließlich"g","kg","ml","l","Stück","TL","EL","Prise","Bund"oder"".section: Text für den Abschnitt, etwa"Für die Sauce", sonst"".note: Text für einen Hinweis, sonst"".optional: JSON-Booleantrueoderfalse, kein Text.- „Nach Geschmack“ als
"amount": null, "unit": "", "note": "nach Geschmack". - Niemals
quantitystattamountodergroupstattsectionverwenden. Diese Felder werden nicht als Mengen bzw. Abschnitte übernommen.
- Jeder Schritt enthält exakt
id,title,text,ingredients,images,timers:textenthält die vollständige Anleitung, niemalsdescriptionauf Schrittebene.ingredientsist eine Liste vorhandener Zutaten-IDs, etwa["fleisch", "salz"], sonst[]. NichtingredientIdsverwenden und hier keine Zutatenobjekte einsetzen.- Die Reihenfolge ergibt sich aus der Position im
steps-Array. Keinorder-Feld. timersist eine Liste von Timerobjekten oder[].imagesist eine Liste von bis zu 10 Bildadressen für genau diesen Schritt, sonst[].- Gliedere
textin kurze Absätze mit\n\n. Bei mehreren Teilaufgaben verwende eine eigene Zeile pro Aufgabe mit-oder1.,2.usw. Schreibe keinen langen Textblock. Kein HTML oder Markdown für Überschriften, Fettdruck oder eingebettete Bilder; Bilder gehören inimages.
- Jeder Timer enthält exakt
id,label,seconds.secondsist eine ganze JSON-Zahl von 1 bis 172800 in Sekunden, etwa{"id":"timer_ruhen","label":"Ruhen lassen","seconds":600}. Dieiddarf auch bei nur einem Timer nicht fehlen. - IDs für Zutaten, Schritte und Timer bestehen aus 1–80 Zeichen: ausschließlich
a–z,A–Z,0–9,_und-. Keine Leerzeichen oder Umlaute. Verwende eindeutige lesbare IDs, beispielsweisez_fleisch,s_mischen,t_ruhen; wiederhole keine ID innerhalb eines Rezepts. tipsundstoragesind jeweils ein einzelner Text, niemals Listen oder Objekte. Mehrere Hinweise durch\n\ninnerhalb des JSON-Strings trennen. Verwendestorage, niemalsstorageNotes.- Bilder sind über lokale HamHam-Pfade (
/media/<uuid>.webp, mitgelieferte/images/<name>.jpg|webp|svg) oder vollständige HTTPS-Bildadressen möglich (höchstens 2048 Zeichen, ohne Zugangsdaten in der URL).imageist das Titelbild,imagesauf Rezeptebene die Galerie (bis zu 20 Bilder),imagesinnerhalb eines Schritts dessen Bilder (bis zu 10). Verwende nur von mir bereitgestellte oder tatsächlich überprüfte direkte Bildadressen, keine Webseiten-Links oder erfundenen URLs. Keinehttp:,data:- oder Base64-Bilder. Ohne geeignete Bilder setze"image": ""und alle"images": []. Setze"published": false. - Setze
"nutrition": null, sofern keine verlässlichen Nährwerte pro Portion verfügbar sind. Andernfalls exakt{"kcal": 0, "protein": 0, "carbs": 0, "fat": 0}mit den tatsächlichen nicht negativen Zahlen ausfüllen; Makronährstoffe in Gramm. Keine scheinpräzisen Werte erfinden.
Inhalt und Grenzen
- Deutsch, bevorzugt in Österreich übliche Zutatenbezeichnungen. Konkrete, sichere und nachvollziehbare Zubereitung.
- Zutatenmengen in Schrittanleitungen ausschließlich mit
{{zutaten_id}}referenzieren:"{{z_fleisch}} in Würfel schneiden.". Die App ersetzt die Referenz mit Menge, Einheit, Zutatenname und Hinweis. Nicht nochmals den Namen oder die Menge dahinter schreiben. Jede Referenz muss zu einer vorhandenen Zutaten-ID gehören. Zeiten und Temperaturen als normalen Text schreiben. - Für Warte-, Gar- und Ruhezeiten passende Timer angeben. Minutenfelder und Timer-Sekunden korrekt umrechnen, etwa 12 Stunden = 720 Minuten = 43200 Sekunden. Die Gesamtzeit ergibt sich aus Vorbereitung, Garzeit und Ruhezeit; dieselbe Zeit nicht doppelt zählen.
- Mindestens eine Zutat und ein Schritt pro Rezept. Höchstens 200 Zutaten, 100 Schritte, 100 Zutatenreferenzen pro Schritt und 10 Timer pro Schritt. Höchstens 100 Rezepte pro Datei.
- Textlängen: Titel 2–180 Zeichen, Untertitel höchstens 200, Beschreibung 4000, Küche 80, Zutatenname 1–160, Abschnitt 80, Zutatenhinweis 200, Schritttitel 160, Schrittanleitung 1–6000, Timerbeschriftung 1–100, Tipps 6000, Aufbewahrung 3000. Höchstens 20 Kategorien und 30 Tags mit jeweils 1–60 Zeichen.
- Kein HTML, keine Kommentare, keine zusätzlichen Felder, keine Auslassungszeichen oder Platzhalter in der Ausgabe. JSON mit doppelten Anführungszeichen, korrekt maskierten Anführungszeichen innerhalb von Texten und ohne abschließende Kommas.
Vollständige Formatvorlage
Dieses kleine Beispiel zeigt die verbindliche Struktur. Ersetze den Inhalt vollständig durch das gewünschte Rezept und ergänze so viele Zutaten, Schritte und Timer wie nötig. Die Codeblock-Markierung gehört nur zu dieser Erklärung; deine Antwort enthält ausschließlich das JSON-Objekt.
{
"version": 1,
"recipes": [
{
"title": "Einfacher Gurkensalat",
"subtitle": "Frisch und leicht mit Essig",
"description": "Ein schneller Gurkensalat als Beilage.",
"image": "",
"images": [],
"categories": ["Beilage"],
"tags": ["Vegetarisch"],
"cuisine": "Österreich",
"difficulty": "Einfach",
"prepMinutes": 10,
"cookMinutes": 0,
"restMinutes": 10,
"servings": 2,
"ingredients": [
{
"id": "z_gurke",
"name": "Salatgurke",
"amount": 1,
"unit": "Stück",
"section": "Salat",
"note": "",
"optional": false
},
{
"id": "z_essig",
"name": "Apfelessig",
"amount": 1.5,
"unit": "EL",
"section": "Marinade",
"note": "",
"optional": false
},
{
"id": "z_salz",
"name": "Salz",
"amount": null,
"unit": "",
"section": "Marinade",
"note": "nach Geschmack",
"optional": false
}
],
"steps": [
{
"id": "s_schneiden",
"title": "Gurke vorbereiten",
"text": "{{z_gurke}} waschen, die Enden entfernen und die Gurke fein hobeln.",
"ingredients": ["z_gurke"],
"images": [],
"timers": []
},
{
"id": "s_marinieren",
"title": "Marinieren und ziehen lassen",
"text": "- Die Gurkenscheiben mit {{z_essig}} und {{z_salz}} vermengen.\n- Im Kühlschrank 10 Minuten ziehen lassen.\n- Danach nochmals abschmecken und servieren.",
"ingredients": ["z_essig", "z_salz"],
"images": [],
"timers": [
{
"id": "t_ziehen",
"label": "Salat ziehen lassen",
"seconds": 600
}
]
}
],
"tips": "Für dünne Scheiben einen Gemüsehobel verwenden.\n\nDen Essig nach persönlichem Geschmack dosieren.",
"storage": "Abgedeckt im Kühlschrank aufbewahren und innerhalb eines Tages verbrauchen.",
"nutrition": null,
"published": false
}
]
}
Stille Abschlussprüfung vor deiner Antwort
Prüfe und korrigiere die Ausgabe vor dem Antworten. Gib diese Prüfliste nicht mit aus:
- Oberste Ebene nur
versionundrecipes;versionist die Zahl1. - Alle Felder entsprechen der Vorlage und haben den richtigen Datentyp.
difficultyistEinfach,MitteloderAnspruchsvoll.- Zutaten verwenden
amountundsection; Schritte verwendentextundingredients. - Jede Zutat, jeder Schritt und jeder Timer hat eine gültige, eindeutige
id. Alle Zutatenreferenzen existieren. tipsundstoragesind Texte;quantity,group,ingredientIds,order,storageNotes,country,formatundschemaVersionkommen als Feldnamen nicht vor.- Mengenverhältnisse, Portionszahl, Zeiten und Timer sind plausibel; alle Grenzen sind eingehalten.
- Schrittanleitungen sind in kurze Absätze oder Listen gegliedert. Bildfelder enthalten nur geeignete lokale Pfade oder HTTPS-Bildadressen, sonst bleiben sie leer.
- Die gesamte Antwort ist syntaktisch gültiges JSON und enthält keinen Begleittext.