diff --git a/templates/Format/Baustein.md b/templates/Format/Baustein.md index 6b4b949..e033aa6 100644 --- a/templates/Format/Baustein.md +++ b/templates/Format/Baustein.md @@ -1,100 +1,109 @@ ``` -BAUSTEIN-CARD-STIL (HTML+CSS, in Browser anzeigbar) +BAUSTEIN CARD STYLE (HTML+CSS, viewable in a browser) -ZWECK -- Einzelner Baustein als kompakte Card-Darstellung -- Schnelles Nachschlagen einzelner Konzepte -- Card ist Teil einer größeren Baustein-Sammlung -- Nicht zum Lernen, sondern zum Wiedererkennen -- Pro Card genau 1 Baustein +PURPOSE +- Single building block ("Baustein") as a compact card +- Quick lookup of individual concepts +- The card is part of a larger collection of building blocks +- Not for learning, but for recognition +- Exactly 1 building block per card FORMAT -- HTML mit eingebettetem CSS -- Im Browser anzeigbar (kein PDF-Output) -- Card auf hellgrauem Hintergrund zentriert +- HTML with embedded CSS +- Viewable in a browser (no PDF output) +- Card centered on a light gray background - Max-width 1000px, padding 28px 36px -- Border-radius 12px, dezenter Schatten -- Page-Hintergrund #f0f0f5 +- Border-radius 12px, subtle shadow +- Page background #f0f0f5 -STRUKTUR — STRIKT NUR DIESE 4 ELEMENTE -1. Titel (h1, fett, ohne Label, ohne Logo) -2. Beschreibung (ein knapper Satz) -3. Zweck (kursiv, grau, ein knapper Satz) -4. Code-Beispiel (das eine relevanteste, mit Mini-Label oben) +STRUCTURE — STRICTLY ONLY THESE 4 ELEMENTS +1. Title (h1, bold, no label, no logo) +2. Description (one concise sentence) +3. Purpose (italic, gray, one concise sentence) +4. Code example (the single most relevant one, with a mini label on top) -KEIN Logo, KEIN "Baustein"-Label, KEIN Sprach-Tag, KEINE Sektion-Überschriften ("Beschreibung", "Zweck", "Relevante Beispiele"), KEINE Info-Blöcke, KEINE Warn/Tip/Note-Boxen, KEINE Meta-Informationen, KEINE Trennlinien zwischen Sektionen. +NO logo, NO "Baustein" label, NO language tag, NO section headings +("Beschreibung", "Zweck", "Relevante Beispiele"), NO info blocks, +NO warn/tip/note boxes, NO meta information, NO divider lines between +sections. -TYPOGRAFIE +TYPOGRAPHY - Body: -apple-system, "Segoe UI", sans-serif, 14px, line-height 1.5 -- Titel h1: 28px, font-weight 800, letter-spacing -0.5px, line-height 1.1 -- Beschreibung: 14px, line-height 1.55 -- Zweck: 14px, italic, color #5a6470 +- Title h1: 28px, font-weight 800, letter-spacing -0.5px, line-height 1.1 +- Description: 14px, line-height 1.55 +- Purpose: 14px, italic, color #5a6470 - Code: "SF Mono", Consolas, monospace, 12px, line-height 1.5 -- Code-Label: 10px, letter-spacing 1px +- Code label: 10px, letter-spacing 1px -FARBEN -- Card-Hintergrund: #ffffff -- Page-Hintergrund: #f0f0f5 +COLORS +- Card background: #ffffff +- Page background: #f0f0f5 - Text: #1a1a1a -- Muted (Zweck): #5a6470 -- Code-Hintergrund: #1e2a3a -- Code-Text: #e6e6e6 -- Syntax-Highlighting: +- Muted (purpose): #5a6470 +- Code background: #1e2a3a +- Code text: #e6e6e6 +- Syntax highlighting: - Keywords (.k): #ff79c6 (pink) - - Variablen (.v): #ffb86c (orange) - - Strings (.s): #f1c40f (gelb) - - Funktionen (.f): #50fa7b (grün) - - Typen (.t): #8be9fd (cyan) - - Kommentare (.c): #6b8aae italic -- Label-Farbe in Code: #8be9fd (cyan) + - Variables (.v): #ffb86c (orange) + - Strings (.s): #f1c40f (yellow) + - Functions (.f): #50fa7b (green) + - Types (.t): #8be9fd (cyan) + - Comments (.c): #6b8aae italic +- Label color in code: #8be9fd (cyan) -INHALTLICHE PRINZIPIEN -- Titel: GELÄUFIGSTER Kurzbegriff, max 1-2 Wörter, kein Präfix, keine Variante - - Gut: "Header", "Variable", "Klasse", "for-Schleife" - - Schlecht: "Überschriften h1–h6", "Variablen-Deklaration mit Typ" -- Beschreibung: WAS macht es mechanisch? 1 Satz, max 5 Wörter, abstrakt/technisch - - Gut: "Definiert eine Überschrift.", "Wiederholt einen Code-Block." - - Schlecht: "Sechs Ebenen von der wichtigsten bis zur untergeordneten Überschrift." -- Zweck: WANN brauche ich das? 1 Satz, max 5 Wörter, situativ/Problem-Trigger - - Gut: "Strukturiert die Seiteninhalte.", "Liste oder Bereich durchgehen." - - Schlecht: "Gliedert Inhalt in Hierarchie für Leser, SEO und Screenreader-Navigation." -- WICHTIG: Beschreibung und Zweck dürfen sich NICHT inhaltlich überschneiden - - Schlecht (tautologisch): Beschreibung "Wiederholt Code." / Zweck "Etwas mehrfach tun." - - Gut (distinkt): Beschreibung "Wiederholt einen Code-Block." / Zweck "Liste oder Bereich durchgehen." -- Beide Sätze: jedes überflüssige Wort raus, keine Aufzählungen, keine Komma-Listen -- Genau EIN Code-Beispiel: das relevanteste / häufigste / typischste -- Beispiel zeigt den Standard-Use-Case, nicht Edge-Cases -- Label über Beispiel: max 2-3 Wörter, einfach, beschreibend - - Gut: "Alle Header", "Zuweisung", "Grund-Regel" - - Schlecht: "Alle Ebenen h1–h6", "Variable mit Typ-Hint deklarieren" +CONTENT PRINCIPLES +- Title: the MOST COMMON short term, max 1-2 words, no prefix, no variant + - Good: "Header", "Variable", "Klasse", "for-Schleife" + - Bad: "Überschriften h1–h6", "Variablen-Deklaration mit Typ" +- Description: WHAT does it do mechanically? 1 sentence, max 5 words, + abstract/technical + - Good: "Definiert eine Überschrift.", "Wiederholt einen Code-Block." + - Bad: "Sechs Ebenen von der wichtigsten bis zur untergeordneten Überschrift." +- Purpose: WHEN do I need this? 1 sentence, max 5 words, + situational/problem trigger + - Good: "Strukturiert die Seiteninhalte.", "Liste oder Bereich durchgehen." + - Bad: "Gliedert Inhalt in Hierarchie für Leser, SEO und Screenreader-Navigation." +- IMPORTANT: description and purpose must NOT overlap in content + - Bad (tautological): description "Wiederholt Code." / purpose "Etwas mehrfach tun." + - Good (distinct): description "Wiederholt einen Code-Block." / purpose "Liste oder Bereich durchgehen." +- Both sentences: cut every superfluous word, no enumerations, no comma lists +- Exactly ONE code example: the most relevant / most common / most typical +- The example shows the standard use case, not edge cases +- Label above the example: max 2-3 words, simple, descriptive + - Good: "Alle Header", "Zuweisung", "Grund-Regel" + - Bad: "Alle Ebenen h1–h6", "Variable mit Typ-Hint deklarieren" -LAYOUT-DETAILS -- Header und Body keine separaten Sektionen, alles in einer Card -- Titel zuerst, darunter direkt Beschreibung, darunter Zweck (mit margin-bottom) -- Margin-bottom Titel: 14px -- Margin-bottom Beschreibung: 6px (eng zum Zweck) -- Margin-bottom Zweck: 22px (Abstand zu Code) -- Code-Block padding: 14px 16px, border-radius 8px +LAYOUT DETAILS +- Header and body are not separate sections, everything in one card +- Title first, directly below it the description, below that the purpose + (with margin-bottom) +- Margin-bottom title: 14px +- Margin-bottom description: 6px (close to the purpose) +- Margin-bottom purpose: 22px (distance to the code) +- Code block padding: 14px 16px, border-radius 8px -CODE-BEISPIEL -- GENAU EIN Beispiel pro Card -- Das relevanteste, typischste, häufigste — nicht Edge-Cases -- Sehr kurz: ideal 3-6 Zeilen, max 8 Zeilen -- Mit kurzem Label oben (2-4 Wörter) -- Syntax-Highlighting durch span-Klassen (.k, .v, .s, etc.) +CODE EXAMPLE +- EXACTLY ONE example per card +- The most relevant, most typical, most common one — not edge cases +- Very short: ideally 3-6 lines, max 8 lines +- With a short label on top (2-4 words) +- Syntax highlighting via span classes (.k, .v, .s, etc.) -HTML-ENTITIES IM CODE (PFLICHT bei HTML/XML/JSX/Vue/JSX-ähnlichem Code) -- Wenn das Code-Beispiel SELBST HTML, XML, JSX oder ähnliche Tag-Syntax zeigt, MÜSSEN spitze Klammern als HTML-Entities geschrieben werden: +HTML ENTITIES IN CODE (MANDATORY for HTML/XML/JSX/Vue/JSX-like code) +- If the code example ITSELF shows HTML, XML, JSX, or similar tag syntax, + angle brackets MUST be written as HTML entities: - `<` → `<` - `>` → `>` - `&` → `&` -- Grund: der Code wird via v-html im Browser gerendert. Rohe `
.
-- Escaping im Code: < > & als < > & (z. B. ->, =>, &&).
-- scrub() filtert beim Bauen personenbezogene Reste (Namen/Orte/Mails) heraus.
+BUILD ARCHITECTURE (structure-driven)
+- One source of truth: STRUCTURE in build.py = list of
+ (part kicker, title, description, [chapter titles]) — derived directly from
+ the inventory. Order, numbers, table of contents, and divider pages are
+ generated from it automatically.
+- Content in modules content_partN.py: CHAPTERS = { "chapter title": body_html }.
+ Write part by part — never the whole guide in one go. After each part:
+ count the H2 sections against that part's inventory items, add anything
+ missing immediately, only then start the next part.
+- build.py reports the total number of H2 sections at the end; it must match
+ the number of inventory items.
+- Highlight span classes in code:
+ c=comment, k=keyword, s=string/number, f=function,
+ t=type/class/constant, v=variable, a=attribute.
+ Inline code in prose: .
+- Escaping in code: < > & as < > & (e.g. ->, =>, &&).
+- scrub() filters out personal leftovers (names/places/emails) during build.
-VERMEIDEN
-- Feste Teile-/Kapitel-/Seitenzahlen als Ziel (der Umfang folgt aus dem
- Inventar, nicht umgekehrt).
-- Inventar-Punkte zusammenfassen oder weglassen.
-- Funktionsliste oder Definition in der Überschrift (Titel bleibt rein).
-- Übersichts-/Referenztabellen ohne Erklärtext.
-- Deutsche Code-Bezeichner.
-- Personenbezogene oder echte Daten.
-- Unvollständige aufzählbare Mengen.
-- Reine Interface-/Signatur-Stubs ohne Aufruf + Ausgabe.
-- Performance-Zahlen ohne Quelle.
-- Codeblock oder Callout über einen Seitenumbruch zerrissen
+AVOID
+- Fixed part/chapter/page counts as a target (scope follows from the
+ inventory, not the other way around).
+- Merging or dropping inventory items.
+- Function list or definition in the heading (the title stays pure).
+- Explanations longer than 3 sentences or with nested sentences.
+- Recommendations/warnings in running prose instead of in a callout.
+- Overview/reference tables without explanatory text.
+- German code identifiers.
+- Personal or real data.
+- Incomplete enumerable sets.
+- Pure interface/signature stubs without call + output.
+- Performance numbers without a source.
+- Code block or callout torn across a page break
(page-break-inside: avoid).
-GENERIERUNG & PRÜFUNG
-1. Inventar lesen, STRUCTURE daraus ableiten.
-2. python3 build.py → guide.html (meldet Kapitel/Teile + Sektionen)
+GENERATION & VERIFICATION
+1. Read the inventory, derive STRUCTURE from it.
+2. python3 build.py → guide.html (reports chapters/parts + sections)
3. weasyprint guide.html guide.pdf
-4. Verifizieren — die Sollwerte kommen aus dem Inventar:
- - grep -c 'toc-part' == Anzahl Teile in STRUCTURE
- - grep -c 'chapter-num' == Anzahl Kapitel in STRUCTURE
- - grep -c '' == 0
- - keine echten Namen/Orte/Mails
- - Seitenzahl (pdfinfo) im Rahmen 50–250
-5. Stichproben rendern (pdftoppm) und ansehen:
- - Überschrift = reiner Titel, Erklärung darunter, dann Beispiel?
- - Code englisch, Erklärung und Kommentare deutsch?
- - Codeblöcke/Callouts nicht über Seitenumbruch zerrissen?
- - Cover, Inhaltsverzeichnis und Teil-Trennseiten korrekt?
+ - no real names/places/emails
+ - page count (pdfinfo) within the 50–250 range
+5. Render samples (pdftoppm) and inspect:
+ - Heading = pure title, explanation below it, then the example?
+ - Code in English, explanation and comments in German?
+ - Code blocks/callouts not torn across page breaks?
+ - Cover, table of contents, and part dividers correct?
-CHECKLISTE PRO ABSCHNITT
-- [ ] Überschrift ist ein reiner Titel (keine Funktionsliste, keine Definition)
-- [ ] Erklärung in Prosa vorhanden, nennt die Bausteine
-- [ ] lauffähiges Beispiel mit Ergebnis-Kommentar
-- [ ] keine Tabelle
-- [ ] englische Bezeichner, deutsche Erklärung/Kommentare/Daten
-- [ ] aufzählbare Menge vollständig
-- [ ] neutrale Beispieldaten
+CHECKLIST PER SECTION
+- [ ] Heading is a pure title (no function list, no definition)
+- [ ] Explanation in prose present, names the building blocks
+- [ ] Explanation max. 3 short main clauses, no nested sentences
+- [ ] Recommendations/warnings as callout, not in running prose
+- [ ] runnable example with result comment
+- [ ] no table
+- [ ] English identifiers, German explanation/comments/data
+- [ ] enumerable set complete
+- [ ] neutral sample data
INSTALLATION
- pip install weasyprint
- apt install poppler-utils (pdfinfo, pdftoppm, pdftotext)
-DARKMODE (PFLICHT)
-- Alle Farben ausschließlich über :root-Variablen definieren
- (--ink, --muted, --line, --bg-soft, Akzent-Variablen).
-- Zusätzlich einen Dunkelmodus-Block ausliefern:
+DARK MODE (REQUIRED)
+- Define all colors exclusively via :root variables
+ (--ink, --muted, --line, --bg-soft, accent variables).
+- Additionally ship a dark-mode block:
@media screen {
- html[data-theme="dark"] { ...dunkle Variablenwerte... }
+ html[data-theme="dark"] { ...dark variable values... }
html[data-theme="dark"] body { background: #15171c; }
}
-- Die App aktiviert ihn über data-theme="dark" auf .
- KEIN prefers-color-scheme verwenden.
-- Dunkle Werte: Hintergründe dunkel (#15171c / #23262e), Text hell (#e6e8ee),
- Linien gedämpft (#2c3038). Akzentfarben so anheben, dass Überschriften und
- Links auf dunklem Grund lesbar bleiben (Kontrast prüfen). Elemente mit hellem
- Text auf Akzent-Hintergrund (z. B. Tabellenköpfe) dürfen ihre helle
- Hintergrundfarbe behalten.
-- Callout-/Infobox-Hintergründe nicht hartkodieren oder im Dunkelmodus
- explizit abdunkeln (z. B. auf var(--bg-soft)); farbige Border bleibt.
-- Nur innerhalb von @media screen — Druck/PDF bleibt unverändert hell.
+- The app enables it via data-theme="dark" on .
+ Do NOT use prefers-color-scheme.
+- Dark values: dark backgrounds (#15171c / #23262e), light text (#e6e8ee),
+ muted lines (#2c3038). Lift accent colors so headings and links stay
+ readable on a dark background (check contrast). Elements with light text on
+ accent backgrounds (e.g. table headers) may keep their light background
+ color.
+- Do not hardcode callout/infobox backgrounds — or darken them explicitly in
+ dark mode (e.g. to var(--bg-soft)); the colored border stays.
+- Only inside @media screen — print/PDF stays light.
diff --git a/templates/Format/Guide.md b/templates/Format/Guide.md
index 22a9a87..7913422 100644
--- a/templates/Format/Guide.md
+++ b/templates/Format/Guide.md
@@ -47,7 +47,8 @@ A **topic inventory** is produced beforehand by a research agent and supplied to
- Open each chapter with a one- or two-sentence **lead** (`.lead`) that frames why the topic matters.
- Explain each new term the first time it appears. Assume an intelligent reader who is new to *this* subject.
- Prefer **short, concrete examples** over abstract description. For technical topics that means small code snippets; for non-technical topics it means worked examples, sample dialogues, before/after comparisons, small tables, checklists, or step lists.
-- Use **callouts** to highlight tips, warnings, side-notes, and deeper digressions — not more than one or two per chapter.
+- **Explanations are short and simple**: max. 3 short main clauses per concept, no nested sentences. Plain language over precision-flexing.
+- Use **callouts** to highlight tips, warnings, side-notes, and deeper digressions — not more than one or two per chapter. Sentences like "Empfehlung: …", "In der Praxis problematisch: …", "Achtung: …" ALWAYS go into the matching callout (tip/warn/note), never into running explanation text.
- Keep prose tight. This is a reference people skim and return to, not an essay.
---
@@ -752,6 +753,7 @@ Example (PHP-flavored, but the pattern is language-agnostic):
- [ ] TOC lists every part and every chapter, sequential numbering
- [ ] Each part has a divider; each chapter starts with `.chapter-head` + `.lead`
- [ ] Callouts used sparingly (≤ ~2 per chapter), correct flavor
+- [ ] Explanations ≤ 3 short main clauses; recommendations/warnings live in callouts, not prose
- [ ] Tables for comparisons/lists; code blocks only if technical, short, escaped
- [ ] Prose in the reader's language; terms explained on first use
- [ ] Built with WeasyPrint and **visually verified** by rendering pages
diff --git a/templates/Format/MiniGuide.md b/templates/Format/MiniGuide.md
index f9964f7..57ed49f 100644
--- a/templates/Format/MiniGuide.md
+++ b/templates/Format/MiniGuide.md
@@ -1,168 +1,170 @@
```
-MINI-GUIDE-STIL (HTML/CSS → PDF via WeasyPrint)
+MINI-GUIDE STYLE (HTML/CSS → PDF via WeasyPrint)
FORMAT
-- A4 Hochformat, 3-5 Seiten
+- A4 portrait, 3-5 pages
- @page { size: A4; margin: 18mm 18mm 16mm 18mm; }
-- Footer: Seitenzahl Mitte, Guide-Titel rechts
+- Footer: page number center, guide title right
-ABDECKUNG (niedrigste Guide-Stufe)
-- ALLE Kern-Bausteine des Themas — was man braucht, um anzufangen.
- Welche das sind, hängt vom Thema ab.
-- Das Themeninventar wird vorab von einem Recherche-Agenten erstellt und
- mitgeliefert. Es ist verbindlich: jeder Punkt bekommt eine Sektion.
-- Sektionen ohne Kapitel-Struktur; Code-Beispiele sehr kurz (2-7 Zeilen)
-- ~15-25 Min Lesezeit, 3-5 Seiten — diese Obergrenze gilt immer
+COVERAGE (lowest guide tier)
+- ALL core building blocks of the topic — what you need to get started.
+ Which ones those are depends on the topic.
+- The topic inventory is produced beforehand by a research agent and
+ supplied. It is binding: every item gets a section.
+- Sections without chapter structure; code examples very short (2-7 lines)
+- ~15-25 min reading time, 3-5 pages — this upper limit always applies
-ZIELGRUPPE — KOMPAKTER ANFÄNGER-EINSTIEG
-- Echte Anfänger ohne Programmier-Vorwissen im Thema
-- Setzt nur allgemeines Verständnis voraus ("was ist Programmieren")
-- Begriffe werden bei erstem Auftreten erklärt
-- KEIN Sprach-Charakter-Überblick für erfahrene Entwickler
-- KEINE fortgeschrittenen Features (auch wenn cool und kurz)
+TARGET AUDIENCE — COMPACT BEGINNER INTRO
+- Real beginners with no programming experience in the topic
+- Assumes only general understanding ("what is programming")
+- Terms are explained on first appearance
+- NO language-character overview for experienced developers
+- NO advanced features (even if cool and short)
-INHALTLICHE PRINZIPIEN
-- Nur absolute Basics zeigen
-- Themen, die jemand nach 15 Min selbst nachmachen kann
-- Keine Tooling-Komplexität (Paketmanager, Build-Systeme, Compiler)
-- Keine Sprach-Spezialitäten (Type-Systeme, Decorators, Generics)
-- Keine OOP, wenn möglich (oder nur trivialste Form)
-- Erklär-Tiefe vor Feature-Breite
-- Lieber 5 Konzepte gründlich als 15 oberflächlich
+CONTENT PRINCIPLES
+- Show only absolute basics
+- Topics someone can reproduce themselves after 15 min
+- No tooling complexity (package managers, build systems, compilers)
+- No language specialties (type systems, decorators, generics)
+- No OOP if possible (or only the most trivial form)
+- Depth of explanation before breadth of features
+- Better 5 concepts thoroughly than 15 superficially
-TYPISCHE 5-SEKTIONEN-STRUKTUR
-1. Sprache starten — Installation, erste Datei, erstes Programm
-2. Variablen — Konzept + 2-3 Basis-Typen
-3. Kontrollfluss — if/else mit einfachem Beispiel
-4. Listen + Iteration — Array + Schleife
-5. Funktionen — Deklaration + Aufruf + Rückgabe
+TYPICAL 5-SECTION STRUCTURE
+1. Starting the language — installation, first file, first program
+2. Variables — concept + 2-3 basic types
+3. Control flow — if/else with a simple example
+4. Lists + iteration — array + loop
+5. Functions — declaration + call + return value
-(Diese Reihenfolge baut aufeinander auf und endet mit etwas Sinnvollem.)
+(This order builds on itself and ends with something meaningful.)
-STRUKTUR
-1. Kompakter Head: Logo links (16mm), Titel + Subtitle mittig, Badge + Zeit rechts
-2. Gap-Opener: Frage zum Einstieg, kursiv eingerahmt, niedrigschwellig
-3. 4-6 H2-Sektionen mit Erklärtext + Code-Beispiel + ggf. Callout
+STRUCTURE
+1. Compact head: logo left (16mm), title + subtitle center, badge + time right
+2. Gap opener: opening question, italic and framed, low-threshold
+3. 4-6 H2 sections with explanatory text + code example + optional callout
-ELEMENTE
-- Fließtext: justify mit Silbentrennung
-- Codeblöcke: dunkler Hintergrund, syntax highlighting, sehr kurz (2-7 Zeilen)
-- Inline-Code: heller Hintergrund, Hauptfarbe
-- Tabellen: nur wenn wirklich nötig (Vergleichs-Operatoren o.ä.)
-- Callouts in 3 Varianten: tip (grün), warn (rot), note (Hauptfarbe)
+ELEMENTS
+- Body text: justify with hyphenation
+- Code blocks: dark background, syntax highlighting, very short (2-7 lines)
+- Inline code: light background, accent color
+- Tables: only if truly necessary (comparison operators etc.)
+- Callouts in 3 flavors: tip (green), warn (red), note (accent color)
-TYPOGRAFIE
-- Body: 10.5pt Serif (Charter), line-height 1.55
-- Head h1: 20pt Sans-Serif bold
-- H2 Sektion: 13pt Sans-Serif bold
-- Code: 8.5pt Monospace, line-height 1.5
-- Inline-Code: 9pt Monospace
-- Callout-Labels: 8pt uppercase, letter-spacing 1pt
+TYPOGRAPHY
+- Body: 10.5pt serif (Charter), line-height 1.55
+- Head h1: 20pt sans-serif bold
+- H2 section: 13pt sans-serif bold
+- Code: 8.5pt monospace, line-height 1.5
+- Inline code: 9pt monospace
+- Callout labels: 8pt uppercase, letter-spacing 1pt
-FARBEN (max 3 + Neutrals)
-- Hauptfarbe: kräftig, an offizielle Farbe des Themas anlehnen
-- Hauptfarbe-Dunkel: dunklere Variante für Akzente
-- Hintergrund-Soft: helle Variante der Hauptfarbe
-- Code-Hintergrund: #1e2a3a
-- Text: #1a1a1a / muted #5a6470 / Linie #d8dde3
-- Callout-Farben: grün/rot/Hauptfarbe
+COLORS (max 3 + neutrals)
+- Accent color: strong, leaning on the topic's official color
+- Accent dark: darker variant for accents
+- Background soft: light variant of the accent color
+- Code background: #1e2a3a
+- Text: #1a1a1a / muted #5a6470 / line #d8dde3
+- Callout colors: green/red/accent
-GAP-OPENER (PFLICHT)
-- Kursiv, eingerahmt mit Hauptfarbe-Border
-- Niedrigschwellige Frage, die der Guide beantwortet
-- Begeistert mit relevanter Statistik oder Praxis-Bezug
-- KEINE Fachbegriffe, die noch nicht erklärt sind
-- Beispiele:
+GAP OPENER (REQUIRED)
+- Italic, framed with an accent-color border
+- Low-threshold question that the guide answers
+- Sparks interest with a relevant statistic or practical angle
+- NO technical terms that have not been explained yet
+- Examples:
- "PHP läuft hinter rund drei Viertel aller Webseiten..."
- "JavaScript ist die Sprache des Webs – aber wie schreibt man das eigentliche Code..."
- "Python ist die beliebteste Anfänger-Sprache..."
-ERKLÄR-TIEFE PRO KONZEPT
-- Konzept benennen (z.B. "Variable")
-- In einem Satz erklären, was es ist
-- Code-Beispiel mit Kommentaren
-- Sprach-Eigenheiten erwähnen (z.B. "in PHP beginnen Variablen mit $")
-- KEIN Verweis auf andere Konzepte, die noch kommen
+EXPLANATION DEPTH PER CONCEPT
+- Name the concept (e.g. "Variable")
+- Explain in one sentence what it is
+- Code example with comments
+- Mention language quirks (e.g. "in PHP beginnen Variablen mit $")
+- NO reference to concepts that come later
-CALLOUT-NUTZUNG
-- tip (grün): Übungs-Anregung am Ende, ermutigend
-- warn (rot): Anfänger-Stolperfallen ("= vs ==", "vergessenes Semikolon")
-- note (Hauptfarbe): Hintergrund-Info, Erklärung einer Sprach-Eigenheit
+CALLOUT USAGE
+- tip (green): practice suggestion at the end, encouraging
+- warn (red): beginner pitfalls ("= vs ==", "vergessenes Semikolon")
+- note (accent): background info, explanation of a language quirk
-CALLOUT-CSS WICHTIG
-- .callout-body > b:first-child mit display:block für Label
-- NICHT .callout-body b global mit display:block (zerstört Inline-Bold)
+CALLOUT CSS IMPORTANT
+- .callout-body > b:first-child with display:block for the label
+- NOT .callout-body b globally with display:block (destroys inline bold)
-GAP-CSS WICHTIG
-- .gap > b:first-child mit display:block für "FRAGE ZUM EINSTIEG"-Label
-- NICHT .gap b global mit display:block (zerstört Inline-Bold im Frage-Text)
+GAP CSS IMPORTANT
+- .gap > b:first-child with display:block for the "FRAGE ZUM EINSTIEG" label
+- NOT .gap b globally with display:block (destroys inline bold in the
+ question text)
-THEMENSPEZIFISCHE ANPASSUNGEN (vor Generierung wählen)
-- Hauptfarbe: offizielle Farbe des Themas
-- Logo-Buchstabe(n) oder Kürzel
-- Begrüßungs-Statistik im Gap-Opener
-- 4-6 Anfänger-Themen wählen (siehe Standard-Struktur)
+TOPIC-SPECIFIC ADJUSTMENTS (choose before generating)
+- Accent color: the topic's official color
+- Logo letter(s) or abbreviation
+- Welcome statistic in the gap opener
+- Choose 4-6 beginner topics (see standard structure)
-PFLICHT-ELEMENTE
-- 1 Gap-Opener am Anfang
-- 5-7 Code-Beispiele (kurz, 2-7 Zeilen, anfänger-tauglich)
-- Mindestens 1 Callout (oft: warn für Stolperfalle, tip für Übung am Ende)
-- Inline-Codes für Fachbegriffe
+REQUIRED ELEMENTS
+- 1 gap opener at the start
+- 5-7 code examples (short, 2-7 lines, beginner-friendly)
+- At least 1 callout (often: warn for a pitfall, tip for practice at the end)
+- Inline code for technical terms
-VERMEIDEN
-- TOC oder Cover (überdimensioniert für 15 Min)
-- Einleitungs-Floskeln ("In diesem Mini-Guide lernen wir...")
-- Vollständigkeitsanspruch (gehört in größeren Guide)
-- Referenz-Tabellen ohne Erklärtext (gehört in Cheatsheet)
-- Recall oder Next-Step am Ende (Mini-Guide endet mit Inhalt)
-- Themen, die fortgeschritten sind (auch wenn cool):
- - Type-Systems, Type-Hints, Generics
- - OOP-Features (außer trivialster Form)
- - Tooling (Paketmanager, Build, Linting)
- - Sprach-Spezialitäten (PHP: strict_types, readonly, Composer, PSR-4)
-- page-break mitten in Codeblock oder Callout (page-break-inside: avoid)
-- Mehr als 3 Schriftgrößen pro Sektion
-- Floats oder absolute positioning (bricht in WeasyPrint)
-- Fachbegriffe ohne Erklärung
-- Verweise auf andere Konzepte, die noch kommen
-- Edge Cases und "aber"-Sätze
+AVOID
+- TOC or cover (oversized for 15 min)
+- Introductory filler ("In diesem Mini-Guide lernen wir...")
+- Claims of completeness (belongs in a larger guide)
+- Reference tables without explanatory text (belongs in a cheatsheet)
+- Recall or next-step at the end (a mini-guide ends with content)
+- Topics that are advanced (even if cool):
+ - Type systems, type hints, generics
+ - OOP features (except the most trivial form)
+ - Tooling (package managers, build, linting)
+ - Language specialties (PHP: strict_types, readonly, Composer, PSR-4)
+- page break in the middle of a code block or callout
+ (page-break-inside: avoid)
+- More than 3 font sizes per section
+- Floats or absolute positioning (breaks in WeasyPrint)
+- Technical terms without explanation
+- References to concepts that come later
+- Edge cases and "but" sentences
-GENERIERUNG MIT FEEDBACK-LOOP (max 3 Iterationen)
-1. HTML schreiben
+GENERATION WITH FEEDBACK LOOP (max 3 iterations)
+1. Write the HTML
2. weasyprint file.html file.pdf
-3. PDF zu PNGs: alle Seiten konvertieren
-4. Alle Seiten ansehen
-5. Prüfen:
- - Head sauber (Logo überlappt nicht mit Titel)?
- - Code-Blöcke nicht über Seitenumbruch zerrissen?
- - Callouts vollständig sichtbar?
- - Inline-Bolds in Callouts/Gap korrekt (nicht als Blöcke)?
- - Footer mit Seitenzahl korrekt?
- - Würde ein echter Anfänger das verstehen?
- - Wurden alle Fachbegriffe beim ersten Auftreten erklärt?
-6. Bei Problemen: fixen, ab Schritt 2 wiederholen
-7. Nach max 3 Iterationen ausgeben
+3. PDF to PNGs: convert all pages
+4. View all pages
+5. Check:
+ - Head clean (logo does not overlap the title)?
+ - Code blocks not torn across page breaks?
+ - Callouts fully visible?
+ - Inline bolds in callouts/gap correct (not rendered as blocks)?
+ - Footer with page number correct?
+ - Would a real beginner understand this?
+ - Were all technical terms explained on first appearance?
+6. On problems: fix, repeat from step 2
+7. Output after max 3 iterations
INSTALLATION
- pip install weasyprint pdf2image
- apt install poppler-utils
```
-DARKMODE (PFLICHT)
-- Alle Farben ausschließlich über :root-Variablen definieren
- (--ink, --muted, --line, --bg-soft, Akzent-Variablen).
-- Zusätzlich einen Dunkelmodus-Block ausliefern:
+DARK MODE (REQUIRED)
+- Define all colors exclusively via :root variables
+ (--ink, --muted, --line, --bg-soft, accent variables).
+- Additionally ship a dark-mode block:
@media screen {
- html[data-theme="dark"] { ...dunkle Variablenwerte... }
+ html[data-theme="dark"] { ...dark variable values... }
html[data-theme="dark"] body { background: #15171c; }
}
-- Die App aktiviert ihn über data-theme="dark" auf .
- KEIN prefers-color-scheme verwenden.
-- Dunkle Werte: Hintergründe dunkel (#15171c / #23262e), Text hell (#e6e8ee),
- Linien gedämpft (#2c3038). Akzentfarben so anheben, dass Überschriften und
- Links auf dunklem Grund lesbar bleiben (Kontrast prüfen). Elemente mit hellem
- Text auf Akzent-Hintergrund (z. B. Tabellenköpfe) dürfen ihre helle
- Hintergrundfarbe behalten.
-- Callout-/Infobox-Hintergründe nicht hartkodieren oder im Dunkelmodus
- explizit abdunkeln (z. B. auf var(--bg-soft)); farbige Border bleibt.
-- Nur innerhalb von @media screen — Druck/PDF bleibt unverändert hell.
+- The app enables it via data-theme="dark" on .
+ Do NOT use prefers-color-scheme.
+- Dark values: dark backgrounds (#15171c / #23262e), light text (#e6e8ee),
+ muted lines (#2c3038). Lift accent colors so headings and links stay
+ readable on a dark background (check contrast). Elements with light text on
+ accent backgrounds (e.g. table headers) may keep their light background
+ color.
+- Do not hardcode callout/infobox backgrounds — or darken them explicitly in
+ dark mode (e.g. to var(--bg-soft)); the colored border stays.
+- Only inside @media screen — print/PDF stays light.
diff --git a/templates/Format/OnePager.md b/templates/Format/OnePager.md
index 7bbaf8f..5b30b3d 100644
--- a/templates/Format/OnePager.md
+++ b/templates/Format/OnePager.md
@@ -1,115 +1,115 @@
```
-ONEPAGER-STIL QUERFORMAT (HTML/CSS → PDF via WeasyPrint)
+ONEPAGER STYLE LANDSCAPE (HTML/CSS → PDF via WeasyPrint)
FORMAT
-- A4 Querformat (297mm × 210mm)
+- A4 landscape (297mm × 210mm)
- @page { size: A4 landscape; margin: 0; }
- Padding: 9mm 11mm 9mm 11mm
LAYOUT
-- Grid: hero+stats (auto) / divider / main (1fr, 3 Spalten) / footer (absolute)
-- Stats-Bar in Hero integriert (rechts), spart vertikalen Platz
-- Main: 3 Spalten gleich breit, gap 4mm
-- Spalten intern: flex-column, gap 4mm
-- 6 thematische Blöcke verteilt (2 pro Spalte)
+- Grid: hero+stats (auto) / divider / main (1fr, 3 columns) / footer (absolute)
+- Stats bar integrated into the hero (right), saves vertical space
+- Main: 3 equal-width columns, gap 4mm
+- Columns internally: flex-column, gap 4mm
+- 6 thematic blocks distributed (2 per column)
-STRUKTUR (in dieser Reihenfolge)
-1. Hero: Logo links (22mm), Titel + Untertitel mittig, 4 Stats rechts
-2. Divider: 1.5pt schwarze Linie
-3. Main-Grid: 6 Blöcke in 3 Spalten
-4. Footer: farbige Box mit Kernaussage + Tag (absolute, unten)
+STRUCTURE (in this order)
+1. Hero: logo left (22mm), title + subtitle center, 4 stats right
+2. Divider: 1.5pt black line
+3. Main grid: 6 blocks in 3 columns
+4. Footer: colored box with key message + tag (absolute, bottom)
-UNTERSCHIEDE ZU HOCHFORMAT
-- 3 Spalten statt 2 (mehr horizontaler Platz)
-- 6 Blöcke statt 4-5
-- Stats integriert in Hero statt eigene Zeile
-- Kleinere Schriftgrößen (9.5pt Body statt 10pt)
-- Kompaktere Code-Blöcke (7pt statt 7.5pt)
+DIFFERENCES FROM PORTRAIT
+- 3 columns instead of 2 (more horizontal space)
+- 6 blocks instead of 4-5
+- Stats integrated into the hero instead of their own row
+- Smaller font sizes (9.5pt body instead of 10pt)
+- More compact code blocks (7pt instead of 7.5pt)
-BLOCK-AUFBAU
-- Titel: 9.5pt bold uppercase, Icon links, Hauptfarbe-Unterstreichung 2pt
-- Inhalt: visuell, nicht reine Textbullets
-- Varianten: Icon-Liste, Code-Block, Kachel-Grid, Plus/Minus-Spalten, Type-Grid
+BLOCK STRUCTURE
+- Title: 9.5pt bold uppercase, icon left, accent-color underline 2pt
+- Content: visual, not plain text bullets
+- Variants: icon list, code block, tile grid, plus/minus columns, type grid
-FARBEN (max 3 + Neutrals)
-- Hauptfarbe: an offizielle Farbe des Themas anlehnen
-- Hauptfarbe-Dunkel: für Headings
-- Hauptfarbe-Darker: für Footer
-- Akzentfarbe: kontrastierend
-- Hintergrund-Soft: helle Variante der Hauptfarbe
-- Code-Hintergrund: #1e2a3a
-- Text: #1a1a1a / muted #5a6470 / Linie #e5e5e5
+COLORS (max 3 + neutrals)
+- Accent color: lean on the topic's official color
+- Accent dark: for headings
+- Accent darker: for the footer
+- Accent color: contrasting
+- Background soft: light variant of the accent color
+- Code background: #1e2a3a
+- Text: #1a1a1a / muted #5a6470 / line #e5e5e5
-TYPOGRAFIE
+TYPOGRAPHY
- Body: 9.5pt, line-height 1.4
- Hero h1: 20pt bold
-- Block-Titel: 9.5pt bold uppercase, letter-spacing 0.5pt
-- Stats-Zahl: 14pt bold, Label 6.5pt uppercase
-- Code: 7pt monospace, dunkler Hintergrund
-- Feature-Text: 8.5pt
-- Max 3 Schriftgrößen pro Block
+- Block title: 9.5pt bold uppercase, letter-spacing 0.5pt
+- Stats number: 14pt bold, label 6.5pt uppercase
+- Code: 7pt monospace, dark background
+- Feature text: 8.5pt
+- Max 3 font sizes per block
ICONS
-- SVG inline, stroke statt fill
-- 4mm in Block-Titeln (kleiner als Hochformat wegen kompakter Layout)
-- 2.8mm in Kachel-Icons
-- currentColor für automatische Anpassung
+- SVG inline, stroke instead of fill
+- 4mm in block titles (smaller than portrait due to compact layout)
+- 2.8mm in tile icons
+- currentColor for automatic adaptation
-THEMENSPEZIFISCHE ANPASSUNGEN (vor Generierung wählen)
-- Hauptfarbe: offizielle Farbe des Themas
-- Logo-Buchstabe(n) oder Kürzel
-- 4 Stats: themen-relevante Zahlen
-- Block-Auswahl: 6 wichtigste Aspekte für Erstübersicht
+TOPIC-SPECIFIC ADJUSTMENTS (choose before generating)
+- Accent color: the topic's official color
+- Logo letter(s) or abbreviation
+- 4 stats: topic-relevant numbers
+- Block selection: the 6 most important aspects for a first overview
-VISUELLE ELEMENTE PFLICHT
-- Mindestens 1 Code-Block
-- Mindestens 1 Kachel-Grid mit Icons (Ökosystem)
-- Mindestens 1 Plus/Minus-Split (Modern vs Legacy o.ä.)
-- Footer als farbige Box (visueller Anker)
-- Stats-Bar im Hero
+REQUIRED VISUAL ELEMENTS
+- At least 1 code block
+- At least 1 tile grid with icons (ecosystem)
+- At least 1 plus/minus split (modern vs legacy etc.)
+- Footer as a colored box (visual anchor)
+- Stats bar in the hero
-VERMEIDEN
-- Reine Bullet-Listen in jedem Block
-- Mehr als 6 Hauptblöcke (Querformat hat eh schon mehr Platz)
-- Mehr als 3 Schriftgrößen
-- Marketing-Floskeln in Hero
-- Floats oder absolute positioning (außer für Footer)
-- Vertikal sehr lange Blöcke (würden Spalten unbalanciert machen)
+AVOID
+- Plain bullet lists in every block
+- More than 6 main blocks (landscape already has more space)
+- More than 3 font sizes
+- Marketing filler in the hero
+- Floats or absolute positioning (except for the footer)
+- Vertically very long blocks (would unbalance the columns)
-GENERIERUNG MIT FEEDBACK-LOOP (max 3 Iterationen)
-1. HTML schreiben
+GENERATION WITH FEEDBACK LOOP (max 3 iterations)
+1. Write the HTML
2. weasyprint file.html file.pdf
-3. PDF zu PNG: python -c "from pdf2image import convert_from_path; convert_from_path('file.pdf', dpi=120)[0].save('preview.png')"
-4. Preview ansehen mit Read-Tool
-5. Prüfen:
- - Stats-Bar überlappt nicht mit Titel?
- - 3 Spalten balanciert (ähnliche Höhe)?
- - Footer nicht abgeschnitten?
- - Code-Block lesbar?
- - Alle Icons rendern?
-6. Bei Problemen: fixen, ab Schritt 2 wiederholen
-7. Nach max 3 Iterationen ausgeben
+3. PDF to PNG: python -c "from pdf2image import convert_from_path; convert_from_path('file.pdf', dpi=120)[0].save('preview.png')"
+4. View the preview with the Read tool
+5. Check:
+ - Stats bar does not overlap the title?
+ - 3 columns balanced (similar height)?
+ - Footer not cut off?
+ - Code block readable?
+ - All icons render?
+6. On problems: fix, repeat from step 2
+7. Output after max 3 iterations
INSTALLATION
- pip install weasyprint pdf2image
- apt install poppler-utils
```
-DARKMODE (PFLICHT)
-- Alle Farben ausschließlich über :root-Variablen definieren
- (--ink, --muted, --line, --bg-soft, Akzent-Variablen).
-- Zusätzlich einen Dunkelmodus-Block ausliefern:
+DARK MODE (REQUIRED)
+- Define all colors exclusively via :root variables
+ (--ink, --muted, --line, --bg-soft, accent variables).
+- Additionally ship a dark-mode block:
@media screen {
- html[data-theme="dark"] { ...dunkle Variablenwerte... }
+ html[data-theme="dark"] { ...dark variable values... }
html[data-theme="dark"] body { background: #15171c; }
}
-- Die App aktiviert ihn über data-theme="dark" auf .
- KEIN prefers-color-scheme verwenden.
-- Dunkle Werte: Hintergründe dunkel (#15171c / #23262e), Text hell (#e6e8ee),
- Linien gedämpft (#2c3038). Akzentfarben so anheben, dass Überschriften und
- Links auf dunklem Grund lesbar bleiben (Kontrast prüfen). Elemente mit hellem
- Text auf Akzent-Hintergrund (z. B. Tabellenköpfe) dürfen ihre helle
- Hintergrundfarbe behalten.
-- Callout-/Infobox-Hintergründe nicht hartkodieren oder im Dunkelmodus
- explizit abdunkeln (z. B. auf var(--bg-soft)); farbige Border bleibt.
-- Nur innerhalb von @media screen — Druck/PDF bleibt unverändert hell.
+- The app enables it via data-theme="dark" on .
+ Do NOT use prefers-color-scheme.
+- Dark values: dark backgrounds (#15171c / #23262e), light text (#e6e8ee),
+ muted lines (#2c3038). Lift accent colors so headings and links stay
+ readable on a dark background (check contrast). Elements with light text on
+ accent backgrounds (e.g. table headers) may keep their light background
+ color.
+- Do not hardcode callout/infobox backgrounds — or darken them explicitly in
+ dark mode (e.g. to var(--bg-soft)); the colored border stays.
+- Only inside @media screen — print/PDF stays light.
diff --git a/templates/Format/Suche.md b/templates/Format/Suche.md
index b0706d8..41940bf 100644
--- a/templates/Format/Suche.md
+++ b/templates/Format/Suche.md
@@ -1,43 +1,44 @@
-Du erstellst eine Themen-Taxonomie. Ein Nutzer beschreibt ein Problem oder
-Lernziel. Leite daraus 7 THEMEN-NAMEN ab, zu denen jeweils ein vollständiger
-Lern-Guide erstellt werden kann, der das Thema komplett vermittelt, um das
-Problem zu lösen.
+You create a topic taxonomy. A user describes a problem or learning goal.
+Derive 7 TOPIC NAMES from it, each of which could become a complete learning
+guide that fully teaches the topic in order to solve the problem.
-Problem des Nutzers:
+The user's problem:
{problem}
-BEREITS VORHANDENE THEMEN (Referenz – diese NICHT erneut vorschlagen):
+ALREADY EXISTING TOPICS (reference — do NOT propose these again):
{existing}
-GRUNDPRINZIP – MECE (Mutually Exclusive, Collectively Exhaustive):
-Die Themen müssen sich gegenseitig ausschließen (kein Thema ist ein Unterthema
-eines anderen, keine inhaltliche Überschneidung) und zusammen das Problem
-sinnvoll abdecken. Alle Themen stehen auf der GLEICHEN Abstraktionsebene –
-gleichrangige Hauptthemen, niemals eine Mischung aus Ober- und Unterthemen.
+CORE PRINCIPLE — MECE (Mutually Exclusive, Collectively Exhaustive):
+The topics must be mutually exclusive (no topic is a subtopic of another, no
+content overlap) and together cover the problem sensibly. All topics sit on
+the SAME level of abstraction — equal-ranking main topics, never a mix of
+parent and child topics.
-Stil der Themen-Namen:
-- KURZ und prägnant: 1–3 Wörter, wie ein Buchregal-Etikett, KEIN Satz.
-- Thema VOLLSTÄNDIG benennen, keine Teilmenge. Jeder Guide deckt sein Thema
- komplett ab, daher KEINE Zusätze wie "Grundlagen", "Basics", "Einführung".
- Richtig: "CSS" — Falsch: "CSS Grundlagen".
-- KEIN Doppelpunkt, KEINE Erklärung, KEINE Marketing-Sprache im Titel.
-- Beispiele für guten Stil: "HTML", "CSS", "JavaScript", "Deployment", "Git".
+Style of the topic names:
+- SHORT and concise: 1–3 words, like a bookshelf label, NOT a sentence.
+- Name the topic COMPLETELY, not a subset. Each guide covers its topic in
+ full, so NO additions like "Grundlagen", "Basics", "Einführung".
+ Right: "CSS" — Wrong: "CSS Grundlagen".
+- NO colon, NO explanation, NO marketing language in the title.
+- Examples of good style: "HTML", "CSS", "JavaScript", "Deployment", "Git".
-Inhaltliche Anforderungen:
-- Treffe das konkrete Problem, nicht nur das Oberthema.
-- Bei vagem Problem: Themen für die wahrscheinlichsten Interpretationen.
-- Die Themen müssen NICHT existieren – wähle gut benennbare, präzise Titel.
+Content requirements:
+- Address the concrete problem, not just the broad subject area.
+- For a vague problem: topics for the most likely interpretations.
+- The topics do NOT have to exist already — choose well-nameable,
+ precise titles.
-PFLICHT-PRÜFSCHRITT vor der Ausgabe (intern, NICHT mit ausgeben):
-Erstelle zuerst einen Entwurf von 7 Themen. Prüfe dann JEDES Paar (A, B):
-Könnte Thema A sinnvoll als Kapitel im Guide zu Thema B behandelt werden?
-Wenn ja, verletzt das die MECE-Regel → ersetze A durch ein gleichrangiges,
-disjunktes Thema. Wiederhole, bis kein Thema mehr ein Unterthema eines anderen
-ist. Beispiele für Verstöße: "Responsive Design" gehört in "CSS";
-"Domain & DNS" gehört in "Deployment". Gib erst danach das finale Set aus.
+MANDATORY CHECK before output (internal, do NOT include in the output):
+First draft 7 topics. Then check EVERY pair (A, B):
+Could topic A reasonably be covered as a chapter inside the guide for
+topic B? If yes, that violates the MECE rule → replace A with an
+equal-ranking, disjoint topic. Repeat until no topic is a subtopic of
+another. Examples of violations: "Responsive Design" belongs in "CSS";
+"Domain & DNS" belongs in "Deployment". Only then output the final set.
-AUSGABE:
-Antworte AUSSCHLIESSLICH mit einem JSON-Array von 7 Elementen. Jedes Element:
-- "title": kurzer Themen-Name (max. 30 Zeichen, 1–3 Wörter)
-- "reason": ein Satz, wie dieser Guide das Problem konkret löst
-Kein weiterer Text, nur das JSON-Array.
\ No newline at end of file
+OUTPUT:
+Respond EXCLUSIVELY with a JSON array of 7 elements. Each element:
+- "title": short topic name (max. 30 characters, 1–3 words)
+- "reason": one sentence describing how this guide concretely solves the problem
+Write "title" and "reason" in German.
+No other text, only the JSON array.