update
This commit is contained in:
@@ -11,9 +11,7 @@ ALLOWED_FORMATS = [
|
|||||||
"Cheatsheet",
|
"Cheatsheet",
|
||||||
"MiniGuide",
|
"MiniGuide",
|
||||||
"Guide",
|
"Guide",
|
||||||
"BeginnerGuide",
|
"EndGuide",
|
||||||
"IntermediateGuide",
|
|
||||||
"ExtendedGuide",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
FORMAT_META = {
|
FORMAT_META = {
|
||||||
@@ -21,9 +19,7 @@ FORMAT_META = {
|
|||||||
"Cheatsheet": {"pages": "1 Seite", "time": "~10 Min"},
|
"Cheatsheet": {"pages": "1 Seite", "time": "~10 Min"},
|
||||||
"MiniGuide": {"pages": "3-4 Seiten", "time": "~15 Min"},
|
"MiniGuide": {"pages": "3-4 Seiten", "time": "~15 Min"},
|
||||||
"Guide": {"pages": "15-250 Seiten", "time": "variabel"},
|
"Guide": {"pages": "15-250 Seiten", "time": "variabel"},
|
||||||
"BeginnerGuide": {"pages": "35-40 Seiten", "time": "~3h"},
|
"EndGuide": {"pages": "120-150 Seiten", "time": "~6h"},
|
||||||
"IntermediateGuide": {"pages": "42-50 Seiten", "time": "~4h"},
|
|
||||||
"ExtendedGuide": {"pages": "47-60 Seiten", "time": "~5h"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AGENT_TIMEOUT = 3600
|
AGENT_TIMEOUT = 3600
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ FormatType = Literal[
|
|||||||
"Cheatsheet",
|
"Cheatsheet",
|
||||||
"MiniGuide",
|
"MiniGuide",
|
||||||
"Guide",
|
"Guide",
|
||||||
"BeginnerGuide",
|
"EndGuide",
|
||||||
"IntermediateGuide",
|
|
||||||
"ExtendedGuide",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ async function loadGuides() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const FORMAT_ORDER = ['OnePager', 'Cheatsheet', 'MiniGuide', 'Guide', 'BeginnerGuide', 'IntermediateGuide', 'ExtendedGuide']
|
const FORMAT_ORDER = ['OnePager', 'Cheatsheet', 'MiniGuide', 'Guide', 'EndGuide']
|
||||||
|
|
||||||
function autoPreview() {
|
function autoPreview() {
|
||||||
const map = doneByFormat.value
|
const map = doneByFormat.value
|
||||||
|
|||||||
@@ -27,9 +27,7 @@ const formats = [
|
|||||||
{ key: 'Cheatsheet', label: 'Cheatsheet' },
|
{ key: 'Cheatsheet', label: 'Cheatsheet' },
|
||||||
{ key: 'MiniGuide', label: 'MiniGuide' },
|
{ key: 'MiniGuide', label: 'MiniGuide' },
|
||||||
{ key: 'Guide', label: 'Guide' },
|
{ key: 'Guide', label: 'Guide' },
|
||||||
{ key: 'BeginnerGuide', label: 'BeginnerGuide' },
|
{ key: 'EndGuide', label: 'EndGuide' },
|
||||||
{ key: 'IntermediateGuide', label: 'IntermediateGuide' },
|
|
||||||
{ key: 'ExtendedGuide', label: 'ExtendedGuide' },
|
|
||||||
]
|
]
|
||||||
|
|
||||||
const activeGenerations = computed(() => {
|
const activeGenerations = computed(() => {
|
||||||
|
|||||||
@@ -1,147 +0,0 @@
|
|||||||
```
|
|
||||||
ANFÄNGER-GUIDE-STIL (HTML/CSS → PDF via WeasyPrint)
|
|
||||||
|
|
||||||
FORMAT
|
|
||||||
- A4 Hochformat, mehrseitig
|
|
||||||
- @page { size: A4; margin: 22mm 20mm 20mm 20mm; }
|
|
||||||
- @page :first { margin: 0; } für Cover
|
|
||||||
- Footer: Seitenzahl Mitte, Guide-Titel rechts (außer Cover)
|
|
||||||
|
|
||||||
UMFANG
|
|
||||||
- 8-12 Kapitel à ~15 Min Lesezeit
|
|
||||||
- ~1500 Wörter Fließtext pro Kapitel
|
|
||||||
- 2-3 Code-Beispiele pro Kapitel (kurz, 5-15 Zeilen)
|
|
||||||
- 15-25 Seiten gesamt
|
|
||||||
- ~2-3h Lesezeit gesamt
|
|
||||||
|
|
||||||
EINSTIEGSNIVEAU
|
|
||||||
- Setzt nur voraus, dass der Leser weiß, WAS das Thema ist
|
|
||||||
- Kapitel 1 erklärt Setup und erste Schritte von Null
|
|
||||||
- Keine Vorkenntnisse im Thema selbst
|
|
||||||
- Erklärt Begriffe beim ersten Auftreten
|
|
||||||
|
|
||||||
KAPITEL-PROGRESSION
|
|
||||||
- Aufgeteilt in 3 Teile mit eigenen TOC-Sektionen:
|
|
||||||
- Teil 1: Grundlagen — Was ist es, wie startet man, erste Konzepte
|
|
||||||
- Teil 2: Strukturen/Bausteine — Die wichtigsten Mechanismen
|
|
||||||
- Teil 3: Echte Anwendungen — Integration, Tooling, kleine Projekte
|
|
||||||
- Jedes Kapitel baut auf vorherigen auf
|
|
||||||
- Tiefere Konzepte erst nach den Grundlagen
|
|
||||||
- Letztes Kapitel idealerweise mit kleiner echter Anwendung
|
|
||||||
|
|
||||||
STRUKTUR
|
|
||||||
1. Cover: vollflächiger Hintergrund, Hero-Aussage, Outcome-Versprechen
|
|
||||||
2. Inhaltsverzeichnis: 3 Teile, nummeriert, mit Zeit-Markern (15 Min)
|
|
||||||
3. Kapitel 1-N
|
|
||||||
4. Ending: Spaced-Repetition-Plan, nächste Schritte, Begleitmaterial
|
|
||||||
|
|
||||||
KAPITEL-AUFBAU
|
|
||||||
1. Kapitel-Head: große Nummer + Titel + Subtitle, Trennlinie
|
|
||||||
2. Gap-Opener: kursiv eingerahmt, Information-Gap explizit
|
|
||||||
3. 2-4 H2-Sektionen
|
|
||||||
4. Pro Sektion: Erklärtext + Code-Beispiel + ggf. Callout
|
|
||||||
5. Recall-Box am Ende (3 Fragen)
|
|
||||||
|
|
||||||
ELEMENTE
|
|
||||||
- Fließtext: justify mit Silbentrennung
|
|
||||||
- Codeblöcke: dunkler Hintergrund, syntax highlighting
|
|
||||||
- Inline-Code: heller Hintergrund, Hauptfarbe
|
|
||||||
- Tabellen: Header farbig (Hauptfarbe-Dunkel), Zeilen mit dünner Trennlinie
|
|
||||||
- Callouts in 3 Varianten: tip (grün), warn (rot), note (Hauptfarbe)
|
|
||||||
- Recall-Box: dunkler Hintergrund mit Akzentfarbe
|
|
||||||
|
|
||||||
TYPOGRAFIE
|
|
||||||
- Body: 10.5pt Serif (Charter), line-height 1.55
|
|
||||||
- H1 Kapitel: 22pt Sans-Serif bold, Hauptfarbe-Dunkel
|
|
||||||
- H2 Sektion: 14pt Sans-Serif bold
|
|
||||||
- H3 Subsektion: 11pt Sans-Serif bold
|
|
||||||
- Code: 8.5pt Monospace, line-height 1.5
|
|
||||||
- Inline-Code: 9pt Monospace
|
|
||||||
- Recall/Callout-Labels: 8pt uppercase, letter-spacing 1pt
|
|
||||||
- Cover-H1: 56pt Sans-Serif bold, letter-spacing -2pt
|
|
||||||
|
|
||||||
FARBEN (max 3 + Neutrals)
|
|
||||||
- Hauptfarbe: kräftig, an offizielle Farbe des Themas anlehnen
|
|
||||||
- Hauptfarbe-Dunkel: dunklere Variante für Headings und Akzente
|
|
||||||
- Hauptfarbe-Darker: noch dunkler für Cover-Verlauf und Recall-Box
|
|
||||||
- Hintergrund-Soft: helle Variante der Hauptfarbe
|
|
||||||
- Code-Hintergrund: #1e2a3a (dunkel)
|
|
||||||
- Text: #1a1a1a / muted #5a6470 / Linie #d8dde3
|
|
||||||
- Callout-Farben: grün/rot/Hauptfarbe
|
|
||||||
|
|
||||||
INFORMATION-GAP-OPENER (PFLICHT pro Kapitel)
|
|
||||||
- Kursiv, eingerahmt mit Hauptfarbe-Border
|
|
||||||
- Stellt konkrete Frage, die das Kapitel beantwortet
|
|
||||||
- Erzeugt Spannung (Information-Gap)
|
|
||||||
- Niveau passend zum Kapitel:
|
|
||||||
- Kapitel 1: setzt nur Grundverständnis voraus
|
|
||||||
- Letztes Kapitel: darf auf alle vorherigen Kapitel aufbauen
|
|
||||||
|
|
||||||
RECALL-BOX (PFLICHT pro Kapitel)
|
|
||||||
- Am Kapitel-Ende
|
|
||||||
- Dunkler Hintergrund mit Akzentfarbe
|
|
||||||
- 3 nummerierte Fragen
|
|
||||||
- Direkt auf Kapitel-Inhalt bezogen
|
|
||||||
- Code-Snippets in Fragen mit Akzentfarbe hervorgehoben
|
|
||||||
|
|
||||||
ENDING (PFLICHT)
|
|
||||||
- Spaced-Repetition-Plan: 4 Karten (Heute, +1 Tag, +7 Tage, +30 Tage)
|
|
||||||
- "Was als nächstes lernen" mit Spezialisierungs-Vorschlägen
|
|
||||||
- Verweis auf Begleitmaterial (OnePager, Cheatsheet, Mini-Guide)
|
|
||||||
|
|
||||||
CALLOUT-NUTZUNG
|
|
||||||
- tip (grün): Best Practice, idiomatische Lösung
|
|
||||||
- warn (rot): Fallen, häufige Bugs, Anti-Patterns
|
|
||||||
- note (Hauptfarbe): Hintergrund-Info, Querverweis
|
|
||||||
|
|
||||||
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)
|
|
||||||
- Mehrzeiliger Body-Text in <p style="margin:0;"> wrappen wenn Inline-Bolds drin sind
|
|
||||||
|
|
||||||
THEMENSPEZIFISCHE ANPASSUNGEN (vor Generierung wählen)
|
|
||||||
- Hauptfarbe: offizielle Farbe des Themas
|
|
||||||
- Logo-Buchstabe(n): erstes Zeichen oder Kürzel
|
|
||||||
- Version + Stand-Datum
|
|
||||||
- 8-12 Kapitel-Titel mit progressivem Aufbau
|
|
||||||
|
|
||||||
PFLICHT-ELEMENTE PRO KAPITEL
|
|
||||||
- 1 Gap-Opener am Anfang
|
|
||||||
- 2-3 Code-Beispiele (kurz, 5-15 Zeilen)
|
|
||||||
- Mindestens 1 Callout
|
|
||||||
- 1 Recall-Box am Ende
|
|
||||||
|
|
||||||
VERMEIDEN
|
|
||||||
- Einleitungs-Floskeln ("In diesem Kapitel lernen wir...")
|
|
||||||
- Wiederholungen aus vorherigem Kapitel
|
|
||||||
- Übersichts-Inhalt (steht im OnePager)
|
|
||||||
- Reine Referenz-Tabellen (stehen im Cheatsheet)
|
|
||||||
- Konzepte vorwegnehmen, die später dran sind
|
|
||||||
- Vorausgesetztes Wissen über das Thema
|
|
||||||
- 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)
|
|
||||||
- Subscript/Superscript via Unicode (nicht alle Fonts unterstützen das)
|
|
||||||
|
|
||||||
GENERIERUNG MIT FEEDBACK-LOOP (max 3 Iterationen)
|
|
||||||
1. HTML schreiben
|
|
||||||
2. weasyprint file.html file.pdf (Timeout 240s)
|
|
||||||
3. PDF zu PNGs: alle Seiten konvertieren
|
|
||||||
4. Mehrere Seiten ansehen (Cover, TOC, Kapitel 1, mittlere Seite, Ending)
|
|
||||||
5. Prüfen:
|
|
||||||
- Cover randlos und ohne Footer?
|
|
||||||
- TOC zeigt alle 3 Teile?
|
|
||||||
- Kapitel 1 fängt wirklich bei Null an?
|
|
||||||
- Kapitel beginnen auf neuer Seite?
|
|
||||||
- Code-Blöcke nicht über Seitenumbruch zerrissen?
|
|
||||||
- Recall-Boxen vollständig sichtbar?
|
|
||||||
- Footer mit Seitenzahl korrekt?
|
|
||||||
- Inline-Bolds in Callouts korrekt (nicht als Blöcke)?
|
|
||||||
- Steigt der Schwierigkeitsgrad spürbar von Kapitel zu Kapitel?
|
|
||||||
6. Bei Problemen: fixen, ab Schritt 2 wiederholen
|
|
||||||
7. Nach max 3 Iterationen ausgeben
|
|
||||||
|
|
||||||
INSTALLATION
|
|
||||||
- pip install weasyprint pdf2image
|
|
||||||
- apt install poppler-utils
|
|
||||||
```
|
|
||||||
@@ -1,171 +0,0 @@
|
|||||||
```
|
|
||||||
EXTENDED-GUIDE-STIL (HTML/CSS → PDF via WeasyPrint)
|
|
||||||
|
|
||||||
FORMAT
|
|
||||||
- A4 Hochformat, mehrseitig
|
|
||||||
- @page { size: A4; margin: 22mm 20mm 20mm 20mm; }
|
|
||||||
- @page :first { margin: 0; } für Cover
|
|
||||||
- Footer: Seitenzahl Mitte, Guide-Titel rechts (außer Cover)
|
|
||||||
|
|
||||||
UMFANG
|
|
||||||
- 15-20 Kapitel à ~15 Min Lesezeit
|
|
||||||
- ~1500 Wörter Fließtext pro Kapitel (gleich wie alle anderen Stufen)
|
|
||||||
- 2-3 Code-Beispiele pro Kapitel (gleich wie alle anderen, 5-15 Zeilen)
|
|
||||||
- 50-70 Seiten gesamt
|
|
||||||
- ~4-5h Lesezeit gesamt
|
|
||||||
|
|
||||||
EINSTIEGSNIVEAU
|
|
||||||
- Setzt Anfänger- UND Fortgeschritten-Guide voraus
|
|
||||||
- Grundbegriffe und fortgeschrittene Patterns werden NICHT mehr erklärt
|
|
||||||
- Verweist bei Bedarf auf vorherige Guides
|
|
||||||
- Geht direkt in Internals, Spezial-Themen und Edge-Cases
|
|
||||||
|
|
||||||
UNTERSCHIED ZU FORTGESCHRITTEN-GUIDE
|
|
||||||
- Kapitel-Größe IDENTISCH (1500 Wörter, 2-3 Code-Beispiele, 15 Min)
|
|
||||||
- Unterschied liegt nur in:
|
|
||||||
- THEMEN (Experten/Nischen, Internals, Sprach-Mechanismen)
|
|
||||||
- VORAUSGESETZTEM WISSEN (alle Patterns aus Fortgeschritten)
|
|
||||||
- KAPITEL-ANZAHL (15-20 statt 12-15)
|
|
||||||
- "WARUM" über "WIE" (mehr Trade-Offs, mehr Design-Entscheidungen)
|
|
||||||
|
|
||||||
KAPITEL-PROGRESSION
|
|
||||||
- Aufgeteilt in 3 Teile mit eigenen TOC-Sektionen
|
|
||||||
- Beispiele für PHP:
|
|
||||||
- Teil 1: Sprach-Internals — Reflection, SPL, Stream-Wrapper, GC, FFI
|
|
||||||
- Teil 2: Performance & Async — OpCache, Fibers, ReactPHP, Profiling, Caching
|
|
||||||
- Teil 3: Architektur & Patterns — DI-Container, Event-Dispatcher, CQRS, DDD, Hexagonal, Event Sourcing
|
|
||||||
- Jedes Kapitel geht in Bereiche, wo die meisten Entwickler nicht hingehen
|
|
||||||
- Bewusst dort, wo Mainstream-Tutorials aufhören
|
|
||||||
|
|
||||||
STRUKTUR
|
|
||||||
1. Cover: vollflächiger Hintergrund, Hero-Aussage mit "an der Grenze" oder ähnlichem Tone
|
|
||||||
2. Inhaltsverzeichnis: 3 Teile, nummeriert, Zeit-Marker (15 Min) - kann auf zwei Seiten brechen
|
|
||||||
3. Kapitel 1-N
|
|
||||||
4. Ending: Spaced-Repetition-Plan, nächste Schritte (außerhalb des offiziellen Lernpfads), Begleitmaterial
|
|
||||||
|
|
||||||
KAPITEL-AUFBAU
|
|
||||||
1. Kapitel-Head: große Nummer + Titel + Subtitle, Trennlinie
|
|
||||||
2. Gap-Opener: kursiv eingerahmt, anspruchsvolles Problem oder Tief-Frage
|
|
||||||
3. 3-5 H2-Sektionen (mehr als im Fortgeschritten-Guide)
|
|
||||||
4. Pro Sektion: Erklärtext + Code-Beispiel + ggf. Callout
|
|
||||||
5. Recall-Box am Ende (3 Fragen, anspruchsvoller als alle Stufen davor)
|
|
||||||
|
|
||||||
CODE-BEISPIELE
|
|
||||||
- Production-Code-Niveau, keine Demos
|
|
||||||
- Echte Library-Namen (Symfony, Doctrine, ReactPHP, EventSauce)
|
|
||||||
- Internals-Code zur Erklärung von PHP-Mechanismen
|
|
||||||
- Vereinfachte Implementierungen echter Frameworks
|
|
||||||
- Länge bleibt 5-15 Zeilen (wie alle anderen Stufen)
|
|
||||||
|
|
||||||
ELEMENTE
|
|
||||||
- Fließtext: justify mit Silbentrennung
|
|
||||||
- Codeblöcke: dunkler Hintergrund, syntax highlighting
|
|
||||||
- Inline-Code: heller Hintergrund, Hauptfarbe
|
|
||||||
- Tabellen: Header farbig (Hauptfarbe-Dunkel), Vergleichstabellen mit Trade-Offs
|
|
||||||
- Callouts in 3 Varianten: tip (grün), warn (rot), note (Hauptfarbe)
|
|
||||||
- Recall-Box: dunkler Hintergrund mit Akzentfarbe
|
|
||||||
|
|
||||||
TYPOGRAFIE
|
|
||||||
- Body: 10.5pt Serif (Charter), line-height 1.55
|
|
||||||
- H1 Kapitel: 22pt Sans-Serif bold, Hauptfarbe-Dunkel
|
|
||||||
- H2 Sektion: 14pt Sans-Serif bold
|
|
||||||
- H3 Subsektion: 11pt Sans-Serif bold
|
|
||||||
- Code: 8.5pt Monospace, line-height 1.5
|
|
||||||
- Inline-Code: 9pt Monospace
|
|
||||||
- Recall/Callout-Labels: 8pt uppercase, letter-spacing 1pt
|
|
||||||
- Cover-H1: 56pt Sans-Serif bold, letter-spacing -2pt
|
|
||||||
|
|
||||||
FARBEN (max 3 + Neutrals)
|
|
||||||
- Hauptfarbe: kräftig, an offizielle Farbe des Themas anlehnen
|
|
||||||
- Hauptfarbe-Dunkel: dunklere Variante für Headings und Akzente
|
|
||||||
- Hauptfarbe-Darker: noch dunkler für Cover-Verlauf und Recall-Box
|
|
||||||
- Hintergrund-Soft: helle Variante der Hauptfarbe
|
|
||||||
- Code-Hintergrund: #1e2a3a (dunkel)
|
|
||||||
- Text: #1a1a1a / muted #5a6470 / Linie #d8dde3
|
|
||||||
- Callout-Farben: grün/rot/Hauptfarbe
|
|
||||||
|
|
||||||
INFORMATION-GAP-OPENER (PFLICHT pro Kapitel)
|
|
||||||
- Kursiv, eingerahmt mit Hauptfarbe-Border
|
|
||||||
- Anspruchsvolles Problem oder Internals-Frage als Aufhänger
|
|
||||||
- Niveau: setzt fortgeschrittene Praxis voraus
|
|
||||||
- Beispiele:
|
|
||||||
- "Wie weiß Symfony zur Laufzeit, welche Routen in deinem Controller stecken?"
|
|
||||||
- "PHP räumt Speicher automatisch auf – meistens. Aber in Long-Running-Prozessen..."
|
|
||||||
- "Anämische Entities sind in PHP weit verbreitet..."
|
|
||||||
|
|
||||||
RECALL-BOX (PFLICHT pro Kapitel)
|
|
||||||
- Am Kapitel-Ende
|
|
||||||
- 3 Fragen, anspruchsvoller als Fortgeschritten
|
|
||||||
- Fragen nach Warum/Wofür/Wann genau statt Was/Wie
|
|
||||||
- Code-Snippets in Fragen mit Akzentfarbe hervorgehoben
|
|
||||||
|
|
||||||
ENDING (PFLICHT)
|
|
||||||
- Spaced-Repetition-Plan: 4 Karten (Heute, +7 Tage, +30 Tage, +90 Tage)
|
|
||||||
- Sehr langfristige Spacing-Abstände
|
|
||||||
- Aufgaben anspruchsvoll (eigenes Spezialprojekt, Source-Code lesen)
|
|
||||||
- "Was als nächstes lernen" — bewusst außerhalb offizieller Lernpfade
|
|
||||||
(Source-Code, eigene Extensions, Sprach-Design, RFCs)
|
|
||||||
- Verweis auf ALLE Begleitmaterialien (komplette Reihe)
|
|
||||||
|
|
||||||
CALLOUT-NUTZUNG
|
|
||||||
- tip (grün): Best Practice für Spezial-Cases, Library-Empfehlung
|
|
||||||
- warn (rot): subtile Fallen, Architektur-Anti-Patterns, Komplexitäts-Warnungen
|
|
||||||
- note (Hauptfarbe): Hintergrund-Info, alternative Lösung, "wann lohnt sich das"
|
|
||||||
|
|
||||||
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)
|
|
||||||
- Mehrzeiliger Body-Text in <p style="margin:0;"> wrappen wenn Inline-Bolds drin sind
|
|
||||||
|
|
||||||
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)
|
|
||||||
- Bei Inline-Bolds im Gap-Text wird sonst jedes <b> zum Block
|
|
||||||
|
|
||||||
THEMENSPEZIFISCHE ANPASSUNGEN (vor Generierung wählen)
|
|
||||||
- Hauptfarbe: offizielle Farbe des Themas
|
|
||||||
- Logo-Buchstabe(n) oder Kürzel
|
|
||||||
- Version + Stand-Datum
|
|
||||||
- 15-20 Kapitel-Titel: Internals, Spezial-Themen, Production-Edge
|
|
||||||
- Themen, die der Mainstream-Entwickler nicht täglich braucht
|
|
||||||
|
|
||||||
PFLICHT-ELEMENTE PRO KAPITEL
|
|
||||||
- 1 Gap-Opener am Anfang
|
|
||||||
- 2-3 Code-Beispiele (5-15 Zeilen, gleich wie alle anderen Stufen)
|
|
||||||
- Mindestens 1 Callout
|
|
||||||
- 1 Recall-Box am Ende
|
|
||||||
|
|
||||||
VERMEIDEN
|
|
||||||
- Wiederholung von Anfänger- und Fortgeschritten-Themen
|
|
||||||
- Einleitungs-Floskeln ("In diesem Kapitel lernen wir...")
|
|
||||||
- Übersichts-Inhalt (steht im OnePager)
|
|
||||||
- Reine Referenz-Tabellen (stehen im Cheatsheet)
|
|
||||||
- Toy-Beispiele (Production-Niveau zeigen)
|
|
||||||
- Themen, die der Mainstream-Entwickler täglich braucht
|
|
||||||
(gehören in Anfänger oder Fortgeschritten)
|
|
||||||
- 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)
|
|
||||||
|
|
||||||
GENERIERUNG MIT FEEDBACK-LOOP (max 3 Iterationen)
|
|
||||||
1. HTML schreiben (sehr langes Dokument, ~3500-5000 Zeilen typisch)
|
|
||||||
2. weasyprint file.html file.pdf (Timeout 300s, große Datei)
|
|
||||||
3. PDF zu PNGs: alle Seiten konvertieren (dpi=90 für Memory-Effizienz)
|
|
||||||
4. Schlüsselseiten ansehen: Cover, TOC, Kapitel 1, mittlere Seite, Ending
|
|
||||||
5. Prüfen:
|
|
||||||
- Cover randlos und ohne Footer?
|
|
||||||
- TOC zeigt alle 3 Teile? (kann auf 2 Seiten brechen bei 15+ Kapiteln, OK)
|
|
||||||
- Kapitel beginnen auf neuer Seite?
|
|
||||||
- Code-Blöcke nicht über Seitenumbruch zerrissen?
|
|
||||||
- Recall-Boxen vollständig sichtbar?
|
|
||||||
- Footer mit Seitenzahl korrekt?
|
|
||||||
- Setzt der Guide spürbar Anfänger+Fortgeschritten-Wissen voraus?
|
|
||||||
- Sind Themen wirklich Experten-/Nischen-Niveau?
|
|
||||||
- Inline-Bolds in Gap-Openers und Callouts korrekt (nicht als Blöcke)?
|
|
||||||
6. Bei Problemen: fixen, ab Schritt 2 wiederholen
|
|
||||||
7. Nach max 3 Iterationen ausgeben
|
|
||||||
|
|
||||||
INSTALLATION
|
|
||||||
- pip install weasyprint pdf2image
|
|
||||||
- apt install poppler-utils
|
|
||||||
```
|
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
```
|
|
||||||
FORTGESCHRITTEN-GUIDE-STIL (HTML/CSS → PDF via WeasyPrint)
|
|
||||||
|
|
||||||
FORMAT
|
|
||||||
- A4 Hochformat, mehrseitig
|
|
||||||
- @page { size: A4; margin: 22mm 20mm 20mm 20mm; }
|
|
||||||
- @page :first { margin: 0; } für Cover
|
|
||||||
- Footer: Seitenzahl Mitte, Guide-Titel rechts (außer Cover)
|
|
||||||
|
|
||||||
UMFANG
|
|
||||||
- 12-15 Kapitel à ~15 Min Lesezeit
|
|
||||||
- ~1500 Wörter Fließtext pro Kapitel (gleich wie Anfänger)
|
|
||||||
- 2-3 Code-Beispiele pro Kapitel (gleich wie Anfänger, 5-15 Zeilen)
|
|
||||||
- 30-50 Seiten gesamt
|
|
||||||
- ~3-4h Lesezeit gesamt
|
|
||||||
|
|
||||||
EINSTIEGSNIVEAU
|
|
||||||
- Setzt Anfänger-Guide oder gleichwertiges Vorwissen voraus
|
|
||||||
- Grundbegriffe werden NICHT mehr erklärt
|
|
||||||
- Verweist bei Bedarf auf Anfänger-Guide
|
|
||||||
- Geht direkt in fortgeschrittene Patterns und Production-Tools
|
|
||||||
|
|
||||||
UNTERSCHIED ZU ANFÄNGER-GUIDE
|
|
||||||
- Kapitel-Größe IDENTISCH (1500 Wörter, 2-3 Code-Beispiele, 15 Min)
|
|
||||||
- Unterschied liegt nur in:
|
|
||||||
- THEMEN (anspruchsvoller, weniger bekannt)
|
|
||||||
- VORAUSGESETZTEM WISSEN (Grundlagen werden nicht wiederholt)
|
|
||||||
- REIFE der Code-Beispiele (Production-nah statt Demo)
|
|
||||||
- KAPITEL-ANZAHL (12-15 statt 8-12)
|
|
||||||
|
|
||||||
KAPITEL-PROGRESSION
|
|
||||||
- Aufgeteilt in 3 Teile mit eigenen TOC-Sektionen
|
|
||||||
- Beispiele für PHP:
|
|
||||||
- Teil 1: OOP-Patterns — Interfaces, Traits, Enums, Attribute
|
|
||||||
- Teil 2: Funktional & Generators — Closures, Higher-Order, Generators, Generics
|
|
||||||
- Teil 3: Production-Tools — PDO, HTTP-Clients, Static Analysis, Tests
|
|
||||||
- Jedes Kapitel ist tiefer als ein Anfänger-Kapitel
|
|
||||||
- Mehr Edge Cases, mehr "warum genau so"
|
|
||||||
- Production-Code-Niveau
|
|
||||||
|
|
||||||
STRUKTUR
|
|
||||||
1. Cover: vollflächiger Hintergrund, Hero-Aussage mit "tiefer" oder ähnlichem Tone
|
|
||||||
2. Inhaltsverzeichnis: 3 Teile, nummeriert, mit Zeit-Markern (15 Min)
|
|
||||||
3. Kapitel 1-12
|
|
||||||
4. Ending: Spaced-Repetition-Plan, nächste Schritte, Begleitmaterial
|
|
||||||
|
|
||||||
KAPITEL-AUFBAU
|
|
||||||
1. Kapitel-Head: große Nummer + Titel + Subtitle, Trennlinie
|
|
||||||
2. Gap-Opener: kursiv eingerahmt, konkretes Praxis-Problem
|
|
||||||
3. 2-4 H2-Sektionen
|
|
||||||
4. Pro Sektion: Erklärtext + Code-Beispiel + ggf. Callout
|
|
||||||
5. Recall-Box am Ende (3 Fragen, anspruchsvoller als im Anfänger)
|
|
||||||
|
|
||||||
CODE-BEISPIELE
|
|
||||||
- Realistischer als im Anfänger-Guide (kein "foo/bar")
|
|
||||||
- Production-nahe Patterns
|
|
||||||
- TypeScript/Type-Hints idiomatisch
|
|
||||||
- Echte Library-Namen (Guzzle, Doctrine, PHPStan, Symfony)
|
|
||||||
- Mehr Edge Cases zeigen
|
|
||||||
- Länge bleibt 5-15 Zeilen (wie Anfänger)
|
|
||||||
|
|
||||||
ELEMENTE
|
|
||||||
- Fließtext: justify mit Silbentrennung
|
|
||||||
- Codeblöcke: dunkler Hintergrund, syntax highlighting
|
|
||||||
- Inline-Code: heller Hintergrund, Hauptfarbe
|
|
||||||
- Tabellen: Header farbig (Hauptfarbe-Dunkel)
|
|
||||||
- Callouts in 3 Varianten: tip (grün), warn (rot), note (Hauptfarbe)
|
|
||||||
- Recall-Box: dunkler Hintergrund mit Akzentfarbe
|
|
||||||
|
|
||||||
TYPOGRAFIE
|
|
||||||
- Body: 10.5pt Serif (Charter), line-height 1.55
|
|
||||||
- H1 Kapitel: 22pt Sans-Serif bold, Hauptfarbe-Dunkel
|
|
||||||
- H2 Sektion: 14pt Sans-Serif bold
|
|
||||||
- H3 Subsektion: 11pt Sans-Serif bold
|
|
||||||
- Code: 8.5pt Monospace, line-height 1.5
|
|
||||||
- Inline-Code: 9pt Monospace
|
|
||||||
- Recall/Callout-Labels: 8pt uppercase, letter-spacing 1pt
|
|
||||||
- Cover-H1: 56pt Sans-Serif bold, letter-spacing -2pt
|
|
||||||
|
|
||||||
FARBEN (max 3 + Neutrals)
|
|
||||||
- Hauptfarbe: kräftig, an offizielle Farbe des Themas anlehnen
|
|
||||||
- Hauptfarbe-Dunkel: dunklere Variante für Headings und Akzente
|
|
||||||
- Hauptfarbe-Darker: noch dunkler für Cover-Verlauf und Recall-Box
|
|
||||||
- Hintergrund-Soft: helle Variante der Hauptfarbe
|
|
||||||
- Code-Hintergrund: #1e2a3a (dunkel)
|
|
||||||
- Text: #1a1a1a / muted #5a6470 / Linie #d8dde3
|
|
||||||
- Callout-Farben: grün/rot/Hauptfarbe
|
|
||||||
|
|
||||||
INFORMATION-GAP-OPENER (PFLICHT pro Kapitel)
|
|
||||||
- Kursiv, eingerahmt mit Hauptfarbe-Border
|
|
||||||
- Konkretes Praxis-Problem als Aufhänger
|
|
||||||
- Niveau: setzt Anfänger-Wissen voraus
|
|
||||||
- Beispiele:
|
|
||||||
- "Du hast drei verschiedene Logger – Datei, Datenbank, Sentry..."
|
|
||||||
- "Du sollst die Zeilen einer 5-GB-Logdatei verarbeiten..."
|
|
||||||
- "SQL-Injection ist seit 20 Jahren die häufigste Web-Sicherheitslücke..."
|
|
||||||
|
|
||||||
RECALL-BOX (PFLICHT pro Kapitel)
|
|
||||||
- Am Kapitel-Ende
|
|
||||||
- 3 Fragen, anspruchsvoller als im Anfänger-Guide
|
|
||||||
- Fragen nach Wann/Warum/Wofür statt Was/Wie
|
|
||||||
- Code-Snippets in Fragen mit Akzentfarbe hervorgehoben
|
|
||||||
|
|
||||||
ENDING (PFLICHT)
|
|
||||||
- Spaced-Repetition-Plan: 4 Karten (Heute, +3 Tage, +14 Tage, +60 Tage)
|
|
||||||
- Anspruchsvollere Spacing-Abstände als im Anfänger-Guide
|
|
||||||
- Aufgaben anspruchsvoller (echtes Projekt aufsetzen)
|
|
||||||
- "Was als nächstes lernen" mit Spezialisierungs-Vorschlägen Richtung Extended
|
|
||||||
- Verweis auf alle Begleitmaterialien (OnePager, Cheatsheet, Mini, Anfänger)
|
|
||||||
|
|
||||||
CALLOUT-NUTZUNG
|
|
||||||
- tip (grün): Best Practice, idiomatische Lösung, Library-Empfehlung
|
|
||||||
- warn (rot): Fallen, häufige Anti-Patterns, Sicherheits-Risiken
|
|
||||||
- note (Hauptfarbe): Hintergrund-Info, alternative Lösung, Querverweis
|
|
||||||
|
|
||||||
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)
|
|
||||||
- Mehrzeiliger Body-Text in <p style="margin:0;"> wrappen wenn Inline-Bolds drin sind
|
|
||||||
|
|
||||||
THEMENSPEZIFISCHE ANPASSUNGEN (vor Generierung wählen)
|
|
||||||
- Hauptfarbe: offizielle Farbe des Themas
|
|
||||||
- Logo-Buchstabe(n) oder Kürzel
|
|
||||||
- Version + Stand-Datum
|
|
||||||
- 12-15 Kapitel-Titel: fortgeschrittene Patterns, Tools, Production-Aspekte
|
|
||||||
- Keine Wiederholung der Anfänger-Grundlagen
|
|
||||||
|
|
||||||
PFLICHT-ELEMENTE PRO KAPITEL
|
|
||||||
- 1 Gap-Opener am Anfang
|
|
||||||
- 2-3 Code-Beispiele (5-15 Zeilen, gleich wie Anfänger)
|
|
||||||
- Mindestens 1 Callout
|
|
||||||
- 1 Recall-Box am Ende
|
|
||||||
|
|
||||||
VERMEIDEN
|
|
||||||
- Wiederholung von Grundlagen aus dem Anfänger-Guide
|
|
||||||
- Einleitungs-Floskeln ("In diesem Kapitel lernen wir...")
|
|
||||||
- Übersichts-Inhalt (steht im OnePager)
|
|
||||||
- Reine Referenz-Tabellen (stehen im Cheatsheet)
|
|
||||||
- Toy-Beispiele wie foo/bar (Production-Code zeigen)
|
|
||||||
- Themen, die in Anfänger oder Extended besser passen
|
|
||||||
- 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)
|
|
||||||
|
|
||||||
GENERIERUNG MIT FEEDBACK-LOOP (max 3 Iterationen)
|
|
||||||
1. HTML schreiben
|
|
||||||
2. weasyprint file.html file.pdf (Timeout 300s)
|
|
||||||
3. PDF zu PNGs: alle Seiten konvertieren
|
|
||||||
4. Schlüsselseiten ansehen: Cover, TOC, Kapitel 1, mittlere Seite, Ending
|
|
||||||
5. Prüfen:
|
|
||||||
- Cover randlos und ohne Footer?
|
|
||||||
- TOC zeigt alle 3 Teile?
|
|
||||||
- Kapitel beginnen auf neuer Seite?
|
|
||||||
- Code-Blöcke nicht über Seitenumbruch zerrissen?
|
|
||||||
- Recall-Boxen vollständig sichtbar?
|
|
||||||
- Footer mit Seitenzahl korrekt?
|
|
||||||
- Setzt der Guide spürbar Anfänger-Wissen voraus?
|
|
||||||
- Sind Code-Beispiele realistisch (kein foo/bar)?
|
|
||||||
- Inline-Bolds in Callouts korrekt (nicht als Blöcke)?
|
|
||||||
6. Bei Problemen: fixen, ab Schritt 2 wiederholen
|
|
||||||
7. Nach max 3 Iterationen ausgeben
|
|
||||||
|
|
||||||
INSTALLATION
|
|
||||||
- pip install weasyprint pdf2image
|
|
||||||
- apt install poppler-utils
|
|
||||||
```
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user