init: extract zita-zeugnis-coach from qognio-bot-widget-template@d2c816f

Source files (src/) and rendered bundle (www/) extracted on 2026-04-29T01:35:49+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-26
This commit is contained in:
Qognio Bot Extract 2026-04-29 01:35:49 +02:00
commit fae491c234
16 changed files with 3544 additions and 0 deletions

7
.dockerignore Normal file
View file

@ -0,0 +1,7 @@
.git
.gitignore
README.md
bot.json
src/
docker-compose.yml
*.md

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
.DS_Store
*.log
*.tmp
node_modules/

13
Dockerfile Normal file
View file

@ -0,0 +1,13 @@
# Static-bundle bot — nginx:alpine serves www/ on port 80.
FROM nginx:1.27-alpine
# nginx config: gzip + cache headers + index.html no-store
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Static bundle
COPY www/ /usr/share/nginx/html/
# Run as non-root via nginx's built-in unprivileged image features
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -q --spider http://127.0.0.1/index.html || exit 1

67
README.md Normal file
View file

@ -0,0 +1,67 @@
# Zita — Arbeitszeugnis-Coach
Zita — Arbeitszeugnis-Coach für HR und Bewerber:innen. Codes entschlüsseln, BAG-konform schreiben, AGG-Fallen vermeiden. § 109 GewO. Im deutschen Bunker.
```
slug : zita-zeugnis-coach
version : 2026-04-26
accent : #9f1239
runtime : nginx:alpine (static bundle)
template : qognio-bot-template-core (former qognio-bot-widget-template)
```
## Layout
```
.
├── src/ source — config.yaml, welcome.html, curricula.json, etc.
├── www/ rendered, directly servable static bundle
├── Dockerfile nginx:alpine + www/ → port 80
├── docker-compose.yml bot-host pattern (Caddy-labels, restart unless-stopped)
├── nginx.conf gzip + cache + SPA fallback
└── bot.json metadata + parent_core_commit
```
## Run locally
```bash
docker compose up --build
# → http://localhost (you'll need to tweak ports for local-only use)
```
## Re-render after upstream core changes
This repo only stores src + rendered output; the rendering engine lives in
`qognio-bot-template-core`. To pull in core changes:
```bash
cd /path/to/qognio-bot-template-core
./scripts/render.sh zita-zeugnis-coach --bot-repo /path/to/this/repo
git -C /path/to/this/repo commit -am "render: refresh from core@<sha>"
```
## Per-customer copy (template usage)
This repo is a **template**. To clone for a customer:
```bash
git clone <this-repo> my-customer-zita-zeugnis-coach
cd my-customer-zita-zeugnis-coach
# tweak src/config.yaml (slug, bot_key_value, accent), src/welcome.html, src/curricula.json
docker compose -f docker-compose.yml up --build
```
## Deploy to qognio bot-host (.42 LXC pattern — legacy)
The bot-manager spawns LXC containers named after the slug. Push www/ via:
```bash
ssh fmh@46.243.203.42
sudo lxc file push /tmp/www/* zita-zeugnis-coach/var/www/html/
```
(Or run the docker-compose pattern on a Docker host — same network as Caddy.)
---
Generated by `qognio-bot-template-core/scripts/extract-to-repo.sh` on 2026-04-29T01:35:49+02:00.

14
bot.json Normal file
View file

@ -0,0 +1,14 @@
{
"slug": "zita-zeugnis-coach",
"name": "Zita",
"title": "Arbeitszeugnis-Coach",
"tagline": "Zeugnis-Coach",
"description": "Zita — Arbeitszeugnis-Coach für HR und Bewerber:innen. Codes entschlüsseln, BAG-konform schreiben, AGG-Fallen vermeiden. § 109 GewO. Im deutschen Bunker.",
"version": "2026-04-26",
"accent": "#9f1239",
"extracted_from": "qognio-bot-widget-template",
"parent_core_commit": "d2c816f3edbc9760802a11b29ff4151c7aad4b46",
"extracted_at": "2026-04-29T01:35:49+02:00",
"runtime": "nginx:alpine",
"default_port": 80
}

20
docker-compose.yml Normal file
View file

@ -0,0 +1,20 @@
# Stand-alone bot container.
# Designed for the "caddy" external network on the bot host (qognio pattern).
# Override the hostname via SLUG env var if you reuse this template per customer.
services:
bot:
build: .
image: qognio/bot-zita-zeugnis-coach:${TAG:-latest}
container_name: bot-zita-zeugnis-coach
restart: unless-stopped
networks:
- caddy
labels:
caddy: "zita-zeugnis-coach.on.qognio.com"
caddy.reverse_proxy: "{{upstreams 80}}"
qognio.bot.slug: "zita-zeugnis-coach"
qognio.bot.version: "2026-04-26"
networks:
caddy:
external: true

27
nginx.conf Normal file
View file

