Source files (src/) and rendered bundle (www/) extracted on 2026-04-29T01:35:46+02:00. Adds nginx:alpine Dockerfile + docker-compose.yml (Caddy-labels) so the bot runs stand-alone or as a per-customer template clone. Parent monorepo commit: d2c816f3edbc9760802a11b29ff4151c7aad4b46 Bot version: 2026-04-21
497 lines
18 KiB
JSON
497 lines
18 KiB
JSON
{
|
||
"version": "2026-04-24",
|
||
"updated": "2026-04-24",
|
||
"curricula": [
|
||
{
|
||
"id": "bar-basics",
|
||
"title": "1 · Bar-Basics Recht",
|
||
"short": "JuSchG, § 43 IfSG, LMHV, HACCP",
|
||
"icon": "shield",
|
||
"color": "#f59e0b",
|
||
"description": "Die rechtlichen Mindestpflichten hinter der Theke: Jugendschutz, Belehrung nach § 43 IfSG, Lebensmittelhygiene, HACCP-Grundsätze.",
|
||
"source_md": "bar-basics.md",
|
||
"modules": [
|
||
{
|
||
"id": "juschg",
|
||
"title": "Jugendschutz (§ 9 / § 10 JuSchG)",
|
||
"objectives": [
|
||
"Altersgrenzen für Bier/Wein/Spirituosen sicher benennen",
|
||
"Ausnahme § 9 Abs. 2 (Personensorge) erklären",
|
||
"Testkauf-Situationen sauber handhaben"
|
||
],
|
||
"topics": ["§ 9 JuSchG", "§ 10 JuSchG", "Alkopops", "Testkauf", "Ausweiskontrolle"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Jugendschutz"
|
||
},
|
||
{
|
||
"id": "ifsg43",
|
||
"title": "Belehrung nach § 43 IfSG",
|
||
"objectives": [
|
||
"Erst- und Folgebelehrung unterscheiden",
|
||
"Meldepflichten bei Infektionen kennen",
|
||
"Frist-Grenzen im Anstellungsfall"
|
||
],
|
||
"topics": ["§ 43 IfSG", "Gesundheitszeugnis", "Erstbelehrung", "Folgebelehrung"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Infektionsschutzgesetz § 43"
|
||
},
|
||
{
|
||
"id": "lmhv-haccp",
|
||
"title": "LMHV + VO 852/2004 + HACCP",
|
||
"objectives": [
|
||
"Die 7 HACCP-Grundsätze aufzählen",
|
||
"Kühltemperatur-Grenzen (+4 °C, −18 °C)",
|
||
"Dokumentationspflicht erklären"
|
||
],
|
||
"topics": ["VO 852/2004", "LMHV § 4", "HACCP", "Kühlkette", "Reinigungsplan"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "LMHV + HACCP"
|
||
},
|
||
{
|
||
"id": "konzession",
|
||
"title": "Konzessionen & Gestattung",
|
||
"objectives": [
|
||
"Gaststättenerlaubnis vs. Gestattung",
|
||
"§ 12 GastG bei Events",
|
||
"Pflichten der Schankkraft ohne Konzession"
|
||
],
|
||
"topics": ["GastG", "§ 12 GastG Gestattung", "Konzessionspflicht"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Gastgewerbeverordnung"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "mixology",
|
||
"title": "2 · Mixology Basics",
|
||
"short": "Klassiker, Technik, Glaswahl",
|
||
"icon": "medal",
|
||
"color": "#ea580c",
|
||
"description": "IBA-Klassiker und das Handwerk der Bar — rühren, shaken, bauen, muddeln. Von Old Fashioned bis Aperol Spritz.",
|
||
"source_md": "mixology-grundlagen.md",
|
||
"modules": [
|
||
{
|
||
"id": "technik",
|
||
"title": "Grundtechniken (Rühren/Shaken/Build/Muddle)",
|
||
"objectives": [
|
||
"Die 5 Techniken den richtigen Drinks zuordnen",
|
||
"Gain-Verlust durch zu langes Shaken verstehen",
|
||
"Dry Shake bei Eiweißdrinks einsetzen"
|
||
],
|
||
"topics": ["Stirring", "Shaking", "Building", "Muddling", "Dry Shake"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Techniken"
|
||
},
|
||
{
|
||
"id": "klassiker",
|
||
"title": "Die 10 Unforgettables",
|
||
"objectives": [
|
||
"Rezepte für Old Fashioned, Negroni, Daiquiri sicher",
|
||
"Mojito, Margarita, Martini, Manhattan",
|
||
"Whisky Sour, Aperol Spritz, Gin Tonic"
|
||
],
|
||
"topics": ["Old Fashioned", "Negroni", "Daiquiri", "Mojito", "Margarita", "Martini"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Die Klassiker"
|
||
},
|
||
{
|
||
"id": "glas-garnitur",
|
||
"title": "Glaswahl & Garnituren",
|
||
"objectives": [
|
||
"Tumbler/Highball/Coupette richtig einsetzen",
|
||
"Zeste-Technik (Öl freisetzen)",
|
||
"Salzrand & Garnitur-Basics"
|
||
],
|
||
"topics": ["Tumbler", "Highball", "Coupette", "Zeste", "Salzrand"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Glaswahl"
|
||
},
|
||
{
|
||
"id": "masse",
|
||
"title": "Maß-Systeme (cl / ml / oz)",
|
||
"objectives": [
|
||
"cl-ml-oz schnell umrechnen",
|
||
"Jigger sicher anwenden",
|
||
"Freihand-Schütten vermeiden"
|
||
],
|
||
"topics": ["cl", "ml", "oz", "Jigger", "1 oz = 3 cl"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Maß-Systeme"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "service",
|
||
"title": "3 · Service & Etikette",
|
||
"short": "Sequence, Reklamation, Zahlung",
|
||
"icon": "handshake",
|
||
"color": "#d97706",
|
||
"description": "Gastgeber sein: Sequence of Service, Bestellaufnahme, Reklamationshandling (LAST), Zahlung & Trinkgeld.",
|
||
"source_md": "service-etikette.md",
|
||
"modules": [
|
||
{
|
||
"id": "sequence",
|
||
"title": "Sequence of Service",
|
||
"objectives": [
|
||
"Die 10 Schritte vom Begrüßen bis zum Farewell",
|
||
"Check-Back-Timing (2-3 Min nach Speiseabgabe)",
|
||
"Gastrhythmus erkennen"
|
||
],
|
||
"topics": ["Greet", "Take Order", "Check-Back", "Farewell"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Sequence of Service"
|
||
},
|
||
{
|
||
"id": "reklamation",
|
||
"title": "Reklamation (LAST-Regel)",
|
||
"objectives": [
|
||
"Listen-Acknowledge-Solve-Thank anwenden",
|
||
"Entschädigung angemessen wählen",
|
||
"Eskalation zur Schichtleitung"
|
||
],
|
||
"topics": ["LAST", "Entschädigung", "Eskalation"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Reklamationsmanagement"
|
||
},
|
||
{
|
||
"id": "zahlung",
|
||
"title": "Zahlung, Trinkgeld, Bonpflicht",
|
||
"objectives": [
|
||
"Bonpflicht § 146a AO sicher umsetzen",
|
||
"Trinkgeld-Etikette (DE)",
|
||
"Split-Rechnung effizient"
|
||
],
|
||
"topics": ["§ 146a AO", "Trinkgeld", "Split-Rechnung", "Kartenzahlung"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Zahlungsabwicklung"
|
||
},
|
||
{
|
||
"id": "gast-konflikt",
|
||
"title": "Heikle Situationen",
|
||
"objectives": [
|
||
"Angetrunkenen Gast deeskalieren",
|
||
"Zechpreller richtig handhaben",
|
||
"Security/110 richtig einsetzen"
|
||
],
|
||
"topics": ["Deeskalation", "Zechprellerei § 263a", "Hausrecht"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Heikle Situationen"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "event-tech",
|
||
"title": "4 · Veranstaltungstechnik",
|
||
"short": "DGUV V17, VStättVO, Rigging",
|
||
"icon": "shield",
|
||
"color": "#b45309",
|
||
"description": "Sicherheit im Event-Betrieb: DGUV V17/V18, Versammlungsstättenverordnung, Rigging-Basics, elektrische Sicherheit, Pyrotechnik.",
|
||
"source_md": "veranstaltungstechnik-basics.md",
|
||
"modules": [
|
||
{
|
||
"id": "dguv",
|
||
"title": "DGUV V17/V18 + Regel 115-002",
|
||
"objectives": [
|
||
"Anwendungsbereich V17 vs. V18",
|
||
"Pflicht-Unterweisung + Prüfung (jährlich)",
|
||
"Verantwortliche Person nach VStättVO"
|
||
],
|
||
"topics": ["DGUV V17", "DGUV V18", "Regel 115-002", "Verantwortliche Person"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "DGUV V17 & V18"
|
||
},
|
||
{
|
||
"id": "vstaettvo",
|
||
"title": "VStättVO + Brandschutz",
|
||
"objectives": [
|
||
"Besucherzahl-Grenzen (> 200 indoor / > 1000 outdoor)",
|
||
"Fluchtweg-Regeln (max. 30 m)",
|
||
"Brandschutz auf Bühne (offenes Feuer grundsätzlich verboten)"
|
||
],
|
||
"topics": ["MVStättVO", "Fluchtweg", "Brandschau", "B1-Brandverhalten"],
|
||
"difficulty": "schwer",
|
||
"source_heading": "Versammlungsstättenverordnung"
|
||
},
|
||
{
|
||
"id": "rigging",
|
||
"title": "Rigging & Lastberechnung",
|
||
"objectives": [
|
||
"WLL vs. MBL unterscheiden",
|
||
"Sicherheitsfaktoren (5:1 / 7:1 / 10:1)",
|
||
"Secondary (Safety) Pflicht"
|
||
],
|
||
"topics": ["WLL", "MBL", "Secondary", "Kettenzug", "Traverse"],
|
||
"difficulty": "schwer",
|
||
"source_heading": "Rigging"
|
||
},
|
||
{
|
||
"id": "pyro-strom",
|
||
"title": "Pyrotechnik + Elektrik",
|
||
"objectives": [
|
||
"T1 vs. T2 Pyrotechnik (§ 20 / § 27 SprengG)",
|
||
"DGUV V3 Prüfung (Elektrik)",
|
||
"FI/RCD Pflicht im Bühnenumfeld"
|
||
],
|
||
"topics": ["SprengG", "Kat. T1/T2", "DGUV V3", "FI-Schutzschalter"],
|
||
"difficulty": "schwer",
|
||
"source_heading": "Pyrotechnik & Elektrische Sicherheit"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "licht-ton",
|
||
"title": "5 · Licht & Ton",
|
||
"short": "DMX, Mischpult, 99 dB",
|
||
"icon": "medal",
|
||
"color": "#92400e",
|
||
"description": "Grundlagen der Licht- und Tontechnik: DMX-512, Moving Lights, Mischpult-Signal, FOH vs. Monitor, DIN 15905-5 Lärmschutz.",
|
||
"source_md": "licht-ton-basics.md",
|
||
"modules": [
|
||
{
|
||
"id": "dmx",
|
||
"title": "DMX-512 Grundlagen",
|
||
"objectives": [
|
||
"512 Kanäle, Startadresse, Daisy Chain",
|
||
"Terminator + XLR 110 Ω",
|
||
"Art-Net / sACN Überblick"
|
||
],
|
||
"topics": ["DMX-512", "Startadresse", "Universum", "Terminator", "sACN"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "DMX-512"
|
||
},
|
||
{
|
||
"id": "scheinwerfer",
|
||
"title": "Scheinwerfer-Typen + 4-Licht-Konzept",
|
||
"objectives": [
|
||
"Spot / Wash / Beam unterscheiden",
|
||
"Key/Fill/Back/Kicker anwenden",
|
||
"LED vs. Entladungslampe"
|
||
],
|
||
"topics": ["Spot", "Wash", "Beam", "Key-Licht", "Fill"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Scheinwerfer-Typen"
|
||
},
|
||
{
|
||
"id": "mischpult",
|
||
"title": "Mischpult-Signal + Gain-Staging",
|
||
"objectives": [
|
||
"Gain-Stufe zuerst einstellen",
|
||
"EQ: schnitzen statt boosten",
|
||
"FOH vs. Monitor-Mix"
|
||
],
|
||
"topics": ["Gain", "EQ", "Aux-Send", "FOH", "Monitor"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Mischpult-Struktur"
|
||
},
|
||
{
|
||
"id": "din15905",
|
||
"title": "DIN 15905-5 Schallschutz",
|
||
"objectives": [
|
||
"99 dB(A) LAeq 30 min Grenze",
|
||
"135 dB(C) Peak-Grenze",
|
||
"Messpflicht ab 85 dB(A)"
|
||
],
|
||
"topics": ["DIN 15905-5", "LAeq", "LCpk", "Gehörschutz"],
|
||
"difficulty": "schwer",
|
||
"source_heading": "DIN 15905-5"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "kasse-recht",
|
||
"title": "6 · Kassensystem-Recht",
|
||
"short": "KassenSichV, TSE, § 146a AO",
|
||
"icon": "award",
|
||
"color": "#fbbf24",
|
||
"description": "Das Kassensystem als rechtliche Infrastruktur: TSE-Pflicht, Bonausgabepflicht, DSFinV-K, Kassen-Nachschau.",
|
||
"source_md": "kassensystem-recht.md",
|
||
"modules": [
|
||
{
|
||
"id": "tse",
|
||
"title": "TSE-Pflicht + § 146a AO",
|
||
"objectives": [
|
||
"Was die TSE technisch leistet",
|
||
"Kassen-Meldepflicht (ELSTER seit 2025)",
|
||
"Unveränderbare Aufzeichnung"
|
||
],
|
||
"topics": ["TSE", "BSI TR-03153", "§ 146a AO", "ELSTER"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "KassenSichV"
|
||
},
|
||
{
|
||
"id": "bon",
|
||
"title": "Bonpflicht + Pflichtinhalte",
|
||
"objectives": [
|
||
"Pflichtinhalte eines Bons",
|
||
"Digitaler Bon vs. Papier",
|
||
"Befreiungs-Ausnahme § 148 AO"
|
||
],
|
||
"topics": ["Belegausgabepflicht", "§ 6 KassenSichV", "QR-Code"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Bonpflicht"
|
||
},
|
||
{
|
||
"id": "kassenfuehrung",
|
||
"title": "Kassenführung im Tagesgeschäft",
|
||
"objectives": [
|
||
"Kassensturz + Z-Bon",
|
||
"Storno-Regeln dokumentieren",
|
||
"Trinkgeld separat"
|
||
],
|
||
"topics": ["Z-Bon", "Kassensturz", "Storno", "Trinkgeld"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Kassenführung"
|
||
},
|
||
{
|
||
"id": "nachschau",
|
||
"title": "Kassen-Nachschau (§ 146b AO)",
|
||
"objectives": [
|
||
"Was das Finanzamt darf",
|
||
"DSFinV-K-Export bereitstellen",
|
||
"Ruhig bleiben, Steuerberater rufen"
|
||
],
|
||
"topics": ["§ 146b AO", "DSFinV-K", "Prüfung", "Zuschätzung"],
|
||
"difficulty": "schwer",
|
||
"source_heading": "Kassen-Nachschau"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "arbeitsschutz",
|
||
"title": "7 · Arbeitsschutz",
|
||
"short": "ArbZG, Unfälle, 1. Hilfe",
|
||
"icon": "clock",
|
||
"color": "#f97316",
|
||
"description": "Arbeitszeitgesetz, Mindestlohn, typische Unfallrisiken, Alkohol am Arbeitsplatz, Stress und die Erste-Hilfe-Kette.",
|
||
"source_md": "arbeitsschutz-gastro.md",
|
||
"modules": [
|
||
{
|
||
"id": "arbzg",
|
||
"title": "ArbZG in der Gastro",
|
||
"objectives": [
|
||
"Ruhezeit (11h, Gastro-Ausnahme 10h)",
|
||
"Nachtarbeit-Zuschlag 25 %",
|
||
"Pflicht-Arbeitszeiterfassung (BAG 2022)"
|
||
],
|
||
"topics": ["§ 3-5 ArbZG", "Ruhezeit", "Nachtarbeit", "Zeiterfassung"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Arbeitszeitgesetz"
|
||
},
|
||
{
|
||
"id": "mindestlohn",
|
||
"title": "Mindestlohn 2026 + Jugend/Mutter",
|
||
"objectives": [
|
||
"13,90 € / h 2026",
|
||
"Jugendarbeitsschutz < 18",
|
||
"Mutterschutz-Arbeitsverbote"
|
||
],
|
||
"topics": ["MiLoG", "JArbSchG", "MuSchG"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Mindestlohn 2026"
|
||
},
|
||
{
|
||
"id": "unfaelle",
|
||
"title": "Typische Unfälle + Prävention",
|
||
"objectives": [
|
||
"Top-5 Unfallarten in Gastro/Event",
|
||
"S2-Schuhe, Schnittschutz, Hitzeschutz",
|
||
"BG-Meldung > 3 Tage AU"
|
||
],
|
||
"topics": ["Stürze", "Schnittverletzung", "Verbrennung", "§ 193 SGB VII"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Unfallrisiken"
|
||
},
|
||
{
|
||
"id": "erste-hilfe",
|
||
"title": "Erste Hilfe + Notfallplan",
|
||
"objectives": [
|
||
"Notruf 112 mit W-Fragen",
|
||
"CPR 30:2 Rhythmus",
|
||
"Verbandbuch + Ersthelfer-Quote"
|
||
],
|
||
"topics": ["112", "CPR", "Verbandbuch", "DGUV V1 § 26"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Erste-Hilfe-Kette"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "faq",
|
||
"title": "8 · FAQ Alltag",
|
||
"short": "20 typische Situationen",
|
||
"icon": "star",
|
||
"color": "#eab308",
|
||
"description": "Aus dem echten Bar-/Event-Alltag: 20 konkrete Situationen mit pragmatischer Handlungsanweisung.",
|
||
"source_md": "faq-frequent-situations.md",
|
||
"modules": [
|
||
{
|
||
"id": "faq-alkohol",
|
||
"title": "FAQ: Alkohol & Jugendschutz",
|
||
"objectives": [
|
||
"Minderjährige an der Theke",
|
||
"Angetrunkene Gäste",
|
||
"Fahrtüchtigkeit"
|
||
],
|
||
"topics": ["§ 9 JuSchG", "§ 323c StGB", "Hausrecht"],
|
||
"difficulty": "einfach",
|
||
"source_heading": "Alkohol & Jugendschutz"
|
||
},
|
||
{
|
||
"id": "faq-zahlung",
|
||
"title": "FAQ: Zahlung & Zechpreller",
|
||
"objectives": [
|
||
"Bei Zahlungsweigerung ruhig bleiben",
|
||
"Zechprellerei § 263a StGB",
|
||
"Kartenzahlung defekt → Bar"
|
||
],
|
||
"topics": ["§ 263a StGB", "Zechprellerei", "Rechnung"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Zahlung & Abrechnung"
|
||
},
|
||
{
|
||
"id": "faq-notfall",
|
||
"title": "FAQ: Notfall, Brand, Schlägerei",
|
||
"objectives": [
|
||
"Fettbrand: niemals Wasser",
|
||
"Schlägerei: 110, nicht dazwischen",
|
||
"Stromausfall: Notbeleuchtung"
|
||
],
|
||
"topics": ["CO₂-Löscher", "110", "112", "Notbeleuchtung"],
|
||
"difficulty": "mittel",
|
||
"source_heading": "Notfälle"
|
||
},
|
||
{
|
||
"id": "faq-event",
|
||
"title": "FAQ: Event-Technik-Pannen",
|
||
"objectives": [
|
||
"Pult-Crash kurz vor Türöffnung",
|
||
"Musiker will über 99 dB",
|
||
"Rigging-Unfall"
|
||
],
|
||
"topics": ["Reboot", "DIN 15905-5", "BG-Meldung"],
|
||
"difficulty": "schwer",
|
||
"source_heading": "Event-Technik"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"badges": [
|
||
{"id": "erste_schicht", "title": "Feuer frei", "icon": "flame", "description": "1. Quiz bestanden — Willkommen hinter der Theke."},
|
||
{"id": "cocktail_ninja", "title": "Cocktail-Ninja", "icon": "star", "description": "Mixology-Modul komplett (≥ 80 % in allen 4 Teilen)."},
|
||
{"id": "jugendschutz_watchdog", "title": "Jugendschutz-Wachhund", "icon": "shield", "description": "Alle Jugendschutz-Quizfragen korrekt."},
|
||
{"id": "dguv_profi", "title": "DGUV-Profi", "icon": "medal", "description": "Veranstaltungstechnik-Modul komplett."},
|
||
{"id": "gast_whisperer", "title": "Gast-Flüsterer", "icon": "handshake", "description": "Service-Etikette-Modul komplett."},
|
||
{"id": "kassen_pro", "title": "Kassen-Profi", "icon": "award", "description": "KassenSichV-Modul komplett."},
|
||
{"id": "all_rounder", "title": "Thekengeneral", "icon": "crown", "description": "Alle 8 Module erfolgreich abgeschlossen."},
|
||
{"id": "night_owl", "title": "Nachteule", "icon": "moon", "description": "Nach 22 Uhr gelernt — wie ein echter Barkeeper."}
|
||
],
|
||
"levels": [
|
||
{"min": 0, "title": "Barhilfe"},
|
||
{"min": 50, "title": "Azubi"},
|
||
{"min": 200, "title": "Shiftleader"},
|
||
{"min": 500, "title": "Barchef:in"},
|
||
{"min": 1250, "title": "Location-Manager:in"},
|
||
{"min": 2500, "title": "Betriebsleiter:in"},
|
||
{"min": 5000, "title": "Gastro-Unternehmer:in"}
|
||
]
|
||
}
|