@ -0,0 +1,27 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
# gzip
gzip on;
gzip_vary on;
gzip_types text/css application/javascript application/json image/svg+xml text/plain;
gzip_min_length 512;
# index.html: never cache (so welcome screen / wiring updates land instantly)
location = /index.html {
add_header Cache-Control "no-store, must-revalidate" always;
}
# static assets: cache 1h
location ~* \.(?:css|js|json|svg|png|jpe?g|webp|gif|ico|woff2?)$ {
add_header Cache-Control "public, max-age=3600" always;
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.html;
}
}

20
src/check-badges.js Normal file
View file

@ -0,0 +1,20 @@
// Erste Decodierung — 1 Quiz im Codes-Grundlagen-Modul
if ((state.moduleCorrect && state.moduleCorrect['codes-grundlagen'] >= 1)) unlockBadge('erste_decodierung');
// Code-Profi — 5 korrekte Antworten in den Klassiker-Codes
if ((state.moduleCorrect && state.moduleCorrect['klassiker-codes'] >= 5)) unlockBadge('code_profi');
// AGG-Wächter:in — 3 korrekte Antworten im AGG-Fallen-Modul
if ((state.moduleCorrect && state.moduleCorrect['agg-fallen'] >= 3)) unlockBadge('agg_waechter');
// Notenkenner:in — 5 korrekte Antworten im Noten-System-Modul
if ((state.moduleCorrect && state.moduleCorrect['noten-system'] >= 5)) unlockBadge('noten_kenner');
// Schreiber-Profi — Mini-Klausel-Modul Flashcards bestanden
if ((state.modulePassedFlash && state.modulePassedFlash['mini-klauseln'])) unlockBadge('schreiber_profi');
// BAG-Kenner:in — 3 korrekte Antworten im BAG-Rechtsprechungs-Modul
if ((state.moduleCorrect && state.moduleCorrect['bag-rechtsprechung'] >= 3)) unlockBadge('bag_kenner');
// Zita-Meister:in — 6 von 12 Modulen abgeschlossen (≥80%-Quiz pro Modul)
if ((state.completedCurricula || []).length >= 6) unlockBadge('zita_meister');
// 14-Tage-Streak
if (state.maxStreak >= 14) unlockBadge('streak_14');
// Night Owl & Early Bird (beibehalten)
const h = new Date().getHours();
if (h >= 22) unlockBadge('night_owl');
if (h < 7) unlockBadge('early_bird');

33
src/config.yaml Normal file
View file

@ -0,0 +1,33 @@
slug: zita-zeugnis-coach
bot_name: Zita
bot_title: Arbeitszeugnis-Coach
brand_letter: Z
title: "Zita · Dein Arbeitszeugnis-Coach"
tagline: "Zeugnisse schreiben oder entschlüsseln — ohne Anwalt"
tagline_short: Zeugnis-Coach
meta_description: "Zita — Arbeitszeugnis-Coach für HR und Bewerber:innen. Codes entschlüsseln, BAG-konform schreiben, AGG-Fallen vermeiden. § 109 GewO. Im deutschen Bunker."
bot_key_var: __ZITA_KEY__
bot_key_value: qb_d01b7d22c2d7
ls_prefix: zita
bot_version: "2026-04-26"
# Color theme — warm Bordeaux/Burgundy (Papier, Stempel, formell)
accent: "#9f1239"
accent_2: "#be123c"
accent_dark: "#881337"
accent_rgb: "159, 18, 57"
accent_rgb_compact: "159,18,57"
success_color: "#22c55e"
msg_strong_color: "#fecdd3"
# UI Labels
tab_flash_label: Karten
tab_curriculum_label: Module
curriculum_long_label: Zeugnis-Atlas
# Bot-personality strings
quiz_intro_hint: "Wähle ein Modul — Zita generiert Code-Erkennungs- und Notenbewertungs-Fragen aus echten Zeugnissen."
quiz_verb: erstellt
quiz_noun: "Zeugnis-Fragen"
flash_intro_hint: "Karteikarten zu Codes, Paragrafen, AGG-Fallen — Spaced-Repetition."
flash_verb: generiert

200
src/curricula.json Normal file
View file

@ -0,0 +1,200 @@
{
"version": "2026-04-26",
"updated": "2026-04-26",
"curricula": [
{
"id": "grundlagen",
"title": "1 · Grundlagen § 109 GewO",
"short": "Anspruch, Form, Arten — was Pflicht ist und was nicht",
"icon": "shield",
"color": "#9f1239",
"description": "Rechtlicher Rahmen: § 109 GewO, BBiG-Ausnahmen, Wahrheits- und Wohlwollens-Pflicht, einfaches vs. qualifiziertes Zeugnis.",
"source_md": "00-grundlagen.md",
"modules": [
{
"id": "anspruch-formen",
"title": "Anspruch & Zeugnis-Arten",
"objectives": ["§ 109 GewO Abs. 1-3 sicher zitieren","Einfaches vs. qualifiziertes Zeugnis abgrenzen","Zwischenzeugnis-Anlässe (Wechsel, Eltern­zeit, Vorgesetzten-Wechsel)"],
"topics": ["§ 109 GewO","BBiG § 16","Wohlwollen","Wahrheit"],
"difficulty": "einfach",
"source_heading": "Anspruch & Formen"
},
{
"id": "wahrheit-wohlwollen",
"title": "Wahrheit + Wohlwollen — die Doppel-Pflicht",
"objectives": ["Beide Pflichten ohne Widerspruch erfüllen","Beweislast bis Note 3 (BAG 9 AZR 584/13)","Beweislast ab Note 1/2 — Arbeitgeber"],
"topics": ["BAG-Rechtsprechung","Beweislast-Umkehr"],
"difficulty": "mittel",
"source_heading": "Doppel-Pflicht"
},
{
"id": "form-vorgaben",
"title": "Form-Vorgaben (Papier, Briefkopf, Unterschrift)",
"objectives": ["Briefkopf des AG mit Anschrift","Datum nicht vor letztem Arbeitstag","Original-Unterschrift, keine Kopie","Keine Knicke, keine Schlieren — wahrheitswidriges Erscheinungsbild"],
"topics": ["Form","Unterschrift","Datum"],
"difficulty": "mittel",
"source_heading": "Form"
}
]
},
{
"id": "codes",
"title": "2 · Codes & versteckte Sprache",
"short": "Die berüchtigten Standard-Codes — entschlüsseln statt raten",
"icon": "search",
"color": "#9f1239",
"description": "Die wichtigsten Codes, ihre Note-Äquivalente und wie man sie als Schreiber:in vermeidet oder gezielt einsetzt.",
"source_md": "01-codes.md",
"modules": [
{
"id": "codes-grundlagen",
"title": "Code-System verstehen",
"objectives": ["Warum Codes überhaupt existieren (Wohlwollens-Pflicht)","Die 6 klassischen Note-Stufen","Wie Codes BAG-Konflikte erzeugen"],
"topics": ["Wohlwollens-Pflicht","Note-Skala","BAG-Streit"],
"difficulty": "einfach",
"source_heading": "Code-System"
},
{
"id": "klassiker-codes",
"title": "Klassiker-Codes — Top 20 erkennen",
"objectives": ["'stets zur vollsten Zufriedenheit' = 1","'stets zur vollen Zufriedenheit' = 2","'zur vollen Zufriedenheit' = 3","'zur Zufriedenheit' = 4","'bemüht' / 'im Wesentlichen' = 5/6"],
"topics": ["stets","voll","vollst","bemüht","Wesentlichen"],
"difficulty": "mittel",
"source_heading": "Klassiker"
},
{
"id": "codes-fortgeschritten",
"title": "Fortgeschrittene Codes (Verhalten, Führung, Trennung)",
"objectives": ["Verhaltens-Codes (Geselligkeit, Pünktlichkeit, Korrektheit)","Führungs-Codes (Akzeptanz, Konflikte)","Trennungs-Codes (in/im gegenseitigen Einvernehmen, dankt für Mitarbeit)"],
"topics": ["Geselligkeit","Pünktlichkeit","Trennungs-Formel"],
"difficulty": "schwer",
"source_heading": "Fortgeschritten"
}
]
},
{
"id": "noten-system",
"title": "3 · Note-System & Beweislast",
"short": "Wie das Schul-Notensystem in Zeugnissen wirklich funktioniert",
"icon": "calculator",
"color": "#9f1239",
"description": "Die 6 Notenstufen mit Code-Übersetzung, Beweislast-Verteilung nach BAG, und wie man als Bewerber:in eine bessere Note durchsetzen kann.",
"source_md": "02-noten.md",
"modules": [
{
"id": "noten-skala",
"title": "Die 6-Noten-Skala",
"objectives": ["Note 1-6 jeweils mit Standard-Formulierung","Übergang Note 2 → 3 (häufigster Streitfall)","Sub-Noten (1+, 2-, etc.) erkennen"],
"topics": ["Note 1","Note 2","Note 3","Sub-Noten"],
"difficulty": "mittel",
"source_heading": "Noten-Skala"
},
{
"id": "beweislast",
"title": "Beweislast — wer muss was beweisen",
"objectives": ["Bis Note 3 trägt AN die Beweislast","Ab Note 1/2 trägt AG die Beweislast","Konsequenzen für Verhandlungs-Strategie","BAG 9 AZR 584/13 zitieren können"],
"topics": ["BAG-Rechtsprechung","Beweislast-Umkehr","Note 3 als Schwelle"],
"difficulty": "schwer",
"source_heading": "Beweislast"
}
]
},
{
"id": "agg-fallen",
"title": "4 · AGG-Fallen vermeiden",
"short": "Was im Zeugnis NIE stehen darf — Diskriminierungs-Risiken",
"icon": "alert",
"color": "#9f1239",
"description": "AGG-Verstöße im Zeugnis sind teure Fallen: Schwangerschaft, Krankheit, Behinderung, Religion, Alter. Plus: was wann doch erwähnt werden darf (Wahrheits-Pflicht).",
"source_md": "03-agg.md",
"modules": [
{
"id": "agg-grundlagen",
"title": "AGG im Zeugnis — die 6 verbotenen Merkmale",
"objectives": ["§ 1 AGG-Merkmale auswendig (Rasse/Ethnie, Geschlecht, Religion, Behinderung, Alter, sex. Identität)","Schadensersatz-Risiko § 15 AGG","Beweis-Erleichterung § 22 AGG"],
"topics": ["§ 1 AGG","§ 15 AGG","§ 22 AGG"],
"difficulty": "mittel",
"source_heading": "AGG-Grundlagen"
},
{
"id": "agg-fallen",
"title": "Konkrete Fallen — Krankheit, Schwangerschaft, Elternzeit",
"objectives": ["Standard-AU NIE erwähnen","Langzeit-Erkrankung mit Beschäftigungs-Lücke: prüfen","Elternzeit DARF erwähnt werden (BAG)","Schwangerschaft NIE als Trennungs-Grund"],
"topics": ["AU","Elternzeit","Schwangerschaft","Behinderung"],
"difficulty": "schwer",
"source_heading": "Konkrete Fallen"
},
{
"id": "wahrheits-grenzen",
"title": "Wahrheits-Pflicht vs. AGG — die Grauzone",
"objectives": ["Wann Wahrheit die AGG-Grenze überholt","BAG-Rechtsprechung zu Beschäftigungs-Lücken","Sicherheits-Formulierungen die beide Pflichten erfüllen"],
"topics": ["Wahrheit","Wohlwollen","BAG"],
"difficulty": "schwer",
"source_heading": "Grauzone"
}
]
},
{
"id": "schreiben",
"title": "5 · Zeugnis schreiben — Mini-Klauseln",
"short": "Bausteine für jedes Zeugnis: Tätigkeit, Leistung, Verhalten, Trennung",
"icon": "book",
"color": "#9f1239",
"description": "Die 5 klassischen Zeugnis-Abschnitte mit Mini-Klauseln pro Note. Kopier-fähig für Note 1-3 und Hinweis-Sätze für Note 4-6.",
"source_md": "04-schreiben.md",
"modules": [
{
"id": "aufbau-pflicht",
"title": "Pflicht-Aufbau qualifiziertes Zeugnis",
"objectives": ["Personaldaten + Tätigkeitsdauer","Tätigkeitsbeschreibung","Leistungs-Beurteilung","Verhaltens-Beurteilung","Trennungs-Formel + Dankesformel"],
"topics": ["Aufbau","Tätigkeitsbeschreibung","Verhaltens-Beurteilung"],
"difficulty": "mittel",
"source_heading": "Aufbau"
},
{
"id": "mini-klauseln",
"title": "Mini-Klauseln pro Note (Vorlage)",
"objectives": ["Leistungs-Klausel pro Note 1-3","Verhaltens-Klausel mit Vorgesetzten/Kollegen/Kunden","Trennungs-Klausel im gegenseitigen Einvernehmen","Dankes- und Bedauerns-Formel"],
"topics": ["Leistungs-Klausel","Verhaltens-Klausel","Trennungs-Klausel","Dank"],
"difficulty": "mittel",
"source_heading": "Mini-Klauseln"
},
{
"id": "rolle-spezifika",
"title": "Rollen-spezifische Bausteine",
"objectives": ["Vertrieb: Quote, Akquise, Pipeline","IT: Stack, Komplexität, Code-Reviews","Handwerk: Qualität, Termintreue, Werkzeug-Sorgfalt","Führung: Personalverantwortung, Mitarbeiter-Entwicklung"],
"topics": ["Vertrieb","IT","Handwerk","Führung"],
"difficulty": "mittel",
"source_heading": "Rollen-Bausteine"
}
]
},
{
"id": "rechtsprechung",
"title": "6 · BAG-Rechtsprechung & Streit",
"short": "Die wichtigsten Urteile + wie man sie zitiert",
"icon": "list",
"color": "#9f1239",
"description": "Die 10 wichtigsten BAG-Urteile zum Arbeitszeugnis: Wahrheits-Wohlwollen, Beweislast, Geheim-Codes, Trennungsformeln, Berichtigungsanspruch.",
"source_md": "05-bag.md",
"modules": [
{
"id": "bag-rechtsprechung",
"title": "Top-10 BAG-Urteile",
"objectives": ["BAG 5 AZR 560/58 (Wahrheits-Wohlwollens-Doppelpflicht)","BAG 9 AZR 584/13 (Beweislast bis Note 3)","BAG 8 AZR 235/03 (Geheim-Codes unzulässig wenn versteckt)","BAG 9 AZR 248/16 (Reihenfolge Vorgesetzte/Kollegen)"],
"topics": ["BAG-Urteile","Beweislast","Geheim-Codes"],
"difficulty": "schwer",
"source_heading": "Top-Urteile"
},
{
"id": "berichtigung",
"title": "Berichtigungs-Anspruch & Klage",
"objectives": ["Frist für Berichtigungs-Anspruch (~3-6 Monate, regional verschieden)","Klage-Vorgehen Schritt für Schritt","Kosten-Risiko bei Note-Streit","Wann Anwalt unverzichtbar"],
"topics": ["Berichtigung","Klage","Kosten"],
"difficulty": "schwer",
"source_heading": "Berichtigung"
}
]
}
]
}

4
src/levels-fallback.js Normal file
View file

@ -0,0 +1,4 @@
{ min: 0, title: 'Zeugnis-Anfänger:in' }, { min: 50, title: 'Code-Leser:in' },
{ min: 200, title: 'Code-Profi' }, { min: 500, title: 'Zeugnis-Schreiber:in' },
{ min: 1250, title: 'AGG-Wächter:in' }, { min: 2500, title: 'BAG-Kenner:in' },
{ min: 5000, title: 'Zeugnis-Großmeister:in' }

25
src/welcome.html Normal file
View file

@ -0,0 +1,25 @@
<h2>Hi, ich bin Zita.</h2>
<p>Ich bin der <strong>Arbeitszeugnis-Coach</strong> für HR und Bewerber:innen: <strong>Codes entschlüsseln</strong>, <strong>BAG-konform schreiben</strong>, <strong>AGG-Fallen vermeiden</strong>. Sag mir, ob du ein fremdes Zeugnis liest oder selbst eines schreibst, dann legen wir los. Pragmatisch — keine Anwalt-Floskeln.</p>
<div class="mode-grid">
<button class="mode-card" data-prompt="DECODE_REQUEST: [Zeugnistext hier einfügen]">
<strong>Decoder</strong>
<span><code>DECODE_REQUEST</code> + Zeugnistext → Codes + Note-Äquivalent als Karte.</span>
</button>
<button class="mode-card" data-prompt="WRITE_REQUEST: Rolle [z.B. Senior Developer], Note [1-6], Aufgaben [Stichpunkte], Stil [warmherzig/sachlich]">
<strong>Schreiber</strong>
<span><code>WRITE_REQUEST</code> + Rolle/Note/Aufgaben → fertiger Entwurf als Karte.</span>
</button>
<button class="mode-card" data-goto="curriculum">
<strong>Atlas</strong>
<span>Module: § 109 GewO · Codes · AGG · Notensystem · Mini-Klausel.</span>
</button>
<button class="mode-card" data-goto="quiz">
<strong>Quiz</strong>
<span>Code-Erkennung + Notenbewertung an echten Zeugnis-Schnipseln.</span>
</button>
<button class="mode-card" data-goto="flash">
<strong>Karten</strong>
<span>Codes, Paragrafen, AGG-Fallen — Spaced-Repetition.</span>
</button>
</div>
<p style="font-size:.82rem;color:var(--text-mute)">Wahrheits- + Wohlwollen-Pflicht (BAG). Bis Note 3 trägt der/die AN die Beweislast für eine bessere Note. Bei Einzelfällen mit Streit-Potenzial: Fachanwalt — ich skizziere die Lage.</p>

1751
www/app.js Normal file

File diff suppressed because it is too large Load diff

200
www/curricula.json Normal file
View file

@ -0,0 +1,200 @@
{
"version": "2026-04-26",
"updated": "2026-04-26",
"curricula": [
{
"id": "grundlagen",
"title": "1 · Grundlagen § 109 GewO",
"short": "Anspruch, Form, Arten — was Pflicht ist und was nicht",
"icon": "shield",
"color": "#9f1239",
"description": "Rechtlicher Rahmen: § 109 GewO, BBiG-Ausnahmen, Wahrheits- und Wohlwollens-Pflicht, einfaches vs. qualifiziertes Zeugnis.",
"source_md": "00-grundlagen.md",
"modules": [
{
"id": "anspruch-formen",
"title": "Anspruch & Zeugnis-Arten",
"objectives": ["§ 109 GewO Abs. 1-3 sicher zitieren","Einfaches vs. qualifiziertes Zeugnis abgrenzen","Zwischenzeugnis-Anlässe (Wechsel, Eltern­zeit, Vorgesetzten-Wechsel)"],
"topics": ["§ 109 GewO","BBiG § 16","Wohlwollen","Wahrheit"],
"difficulty": "einfach",
"source_heading": "Anspruch & Formen"
},
{
"id": "wahrheit-wohlwollen",
"title": "Wahrheit + Wohlwollen — die Doppel-Pflicht",
"objectives": ["Beide Pflichten ohne Widerspruch erfüllen","Beweislast bis Note 3 (BAG 9 AZR 584/13)","Beweislast ab Note 1/2 — Arbeitgeber"],
"topics": ["BAG-Rechtsprechung","Beweislast-Umkehr"],
"difficulty": "mittel",
"source_heading": "Doppel-Pflicht"
},
{
"id": "form-vorgaben",
"title": "Form-Vorgaben (Papier, Briefkopf, Unterschrift)",
"objectives": ["Briefkopf des AG mit Anschrift","Datum nicht vor letztem Arbeitstag","Original-Unterschrift, keine Kopie","Keine Knicke, keine Schlieren — wahrheitswidriges Erscheinungsbild"],
"topics": ["Form","Unterschrift","Datum"],
"difficulty": "mittel",
"source_heading": "Form"
}
]
},
{
"id": "codes",
"title": "2 · Codes & versteckte Sprache",
"short": "Die berüchtigten Standard-Codes — entschlüsseln statt raten",
"icon": "search",
"color": "#9f1239",
"description": "Die wichtigsten Codes, ihre Note-Äquivalente und wie man sie als Schreiber:in vermeidet oder gezielt einsetzt.",
"source_md": "01-codes.md",
"modules": [
{
"id": "codes-grundlagen",
"title": "Code-System verstehen",
"objectives": ["Warum Codes überhaupt existieren (Wohlwollens-Pflicht)","Die 6 klassischen Note-Stufen","Wie Codes BAG-Konflikte erzeugen"],
"topics": ["Wohlwollens-Pflicht","Note-Skala","BAG-Streit"],
"difficulty": "einfach",
"source_heading": "Code-System"
},
{
"id": "klassiker-codes",
"title": "Klassiker-Codes — Top 20 erkennen",
"objectives": ["'stets zur vollsten Zufriedenheit' = 1","'stets zur vollen Zufriedenheit' = 2","'zur vollen Zufriedenheit' = 3","'zur Zufriedenheit' = 4","'bemüht' / 'im Wesentlichen' = 5/6"],
"topics": ["stets","voll","vollst","bemüht","Wesentlichen"],
"difficulty": "mittel",
"source_heading": "Klassiker"
},
{
"id": "codes-fortgeschritten",
"title": "Fortgeschrittene Codes (Verhalten, Führung, Trennung)",
"objectives": ["Verhaltens-Codes (Geselligkeit, Pünktlichkeit, Korrektheit)","Führungs-Codes (Akzeptanz, Konflikte)","Trennungs-Codes (in/im gegenseitigen Einvernehmen, dankt für Mitarbeit)"],
"topics": ["Geselligkeit","Pünktlichkeit","Trennungs-Formel"],
"difficulty": "schwer",
"source_heading": "Fortgeschritten"
}
]
},
{
"id": "noten-system",
"title": "3 · Note-System & Beweislast",
"short": "Wie das Schul-Notensystem in Zeugnissen wirklich funktioniert",
"icon": "calculator",
"color": "#9f1239",
"description": "Die 6 Notenstufen mit Code-Übersetzung, Beweislast-Verteilung nach BAG, und wie man als Bewerber:in eine bessere Note durchsetzen kann.",
"source_md": "02-noten.md",
"modules": [
{
"id": "noten-skala",
"title": "Die 6-Noten-Skala",
"objectives": ["Note 1-6 jeweils mit Standard-Formulierung","Übergang Note 2 → 3 (häufigster Streitfall)","Sub-Noten (1+, 2-, etc.) erkennen"],
"topics": ["Note 1","Note 2","Note 3","Sub-Noten"],
"difficulty": "mittel",
"source_heading": "Noten-Skala"
},
{
"id": "beweislast",
"title": "Beweislast — wer muss was beweisen",
"objectives": ["Bis Note 3 trägt AN die Beweislast","Ab Note 1/2 trägt AG die Beweislast","Konsequenzen für Verhandlungs-Strategie","BAG 9 AZR 584/13 zitieren können"],
"topics": ["BAG-Rechtsprechung","Beweislast-Umkehr","Note 3 als Schwelle"],
"difficulty": "schwer",
"source_heading": "Beweislast"
}
]
},
{
"id": "agg-fallen",
"title": "4 · AGG-Fallen vermeiden",
"short": "Was im Zeugnis NIE stehen darf — Diskriminierungs-Risiken",
"icon": "alert",
"color": "#9f1239",
"description": "AGG-Verstöße im Zeugnis sind teure Fallen: Schwangerschaft, Krankheit, Behinderung, Religion, Alter. Plus: was wann doch erwähnt werden darf (Wahrheits-Pflicht).",
"source_md": "03-agg.md",
"modules": [
{
"id": "agg-grundlagen",
"title": "AGG im Zeugnis — die 6 verbotenen Merkmale",
"objectives": ["§ 1 AGG-Merkmale auswendig (Rasse/Ethnie, Geschlecht, Religion, Behinderung, Alter, sex. Identität)","Schadensersatz-Risiko § 15 AGG","Beweis-Erleichterung § 22 AGG"],
"topics": ["§ 1 AGG","§ 15 AGG","§ 22 AGG"],
"difficulty": "mittel",
"source_heading": "AGG-Grundlagen"
},
{
"id": "agg-fallen",
"title": "Konkrete Fallen — Krankheit, Schwangerschaft, Elternzeit",
"objectives": ["Standard-AU NIE erwähnen","Langzeit-Erkrankung mit Beschäftigungs-Lücke: prüfen","Elternzeit DARF erwähnt werden (BAG)","Schwangerschaft NIE als Trennungs-Grund"],
"topics": ["AU","Elternzeit","Schwangerschaft","Behinderung"],
"difficulty": "schwer",
"source_heading": "Konkrete Fallen"
},
{
"id": "wahrheits-grenzen",
"title": "Wahrheits-Pflicht vs. AGG — die Grauzone",
"objectives": ["Wann Wahrheit die AGG-Grenze überholt","BAG-Rechtsprechung zu Beschäftigungs-Lücken","Sicherheits-Formulierungen die beide Pflichten erfüllen"],
"topics": ["Wahrheit","Wohlwollen","BAG"],
"difficulty": "schwer",
"source_heading": "Grauzone"
}
]
},
{
"id": "schreiben",
"title": "5 · Zeugnis schreiben — Mini-Klauseln",
"short": "Bausteine für jedes Zeugnis: Tätigkeit, Leistung, Verhalten, Trennung",
"icon": "book",
"color": "#9f1239",
"description": "Die 5 klassischen Zeugnis-Abschnitte mit Mini-Klauseln pro Note. Kopier-fähig für Note 1-3 und Hinweis-Sätze für Note 4-6.",
"source_md": "04-schreiben.md",
"modules": [
{
"id": "aufbau-pflicht",
"title": "Pflicht-Aufbau qualifiziertes Zeugnis",
"objectives": ["Personaldaten + Tätigkeitsdauer","Tätigkeitsbeschreibung","Leistungs-Beurteilung","Verhaltens-Beurteilung","Trennungs-Formel + Dankesformel"],
"topics": ["Aufbau","Tätigkeitsbeschreibung","Verhaltens-Beurteilung"],
"difficulty": "mittel",
"source_heading": "Aufbau"
},
{
"id": "mini-klauseln",
"title": "Mini-Klauseln pro Note (Vorlage)",
"objectives": ["Leistungs-Klausel pro Note 1-3","Verhaltens-Klausel mit Vorgesetzten/Kollegen/Kunden","Trennungs-Klausel im gegenseitigen Einvernehmen","Dankes- und Bedauerns-Formel"],
"topics": ["Leistungs-Klausel","Verhaltens-Klausel","Trennungs-Klausel","Dank"],
"difficulty": "mittel",
"source_heading": "Mini-Klauseln"
},
{
"id": "rolle-spezifika",
"title": "Rollen-spezifische Bausteine",
"objectives": ["Vertrieb: Quote, Akquise, Pipeline","IT: Stack, Komplexität, Code-Reviews","Handwerk: Qualität, Termintreue, Werkzeug-Sorgfalt","Führung: Personalverantwortung, Mitarbeiter-Entwicklung"],
"topics": ["Vertrieb","IT","Handwerk","Führung"],
"difficulty": "mittel",
"source_heading": "Rollen-Bausteine"
}
]
},
{
"id": "rechtsprechung",
"title": "6 · BAG-Rechtsprechung & Streit",
"short": "Die wichtigsten Urteile + wie man sie zitiert",
"icon": "list",
"color": "#9f1239",
"description": "Die 10 wichtigsten BAG-Urteile zum Arbeitszeugnis: Wahrheits-Wohlwollen, Beweislast, Geheim-Codes, Trennungsformeln, Berichtigungsanspruch.",
"source_md": "05-bag.md",
"modules": [
{
"id": "bag-rechtsprechung",
"title": "Top-10 BAG-Urteile",
"objectives": ["BAG 5 AZR 560/58 (Wahrheits-Wohlwollens-Doppelpflicht)","BAG 9 AZR 584/13 (Beweislast bis Note 3)","BAG 8 AZR 235/03 (Geheim-Codes unzulässig wenn versteckt)","BAG 9 AZR 248/16 (Reihenfolge Vorgesetzte/Kollegen)"],
"topics": ["BAG-Urteile","Beweislast","Geheim-Codes"],
"difficulty": "schwer",
"source_heading": "Top-Urteile"
},
{
"id": "berichtigung",
"title": "Berichtigungs-Anspruch & Klage",
"objectives": ["Frist für Berichtigungs-Anspruch (~3-6 Monate, regional verschieden)","Klage-Vorgehen Schritt für Schritt","Kosten-Risiko bei Note-Streit","Wann Anwalt unverzichtbar"],
"topics": ["Berichtigung","Klage","Kosten"],
"difficulty": "schwer",
"source_heading": "Berichtigung"
}
]
}
]
}

121
www/index.html Normal file
View file

@ -0,0 +1,121 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Zita · Dein Arbeitszeugnis-Coach</title>
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
<meta name="theme-color" content="#0a0a0f">
<meta name="description" content="Zita — Arbeitszeugnis-Coach für HR und Bewerber:innen. Codes entschlüsseln, BAG-konform schreiben, AGG-Fallen vermeiden. § 109 GewO. Im deutschen Bunker.">
<link rel="stylesheet" href="styles.css">
<script>window.__ZITA_KEY__ = 'qb_d01b7d22c2d7';</script>
</head>
<body>
<div class="app" role="application" aria-label="Zita Zeugnisse schreiben oder entschlüsseln — ohne Anwalt">
<header class="topbar">
<div class="brand">
<span class="brand-icon" aria-hidden="true">Z</span>
<span>Zita <small>Zeugnis-Coach</small></span>
</div>
<div class="spacer"></div>
<span class="status" role="status" aria-live="polite">Online</span>
</header>
<nav class="tabbar" role="tablist" aria-label="Modi">
<button class="tab" role="tab" aria-selected="true" aria-controls="view-chat" data-mode="chat">
Chat
<span class="tab-kbd">⌃1</span>
</button>
<button class="tab" role="tab" aria-selected="false" aria-controls="view-quiz" data-mode="quiz">
Quiz
<span class="tab-kbd">⌃2</span>
</button>
<button class="tab" role="tab" aria-selected="false" aria-controls="view-flash" data-mode="flash">
Karten
<span class="tab-kbd">⌃3</span>
</button>
<button class="tab" role="tab" aria-selected="false" aria-controls="view-progress" data-mode="progress">
Fortschritt
<span class="tab-kbd">⌃4</span>
</button>
<button class="tab" role="tab" aria-selected="false" aria-controls="view-curriculum" data-mode="curriculum">
Module
<span class="tab-kbd">⌃5</span>
</button>
</nav>
<main class="main">
<!-- CHAT -->
<section id="view-chat" class="view" role="tabpanel" aria-labelledby="tab-chat" data-active="true">
<div id="welcome-screen" class="welcome hidden" aria-hidden="true">
<h2>Hi, ich bin Zita.</h2>
<p>Ich bin der <strong>Arbeitszeugnis-Coach</strong> für HR und Bewerber:innen: <strong>Codes entschlüsseln</strong>, <strong>BAG-konform schreiben</strong>, <strong>AGG-Fallen vermeiden</strong>. Sag mir, ob du ein fremdes Zeugnis liest oder selbst eines schreibst, dann legen wir los. Pragmatisch — keine Anwalt-Floskeln.</p>
<div class="mode-grid">
<button class="mode-card" data-prompt="DECODE_REQUEST: [Zeugnistext hier einfügen]">
<strong>Decoder</strong>
<span><code>DECODE_REQUEST</code> + Zeugnistext → Codes + Note-Äquivalent als Karte.</span>
</button>
<button class="mode-card" data-prompt="WRITE_REQUEST: Rolle [z.B. Senior Developer], Note [1-6], Aufgaben [Stichpunkte], Stil [warmherzig/sachlich]">
<strong>Schreiber</strong>
<span><code>WRITE_REQUEST</code> + Rolle/Note/Aufgaben → fertiger Entwurf als Karte.</span>
</button>
<button class="mode-card" data-goto="curriculum">
<strong>Atlas</strong>
<span>Module: § 109 GewO · Codes · AGG · Notensystem · Mini-Klausel.</span>
</button>
<button class="mode-card" data-goto="quiz">
<strong>Quiz</strong>
<span>Code-Erkennung + Notenbewertung an echten Zeugnis-Schnipseln.</span>
</button>
<button class="mode-card" data-goto="flash">
<strong>Karten</strong>
<span>Codes, Paragrafen, AGG-Fallen — Spaced-Repetition.</span>
</button>
</div>
<p style="font-size:.82rem;color:var(--text-mute)">Wahrheits- + Wohlwollen-Pflicht (BAG). Bis Note 3 trägt der/die AN die Beweislast für eine bessere Note. Bei Einzelfällen mit Streit-Potenzial: Fachanwalt — ich skizziere die Lage.</p>
</div>
<div id="chat-box" class="chat-box" aria-live="polite" aria-label="Gespräch"></div>
</section>
<!-- QUIZ -->
<section id="view-quiz" class="view" role="tabpanel" aria-labelledby="tab-quiz">
<div id="quiz-host"></div>
</section>
<!-- FLASHCARDS -->
<section id="view-flash" class="view" role="tabpanel" aria-labelledby="tab-flash">
<div id="flash-host"></div>
</section>
<!-- PROGRESS -->
<section id="view-progress" class="view" role="tabpanel" aria-labelledby="tab-progress">
<div id="progress-host"></div>
</section>
<!-- CURRICULUM -->
<section id="view-curriculum" class="view" role="tabpanel" aria-labelledby="tab-curr">
<div id="curr-host"></div>
</section>
</main>
<form id="composer-form" class="composer" aria-label="Nachricht verfassen">
<div id="attach-strip" class="attach-strip" aria-live="polite"></div>
<div class="composer-row">
<button type="button" class="btn-attach" id="composer-attach" aria-label="Datei anhängen" title="Datei anhängen (PDF, Bild, Text — max 5 Dateien, 8 MB)">📎</button>
<input type="file" id="composer-file" multiple accept=".pdf,.txt,.md,.csv,.json,.xml,.yaml,.yml,.log,.png,.jpg,.jpeg,.webp,.gif" hidden>
<textarea id="composer" rows="1" placeholder="Frag Zita — Enter zum Senden, Shift+Enter für Zeilenumbruch" aria-label="Nachricht"></textarea>
<button type="submit" class="btn-primary" id="composer-send">Senden</button>
</div>
</form>
<footer class="footer">
Sovereign AI · Deutscher Bunker · <a href="https://qognio.com">Qognio</a> &nbsp;·&nbsp; DSGVO-konform · Keine externen Fonts · Keine Cookies
</footer>
</div>
<div id="toast-stack" class="toast-stack" aria-live="polite"></div>
<script src="app.js"></script>
</body>
</html>

1038
www/styles.css Normal file

File diff suppressed because it is too large Load diff