init: extract otto-onboarding-coach from qognio-bot-widget-template@d2c816f

Source files (src/) and rendered bundle (www/) extracted on 2026-04-29T01:35:48+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-25
This commit is contained in:
Qognio Bot Extract 2026-04-29 01:35:48 +02:00
commit ac88101926
16 changed files with 3987 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 @@
# Otto — Onboarding-Orchestrator
Otto — der Onboarding-Coach für HR und Führungskräfte. Rollen-spezifische 90-Tage-Pläne, Buddy-System, Probezeit-Entscheidung. Im deutschen Bunker.
```
slug : otto-onboarding-coach
version : 2026-04-25
accent : #0d9488
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 otto-onboarding-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-otto-onboarding-coach
cd my-customer-otto-onboarding-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/* otto-onboarding-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:48+02:00.

14
bot.json Normal file
View file

@ -0,0 +1,14 @@
{
"slug": "otto-onboarding-coach",
"name": "Otto",
"title": "Onboarding-Orchestrator",
"tagline": "Onboarding-Coach",
"description": "Otto — der Onboarding-Coach für HR und Führungskräfte. Rollen-spezifische 90-Tage-Pläne, Buddy-System, Probezeit-Entscheidung. Im deutschen Bunker.",
"version": "2026-04-25",
"accent": "#0d9488",
"extracted_from": "qognio-bot-widget-template",
"parent_core_commit": "d2c816f3edbc9760802a11b29ff4151c7aad4b46",
"extracted_at": "2026-04-29T01:35:48+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-otto-onboarding-coach:${TAG:-latest}
container_name: bot-otto-onboarding-coach
restart: unless-stopped
networks:
- caddy
labels:
caddy: "otto-onboarding-coach.on.qognio.com"
caddy.reverse_proxy: "{{upstreams 80}}"
qognio.bot.slug: "otto-onboarding-coach"
qognio.bot.version: "2026-04-25"
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;
}
}

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

@ -0,0 +1,18 @@
// Erste Planung — 1 Quiz im 90-Tage-Bogen-Modul
if ((state.moduleCorrect && state.moduleCorrect['90-tage-bogen'] >= 1)) unlockBadge('erste_planung');
// Rollen-Meister — 5 Quiz korrekt im Engineer-Onboarding-Modul (Rollen-spezifisch)
if ((state.moduleCorrect && state.moduleCorrect['engineer'] >= 5)) unlockBadge('rollen_meister');
// Buddy-Pro — 3 Quiz korrekt im Buddy-vs-Mentor-Modul
if ((state.moduleCorrect && state.moduleCorrect['buddy-vs-mentor'] >= 3)) unlockBadge('buddy_pro');
// Feedback-Meister — 5 Quiz korrekt im Feedback-Frameworks-Modul
if ((state.moduleCorrect && state.moduleCorrect['feedback-frameworks'] >= 5)) unlockBadge('feedback_meister');
// Rechtsrahmen-Kenner — 3 Quiz korrekt im Probezeit-BGB-Modul
if ((state.moduleCorrect && state.moduleCorrect['probezeit-bgb'] >= 3)) unlockBadge('rechtsrahmen_kenner');
// Otto-Meister — 22 von 28 Modulen mit ≥80% Quiz-Score abgeschlossen (~79% Master-Coverage)
if ((state.completedCurricula || []).length >= 22) unlockBadge('otto_meister');
// Streak 7 — 7 Tage in Folge aktiv
if (state.maxStreak >= 7) unlockBadge('streak_7');
// Night Owl & Early Bird (beibehalten)
const h = new Date().getHours();
if (h >= 22) unlockBadge('night_owl');
if (h < 7) unlockBadge('early_bird');

38
src/config.yaml Normal file
View file

@ -0,0 +1,38 @@
slug: otto-onboarding-coach
bot_name: Otto
bot_title: Onboarding-Orchestrator
brand_letter: O
title: "Otto · Dein Onboarding-Orchestrator"
tagline: "90 Tage zum produktiven Mitarbeiter"
tagline_short: Onboarding-Coach
meta_description: "Otto — der Onboarding-Coach für HR und Führungskräfte. Rollen-spezifische 90-Tage-Pläne, Buddy-System, Probezeit-Entscheidung. Im deutschen Bunker."
bot_key_var: __OTTO_KEY__
bot_key_value: qb_j4i2pwkzc5xl
ls_prefix: otto
bot_version: "2026-04-25"
# Color theme — teal/grün, distinct von Cora-emerald + Kai-cyan
accent: "#0d9488"
accent_2: "#14b8a6"
accent_dark: "#0f766e"
accent_rgb: "13, 148, 136"
accent_rgb_compact: "13,148,136"
success_color: "#22c55e"
msg_strong_color: "#99f6e4"
# UI Labels
tab_flash_label: Karten
tab_curriculum_label: Module
curriculum_long_label: Onboarding-Bibliothek
# Bot-personality strings
quiz_intro_hint: "Wähle ein Modul — Otto generiert HR-Szenario-Fragen aus dem Onboarding-Alltag."
quiz_verb: erstellt
quiz_noun: "Szenario-Fragen"
flash_intro_hint: "Karteikarten zu Probezeit, Buddy, Feedback-Ritualen, Bauer-Modell."
flash_verb: generiert
# Levels-fallback, welcome.html, check-badges.js are sibling files
# in this directory — render.sh injects their full contents into the
# corresponding {{LEVELS_FALLBACK}}, {{WELCOME_HTML}}, {{CHECK_BADGES_BODY}}
# placeholders verbatim.

417
src/curricula.json Normal file
View file

@ -0,0 +1,417 @@
{
"version": "2026-04-25",
"updated": "2026-04-25",
"curricula": [
{
"id": "grundlagen",
"title": "1 · Grundlagen",
"short": "Bauer-Modell, Pre-Boarding, Tag 1",
"icon": "shield",
"color": "#0d9488",
"description": "Was ist gutes Onboarding? Bauer-Modell (4 C's), 90-Tage-Bogen, Pre-Boarding-Effekte, Tag-1 als Erlebnis statt Bürokratie.",
"source_md": "00-onboarding-grundlagen.md",
"modules": [
{
"id": "bauer-4c",
"title": "Bauer-Modell — die 4 C's",
"objectives": [
"Compliance / Clarification / Culture / Connection unterscheiden",
"Eigenes Onboarding den 4 Ebenen zuordnen",
"Antimuster 'Compliance-Heavy / Connection-Light' erkennen"
],
"topics": ["Bauer 2010", "4 C's", "Compliance", "Clarification", "Culture", "Connection"],
"difficulty": "einfach",
"source_heading": "Das Bauer-Modell — die 4 C's"
},
{
"id": "90-tage-bogen",
"title": "Die 90-Tage-Phasen",
"objectives": [
"Pre-Boarding bis Probezeit-Entscheidung sequenzieren",
"Kritische Pulse-Punkte (Tag 30/60/90) benennen",
"Time-to-Productivity rollen-spezifisch denken"
],
"topics": ["Pre-Boarding", "Tag 1", "Tag 30", "Tag 60", "Tag 90", "TTP"],
"difficulty": "mittel",
"source_heading": "Die Phasen im Detail"
},
{
"id": "pre-boarding",
"title": "Pre-Boarding & Welcome-Box",
"objectives": [
"Touchpoints zwischen Vertrag und Tag 1 strukturieren",
"Welcome-Box-Effekt verstehen (3x First-Day-NPS)",
"Click-Boarding-2023-Daten zur Funkstille-Falle"
],
"topics": ["Pre-Boarding-Checkliste", "Welcome-Box", "Funkstille-Falle", "CEO-Welcome"],
"difficulty": "einfach",
"source_heading": "Pre-Boarding (Vertrag -> Tag -1)"
},
{
"id": "tag-1-erlebnis",
"title": "Tag 1 als Erlebnis",
"objectives": [
"Antimuster (Bürokratie-Marathon) erkennen",
"Best-Practice-Skript Tag 1 anwenden",
"Mini-Win-Aufgabe pro Rolle definieren"
],
"topics": ["Tag-1-Skript", "Mini-Win", "Buddy-Welcome", "Team-Lunch"],
"difficulty": "mittel",
"source_heading": "Tag 1 -- als Erlebnis statt Bürokratie"
},
{
"id": "kpis-grundlagen",
"title": "ROI & Bauer-Take-Aways",
"objectives": [
"Bauer-Take-Aways 1-4 zitieren",
"ROI-Argument für Pre-Boarding (4-6 Monatsgehälter Recruiting)",
"Reifegrade Passive/HighPotential/Proactive"
],
"topics": ["ROI", "Reifegrade", "Take-Aways", "Bauer 2010"],
"difficulty": "mittel",
"source_heading": "Bauer-Take-Aways für jede:n HR-Verantwortliche:n"
}
]
},
{
"id": "rollen-spezifisch",
"title": "2 · Rollen-spezifische Pläne",
"short": "5 Standardrollen mit 30/60/90-Templates",
"icon": "users",
"color": "#14b8a6",
"description": "Onboarding-Templates für Software-Engineer, Sales-Rep, Marketing-Lead, HR-Generalist, Office-Manager. Pro Rolle: Tag-1-Tasks, Woche-1-Skill-Check, 30/60/90-Reviews und typische Fehler.",
"source_md": "01-rollen-spezifisch-techie-vs-vertrieb.md",
"modules": [
{
"id": "engineer",
"title": "Software-Engineer (Mid, Backend)",
"objectives": [
"Tag-1: First-Repo, Good-First-Issue, Buddy-Walkthrough",
"Woche 1: erstes PR mergen",
"30/60/90-KPIs: PRs/Sprint, Architektur-Beiträge, Feature-Lieferung"
],
"topics": ["IDE-Setup", "Good-First-Issue", "Code-Review", "Pair-Programming", "Tech-Lead-1:1"],
"difficulty": "mittel",
"source_heading": "Rolle 1 -- Software-Engineer (Mid-Level, Backend)"
},
{
"id": "sales",
"title": "Sales-Rep / Account-Executive",
"objectives": [
"Tag-1: CRM, Buddy, 2-3 Deals als Anatomy",
"Woche 1: Discovery-Calls live mithören, Roleplay",
"30/60/90-KPIs: Pipeline-Coverage, Discovery-Quality, erstes Closed-Won"
],
"topics": ["CRM-Onboarding", "Discovery-Call", "Pitch-Roleplay", "Pipeline-Building", "Forecast-Accuracy"],
"difficulty": "mittel",
"source_heading": "Rolle 2 -- Sales-Rep (Account-Executive, B2B)"
},
{
"id": "marketing",
"title": "Marketing-Lead (Senior)",
"objectives": [
"Tag-1: Tools + Stakeholder-Liste",
"Woche 1: 5 Stakeholder-1:1s, Brand-Audit-Light",
"30/60/90: Strategie-1-Pager, Quartals-OKRs, erste Kampagne"
],
"topics": ["Stakeholder-Mapping", "Brand-Audit", "Quartals-OKRs", "Reporting-Cadence"],
"difficulty": "mittel",
"source_heading": "Rolle 3 -- Marketing-Lead (Senior, Brand & Demand-Gen)"
},
{
"id": "hr-generalist",
"title": "HR-Generalist (Mid)",
"objectives": [
"Tag-1: HRIS, DSGVO-Briefing PFLICHT",
"Woche 1: Recruiting-Pipeline, Mitarbeiter-Lifecycle",
"30/60/90: erste Stelle geschlossen, BR-Mitbestimmung erlebt"
],
"topics": ["HRIS", "DSGVO Personalakte", "Recruiting", "BR-Mitbestimmung", "AGG-Schutz"],
"difficulty": "mittel",
"source_heading": "Rolle 4 -- HR-Generalist (Mid-Level)"
},
{
"id": "office-manager",
"title": "Office-Manager / Coordinator",
"objectives": [
"Tag-1: Schlüssel, Lieferanten-Liste, Buddy = Vorgänger:in",
"Woche 1: Notfall-Pläne kennen, Stakeholder-Tour",
"30/60/90: Bestellungen, Travel-Management, Vendor-Verhandlung"
],
"topics": ["Schlüssel-Übergabe", "Lieferanten", "Notfall-Pläne", "Office-Booking", "Vendor-Management"],
"difficulty": "einfach",
"source_heading": "Rolle 5 -- Office-Manager / Office-Coordinator"
},
{
"id": "rollen-cross",
"title": "Cross-Rollen-Take-Aways",
"objectives": [
"'Tag-1-Mini-Win' pro Rolle benennen",
"Buddy-Match nach Funktion (nicht generisch)",
"30-Tage-Review als Pflicht-Marker quer über alle Rollen"
],
"topics": ["Mini-Win", "Buddy-Match", "30-Tage-Review", "TTP rollen-spezifisch"],
"difficulty": "mittel",
"source_heading": "Cross-Rollen-Take-Aways"
}
]
},
{
"id": "buddy-system",
"title": "3 · Buddy & Mentoring",
"short": "Microsoft-Studie, Briefing, Match-Prozess",
"icon": "handshake",
"color": "#0f766e",
"description": "Buddy-Systeme: warum sie funktionieren (Microsoft 2019, +73% Tag-1-Produktivität), was im Briefing nicht fehlen darf, wie der Match-Prozess konkret aussieht, plus Mentoring-Erweiterung nach Tag 90.",
"source_md": "02-buddy-mentoring-systeme.md",
"modules": [
{
"id": "buddy-vs-mentor",
"title": "Buddy != Mentor != Manager",
"objectives": [
"Drei Rollen sauber trennen (Zeitraum, Fokus, Beziehung)",
"Häufigsten Konfusions-Punkt benennen",
"Wann welche Rolle aktivieren"
],
"topics": ["Buddy", "Mentor", "Manager", "Rollen-Abgrenzung"],
"difficulty": "einfach",
"source_heading": "Definitionen -- Buddy != Mentor != Manager"
},
{
"id": "microsoft-studie",
"title": "Microsoft-Studie & ROI",
"objectives": [
"+73% Tag-1-Produktivität bei aktivem Buddy",
"8+ Treffen = +97% Tooling-Verständnis",
"ROI: 1 Buddy-Stunde = 4 Onboardee-Produktivitäts-Stunden"
],
"topics": ["Microsoft 2019", "HBR", "ROI", "Treffen-Frequenz"],
"difficulty": "mittel",
"source_heading": "Warum Buddy-Systeme funktionieren -- die Microsoft-Studie"
},
{
"id": "buddy-briefing",
"title": "Buddy-Briefing -- 5 Pflicht-Punkte",
"objectives": [
"Zeit-Commitment realistisch ansetzen (2-4 h Woche 1)",
"Klare Erwartungen formulieren",
"Was NICHT Buddy-Aufgabe ist (Bewertung, Karriere)"
],
"topics": ["Briefing-Punkte", "Eskalations-Pfad", "Anerkennung", "SLA"],
"difficulty": "mittel",
"source_heading": "Buddy-Briefing -- was der Buddy wissen muss"
},
{
"id": "match-prozess",
"title": "Buddy-Match-Prozess",
"objectives": [
"Auswahl-Kriterien (Senior/Junior/Stil/Konflikt-frei)",
"Pragmatischer 7-Schritt-Prozess",
"Spezialfall Remote-/Async-Buddy"
],
"topics": ["Match-Kriterien", "Match-Prozess", "Remote-Buddy", "Always-on-DM"],
"difficulty": "mittel",
"source_heading": "Buddy-Match -- pragmatischer Prozess"
},
{
"id": "mentoring-erweiterung",
"title": "Mentoring nach Tag 90",
"objectives": [
"Mentor-Match nach Onboarding (12-Monats-Programm)",
"Reverse-Mentoring (Junior -> Senior)",
"Mess-Kriterien für Buddy-/Mentor-Erfolg"
],
"topics": ["Mentoring", "Reverse-Mentoring", "12-Monats-Programm", "KPIs"],
"difficulty": "schwer",
"source_heading": "Mentoring-Erweiterung (nach Tag 90)"
}
]
},
{
"id": "feedback",
"title": "4 · Feedback-Rituale 30-60-90",
"short": "5 Pflicht-Slots mit Fragen-Sets",
"icon": "message-circle",
"color": "#22c55e",
"description": "Strukturiertes Feedback in 5 Pflicht-Slots: Tag 1 Welcome, Woche 1 First-Check, Tag 30 Settling-In, Tag 60 Performance-Pulse, Tag 90 Probezeit-Entscheidung. Mit konkreten Fragen-Sets, Vorbereitungs-Anleitungen und Anti-Mustern.",
"source_md": "03-feedback-rituale-30-60-90.md",
"modules": [
{
"id": "tag-1-welcome",
"title": "Tag 1 -- Welcome-Slot (30 Min)",
"objectives": [
"5 Welcome-Fragen sicher stellen",
"Output dokumentieren für Pre-Boarding-Lernen",
"Antimuster 'Alles gut?' vermeiden"
],
"topics": ["Welcome-Slot", "Fragen-Set", "Erwartungs-Sync"],
"difficulty": "einfach",
"source_heading": "Slot 1 -- Tag 1, Welcome & Erwartungs-Sync"
},
{
"id": "woche-1-check",
"title": "Woche 1 -- First-Check (45 Min)",
"objectives": [
"Friktion früh sichtbar machen (Tools, Stakeholder, Buddy)",
"Action-Items konkret formulieren",
"Buddy ebenfalls fragen"
],
"topics": ["First-Check", "Tools-Fix", "Stakeholder-Erweiterung"],
"difficulty": "einfach",
"source_heading": "Slot 2 -- Ende Woche 1, First-Check"
},
{
"id": "tag-30-settling",
"title": "Tag 30 -- Settling-In (60 Min)",
"objectives": [
"Selbst- + Fremdeinschätzung kombinieren",
"Radikal-Frage 'Würdest du den Vertrag wieder unterschreiben?'",
"Tag-30 als häufigster Stiller-Quitting-Punkt erkennen"
],
"topics": ["Settling-In", "Selbsteinschätzung", "Quitter-Risiko"],
"difficulty": "mittel",
"source_heading": "Slot 3 -- Tag 30, Settling-In"
},
{
"id": "tag-60-pulse",
"title": "Tag 60 -- Performance-Pulse (45 Min)",
"objectives": [
"Probezeit-Bedenken offen ansprechen, nicht erst Tag 89",
"Manager-Sicht transparent kommunizieren",
"Plan für die letzten 30 Tage schriftlich"
],
"topics": ["Performance-Pulse", "Frühwarnung", "Korrektur-Plan"],
"difficulty": "mittel",
"source_heading": "Slot 4 -- Tag 60, Performance-Pulse"
},
{
"id": "tag-90-probezeit",
"title": "Tag 90 -- Probezeit-Entscheidung",
"objectives": [
"Vorbereitung beidseitig (1-Pager Selbst-Reflexion + Manager-Skizze)",
"5-teilige Gesprächs-Struktur",
"3 Optionen: Bestehen / Verlängern / Beenden"
],
"topics": ["Probezeit-Entscheidung", "Anhörung", "BetrVG §102", "Outplacement"],
"difficulty": "schwer",
"source_heading": "Slot 5 -- Tag 90, Probezeit-Entscheidung"
},
{
"id": "feedback-frameworks",
"title": "Feedback-Frameworks (4-1, GROW, Stop-Start-Continue)",
"objectives": [
"4-1-Format für wöchentliche Check-ins",
"GROW-Modell für 30/60/90-Slots",
"Stop / Start / Continue als 1-Min-Pulse"
],
"topics": ["4-1-Format", "GROW-Modell", "Stop-Start-Continue"],
"difficulty": "mittel",
"source_heading": "Häufige Fragen-Sets als Vorlage"
}
]
},
{
"id": "rechtsrahmen",
"title": "5 · Rechtsrahmen + Remote + KPIs",
"short": "BGB, BBiG, AGG, BetrVG + Remote + KPIs",
"icon": "scale",
"color": "#0d9488",
"description": "Recht: Probezeit (BGB §622, BBiG §20), Befristung (TzBfG), AGG-konformer Personalfragebogen, BR-Mitbestimmung (BetrVG §99). Plus Remote-Onboarding-Spezifika, Onboarding-KPIs und die 10 typischen Fehler.",
"source_md": "05-rechtsrahmen-deutschland.md",
"modules": [
{
"id": "probezeit-bgb",
"title": "Probezeit nach BGB §622 / BBiG §20",
"objectives": [
"BGB §622 Abs. 3: max 6 Monate, 2-Wochen-Frist, NICHT automatisch",
"BBiG §20: Azubi 1-4 Monate, fristlos kündbar",
"Verlängerungs-Optionen + rechtliche Grenzen"
],
"topics": ["BGB §622", "BBiG §20", "Probezeit", "Wartezeit KSchG", "Verlängerung"],
"difficulty": "schwer",
"source_heading": "Probezeit -- was viele falsch wissen"
},
{
"id": "befristung-tzbfg",
"title": "Befristung TzBfG §14",
"objectives": [
"Sachgrundlose Befristung max. 2 Jahre + 3 Verlängerungen",
"Vorbeschäftigungs-Verbot kennen",
"Schriftform vor Arbeitsantritt"
],
"topics": ["TzBfG §14", "Sachgrund", "Vorbeschäftigung", "Schriftform"],
"difficulty": "schwer",
"source_heading": "Befristung -- TzBfG"
},
{
"id": "agg-personalfragebogen",
"title": "AGG + DSGVO Personalfragebogen",
"objectives": [
"Was darf gefragt werden (Vertragsabwicklung)",
"Was nicht (Familie, Religion, Schwangerschaft, Krankheit)",
"Konsequenzen Verstoß: §15 AGG bis 3 Monatsgehälter"
],
"topics": ["AGG §7", "AGG §15", "BDSG §26", "Art. 13 DSGVO", "Personalfragebogen"],
"difficulty": "schwer",
"source_heading": "Personalfragebogen / Datenerhebung -- AGG + DSGVO + § 26 BDSG"
},
{
"id": "betriebsrat",
"title": "Betriebsrat-Mitbestimmung (BetrVG §99 + §81)",
"objectives": [
"§99: Zustimmung BR vor Einstellung, 1 Woche Frist",
"§81: Unterrichtungs-Pflicht ist Onboarding-Plan",
"§87 Abs. 1 Nr. 6 bei HRIS / Überwachung"
],
"topics": ["BetrVG §99", "BetrVG §81", "BetrVG §87", "Mitbestimmung", "Zustimmungsersetzung"],
"difficulty": "schwer",
"source_heading": "Betriebsrat-Mitbestimmung beim Onboarding (BetrVG)"
},
{
"id": "remote-hybrid",
"title": "Remote- & Hybrid-Onboarding",
"objectives": [
"Remote != 'Office per Zoom' -- eigene Disziplin",
"Async-First (Slack > Zoom, Loom > Live-Tour)",
"Anti-Isolation (Coffee-Roulette, Co-Working, Always-on-DM)"
],
"topics": ["Remote-First", "Async", "Loom", "Coffee-Roulette", "Co-Working", "Time-Zone"],
"difficulty": "mittel",
"source_heading": "Der größte Denkfehler"
},
{
"id": "kpis-onboarding",
"title": "Onboarding-KPIs & Benchmarks",
"objectives": [
"5 Pflicht-KPIs: TTP, 90-Tage-Retention, eNPS, QoH, Time-to-Decision",
"Benchmarks (SHRM, Aberdeen, Bersin)",
"Gaming-Risiken erkennen + verhindern"
],
"topics": ["TTP", "Retention", "eNPS", "QoH", "Aberdeen Benchmarks"],
"difficulty": "mittel",
"source_heading": "KPI 1 -- Time-to-Productivity (TTP)"
}
]
}
],
"badges": [
{"id": "erste_planung", "title": "Erste Planung", "icon": "compass", "description": "1. Quiz zu Grundlagen erfolgreich."},
{"id": "rollen_meister", "title": "Rollen-Meister", "icon": "users", "description": "5 Rollen-Quiz korrekt beantwortet."},
{"id": "buddy_pro", "title": "Buddy-Pro", "icon": "handshake", "description": "3 Buddy-System-Fragen korrekt."},
{"id": "feedback_meister", "title": "Feedback-Meister", "icon": "message-circle", "description": "5 Feedback-Ritual-Fragen korrekt."},
{"id": "rechtsrahmen_kenner", "title": "Rechtsrahmen-Kenner", "icon": "scale", "description": "3 Probezeit/AGG/BetrVG-Fragen korrekt."},
{"id": "otto_meister", "title": "Otto-Meister", "icon": "crown", "description": "Alle 5 Module mit >=80% abgeschlossen."},
{"id": "streak_7", "title": "Onboarding-Disziplin", "icon": "flame", "description": "7 Tage in Folge aktiv gewesen."},
{"id": "night_owl", "title": "Nachteule", "icon": "moon", "description": "Nach 22 Uhr gelernt."},
{"id": "early_bird", "title": "Frühaufsteher", "icon": "sun", "description": "Vor 7 Uhr gelernt."}
],
"levels": [
{"min": 0, "title": "HR-Novize"},
{"min": 50, "title": "HR-Sachbearbeiter:in"},
{"min": 200, "title": "HR-Generalist:in"},
{"min": 500, "title": "HR-Business-Partner:in"},
{"min": 1250, "title": "HR-Lead"},
{"min": 2500, "title": "HR-Direktor:in"},
{"min": 5000, "title": "People-&-Culture-Chief"}
]
}

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

@ -0,0 +1,4 @@
{ min: 0, title: 'HR-Novize' }, { min: 50, title: 'HR-Sachbearbeiter:in' },
{ min: 200, title: 'HR-Generalist:in' }, { min: 500, title: 'HR-Business-Partner:in' },
{ min: 1250, title: 'HR-Lead' }, { min: 2500, title: 'HR-Direktor:in' },
{ min: 5000, title: 'People-&-Culture-Chief' }

29
src/welcome.html Normal file
View file

@ -0,0 +1,29 @@
<h2>Willkommen bei Otto!</h2>
<p>Hi, ich bin Otto. Ich bring deine Neuen in 90 Tagen zur Produktivität — ohne dass du jeden Plan einzeln baust. Sag mir <strong>Rolle + Team-Setup</strong>, ich liefer rollen-spezifischen Tag-1 bis Tag-90 mit <strong>Buddy-Briefing</strong>, <strong>Feedback-Slots</strong>, <strong>Probezeit-Check</strong>. Dazu Trainingseinheiten zu Bauer-Modell, Remote-Hybrid, AGG-konformer Personalfragebogen.</p>
<div class="mode-grid">
<button class="mode-card" data-goto="chat">
<strong>Chat</strong>
<span>Frag mich alles zu Onboarding, Probezeit, Buddy.</span>
</button>
<button class="mode-card" data-goto="quiz">
<strong>Quiz</strong>
<span>Szenario-Fragen aus dem HR-Alltag, mit XP.</span>
</button>
<button class="mode-card" data-goto="flash">
<strong>Flashcards</strong>
<span>Bauer-4-C, Probezeit, Buddy, KPIs — mit Spaced-Repetition.</span>
</button>
<button class="mode-card" data-goto="progress">
<strong>Fortschritt</strong>
<span>XP, Streaks, Badges, Level.</span>
</button>
<button class="mode-card" data-goto="curriculum">
<strong>Module</strong>
<span>5 Curricula: Grundlagen bis Rechtsrahmen.</span>
</button>
<button class="mode-card" data-prompt="PLAN_REQUEST: 90-Tage-Onboarding für [Rolle], [MA-Anzahl], [Branche]">
<strong>Plan-Generator</strong>
<span><code>PLAN_REQUEST</code> + Rolle/Größe/Branche → fertiger 90-Tage-Plan als Karte.</span>
</button>
</div>
<p style="font-size:.82rem;color:var(--text-mute)">In 3 Sätzen: Chat zum Plan-Bauen → Quiz zum Üben → Flashcards zum Merken. Fortschritt zeigt dir, wo du stehst; die Onboarding-Bibliothek gibt dir 5 strukturierte Module von Bauer-Modell bis Probezeit-Recht.</p>

1749
www/app.js Normal file

File diff suppressed because it is too large Load diff

417
www/curricula.json Normal file
View file

@ -0,0 +1,417 @@
{
"version": "2026-04-25",
"updated": "2026-04-25",
"curricula": [
{
"id": "grundlagen",
"title": "1 · Grundlagen",
"short": "Bauer-Modell, Pre-Boarding, Tag 1",
"icon": "shield",
"color": "#0d9488",
"description": "Was ist gutes Onboarding? Bauer-Modell (4 C's), 90-Tage-Bogen, Pre-Boarding-Effekte, Tag-1 als Erlebnis statt Bürokratie.",
"source_md": "00-onboarding-grundlagen.md",
"modules": [
{
"id": "bauer-4c",
"title": "Bauer-Modell — die 4 C's",
"objectives": [
"Compliance / Clarification / Culture / Connection unterscheiden",
"Eigenes Onboarding den 4 Ebenen zuordnen",
"Antimuster 'Compliance-Heavy / Connection-Light' erkennen"
],
"topics": ["Bauer 2010", "4 C's", "Compliance", "Clarification", "Culture", "Connection"],
"difficulty": "einfach",
"source_heading": "Das Bauer-Modell — die 4 C's"
},
{
"id": "90-tage-bogen",
"title": "Die 90-Tage-Phasen",
"objectives": [
"Pre-Boarding bis Probezeit-Entscheidung sequenzieren",
"Kritische Pulse-Punkte (Tag 30/60/90) benennen",
"Time-to-Productivity rollen-spezifisch denken"
],
"topics": ["Pre-Boarding", "Tag 1", "Tag 30", "Tag 60", "Tag 90", "TTP"],
"difficulty": "mittel",
"source_heading": "Die Phasen im Detail"
},
{
"id": "pre-boarding",
"title": "Pre-Boarding & Welcome-Box",
"objectives": [
"Touchpoints zwischen Vertrag und Tag 1 strukturieren",
"Welcome-Box-Effekt verstehen (3x First-Day-NPS)",
"Click-Boarding-2023-Daten zur Funkstille-Falle"
],
"topics": ["Pre-Boarding-Checkliste", "Welcome-Box", "Funkstille-Falle", "CEO-Welcome"],
"difficulty": "einfach",
"source_heading": "Pre-Boarding (Vertrag -> Tag -1)"
},
{
"id": "tag-1-erlebnis",
"title": "Tag 1 als Erlebnis",
"objectives": [
"Antimuster (Bürokratie-Marathon) erkennen",
"Best-Practice-Skript Tag 1 anwenden",
"Mini-Win-Aufgabe pro Rolle definieren"
],
"topics": ["Tag-1-Skript", "Mini-Win", "Buddy-Welcome", "Team-Lunch"],
"difficulty": "mittel",
"source_heading": "Tag 1 -- als Erlebnis statt Bürokratie"
},
{
"id": "kpis-grundlagen",
"title": "ROI & Bauer-Take-Aways",
"objectives": [
"Bauer-Take-Aways 1-4 zitieren",
"ROI-Argument für Pre-Boarding (4-6 Monatsgehälter Recruiting)",
"Reifegrade Passive/HighPotential/Proactive"
],
"topics": ["ROI", "Reifegrade", "Take-Aways", "Bauer 2010"],
"difficulty": "mittel",
"source_heading": "Bauer-Take-Aways für jede:n HR-Verantwortliche:n"
}
]
},
{
"id": "rollen-spezifisch",
"title": "2 · Rollen-spezifische Pläne",
"short": "5 Standardrollen mit 30/60/90-Templates",
"icon": "users",
"color": "#14b8a6",
"description": "Onboarding-Templates für Software-Engineer, Sales-Rep, Marketing-Lead, HR-Generalist, Office-Manager. Pro Rolle: Tag-1-Tasks, Woche-1-Skill-Check, 30/60/90-Reviews und typische Fehler.",
"source_md": "01-rollen-spezifisch-techie-vs-vertrieb.md",
"modules": [
{
"id": "engineer",
"title": "Software-Engineer (Mid, Backend)",
"objectives": [
"Tag-1: First-Repo, Good-First-Issue, Buddy-Walkthrough",
"Woche 1: erstes PR mergen",
"30/60/90-KPIs: PRs/Sprint, Architektur-Beiträge, Feature-Lieferung"
],
"topics": ["IDE-Setup", "Good-First-Issue", "Code-Review", "Pair-Programming", "Tech-Lead-1:1"],
"difficulty": "mittel",
"source_heading": "Rolle 1 -- Software-Engineer (Mid-Level, Backend)"
},
{
"id": "sales",
"title": "Sales-Rep / Account-Executive",
"objectives": [
"Tag-1: CRM, Buddy, 2-3 Deals als Anatomy",
"Woche 1: Discovery-Calls live mithören, Roleplay",
"30/60/90-KPIs: Pipeline-Coverage, Discovery-Quality, erstes Closed-Won"
],
"topics": ["CRM-Onboarding", "Discovery-Call", "Pitch-Roleplay", "Pipeline-Building", "Forecast-Accuracy"],
"difficulty": "mittel",
"source_heading": "Rolle 2 -- Sales-Rep (Account-Executive, B2B)"
},
{
"id": "marketing",
"title": "Marketing-Lead (Senior)",
"objectives": [
"Tag-1: Tools + Stakeholder-Liste",
"Woche 1: 5 Stakeholder-1:1s, Brand-Audit-Light",
"30/60/90: Strategie-1-Pager, Quartals-OKRs, erste Kampagne"
],
"topics": ["Stakeholder-Mapping", "Brand-Audit", "Quartals-OKRs", "Reporting-Cadence"],
"difficulty": "mittel",
"source_heading": "Rolle 3 -- Marketing-Lead (Senior, Brand & Demand-Gen)"
},
{
"id": "hr-generalist",
"title": "HR-Generalist (Mid)",
"objectives": [
"Tag-1: HRIS, DSGVO-Briefing PFLICHT",
"Woche 1: Recruiting-Pipeline, Mitarbeiter-Lifecycle",
"30/60/90: erste Stelle geschlossen, BR-Mitbestimmung erlebt"
],
"topics": ["HRIS", "DSGVO Personalakte", "Recruiting", "BR-Mitbestimmung", "AGG-Schutz"],
"difficulty": "mittel",
"source_heading": "Rolle 4 -- HR-Generalist (Mid-Level)"
},
{
"id": "office-manager",
"title": "Office-Manager / Coordinator",
"objectives": [
"Tag-1: Schlüssel, Lieferanten-Liste, Buddy = Vorgänger:in",
"Woche 1: Notfall-Pläne kennen, Stakeholder-Tour",
"30/60/90: Bestellungen, Travel-Management, Vendor-Verhandlung"
],
"topics": ["Schlüssel-Übergabe", "Lieferanten", "Notfall-Pläne", "Office-Booking", "Vendor-Management"],
"difficulty": "einfach",
"source_heading": "Rolle 5 -- Office-Manager / Office-Coordinator"
},
{
"id": "rollen-cross",
"title": "Cross-Rollen-Take-Aways",
"objectives": [
"'Tag-1-Mini-Win' pro Rolle benennen",
"Buddy-Match nach Funktion (nicht generisch)",
"30-Tage-Review als Pflicht-Marker quer über alle Rollen"
],
"topics": ["Mini-Win", "Buddy-Match", "30-Tage-Review", "TTP rollen-spezifisch"],
"difficulty": "mittel",
"source_heading": "Cross-Rollen-Take-Aways"
}
]
},
{
"id": "buddy-system",
"title": "3 · Buddy & Mentoring",
"short": "Microsoft-Studie, Briefing, Match-Prozess",
"icon": "handshake",
"color": "#0f766e",
"description": "Buddy-Systeme: warum sie funktionieren (Microsoft 2019, +73% Tag-1-Produktivität), was im Briefing nicht fehlen darf, wie der Match-Prozess konkret aussieht, plus Mentoring-Erweiterung nach Tag 90.",
"source_md": "02-buddy-mentoring-systeme.md",
"modules": [
{
"id": "buddy-vs-mentor",
"title": "Buddy != Mentor != Manager",
"objectives": [
"Drei Rollen sauber trennen (Zeitraum, Fokus, Beziehung)",
"Häufigsten Konfusions-Punkt benennen",
"Wann welche Rolle aktivieren"
],
"topics": ["Buddy", "Mentor", "Manager", "Rollen-Abgrenzung"],
"difficulty": "einfach",
"source_heading": "Definitionen -- Buddy != Mentor != Manager"
},
{
"id": "microsoft-studie",
"title": "Microsoft-Studie & ROI",
"objectives": [
"+73% Tag-1-Produktivität bei aktivem Buddy",
"8+ Treffen = +97% Tooling-Verständnis",
"ROI: 1 Buddy-Stunde = 4 Onboardee-Produktivitäts-Stunden"
],
"topics": ["Microsoft 2019", "HBR", "ROI", "Treffen-Frequenz"],
"difficulty": "mittel",
"source_heading": "Warum Buddy-Systeme funktionieren -- die Microsoft-Studie"
},
{
"id": "buddy-briefing",
"title": "Buddy-Briefing -- 5 Pflicht-Punkte",
"objectives": [
"Zeit-Commitment realistisch ansetzen (2-4 h Woche 1)",
"Klare Erwartungen formulieren",
"Was NICHT Buddy-Aufgabe ist (Bewertung, Karriere)"
],
"topics": ["Briefing-Punkte", "Eskalations-Pfad", "Anerkennung", "SLA"],
"difficulty": "mittel",
"source_heading": "Buddy-Briefing -- was der Buddy wissen muss"
},
{
"id": "match-prozess",
"title": "Buddy-Match-Prozess",
"objectives": [
"Auswahl-Kriterien (Senior/Junior/Stil/Konflikt-frei)",
"Pragmatischer 7-Schritt-Prozess",
"Spezialfall Remote-/Async-Buddy"
],
"topics": ["Match-Kriterien", "Match-Prozess", "Remote-Buddy", "Always-on-DM"],
"difficulty": "mittel",
"source_heading": "Buddy-Match -- pragmatischer Prozess"
},
{
"id": "mentoring-erweiterung",
"title": "Mentoring nach Tag 90",
"objectives": [
"Mentor-Match nach Onboarding (12-Monats-Programm)",
"Reverse-Mentoring (Junior -> Senior)",
"Mess-Kriterien für Buddy-/Mentor-Erfolg"
],
"topics": ["Mentoring", "Reverse-Mentoring", "12-Monats-Programm", "KPIs"],
"difficulty": "schwer",
"source_heading": "Mentoring-Erweiterung (nach Tag 90)"
}
]
},
{
"id": "feedback",
"title": "4 · Feedback-Rituale 30-60-90",
"short": "5 Pflicht-Slots mit Fragen-Sets",
"icon": "message-circle",
"color": "#22c55e",
"description": "Strukturiertes Feedback in 5 Pflicht-Slots: Tag 1 Welcome, Woche 1 First-Check, Tag 30 Settling-In, Tag 60 Performance-Pulse, Tag 90 Probezeit-Entscheidung. Mit konkreten Fragen-Sets, Vorbereitungs-Anleitungen und Anti-Mustern.",
"source_md": "03-feedback-rituale-30-60-90.md",
"modules": [
{
"id": "tag-1-welcome",
"title": "Tag 1 -- Welcome-Slot (30 Min)",
"objectives": [
"5 Welcome-Fragen sicher stellen",
"Output dokumentieren für Pre-Boarding-Lernen",
"Antimuster 'Alles gut?' vermeiden"
],
"topics": ["Welcome-Slot", "Fragen-Set", "Erwartungs-Sync"],
"difficulty": "einfach",
"source_heading": "Slot 1 -- Tag 1, Welcome & Erwartungs-Sync"
},
{
"id": "woche-1-check",
"title": "Woche 1 -- First-Check (45 Min)",
"objectives": [
"Friktion früh sichtbar machen (Tools, Stakeholder, Buddy)",
"Action-Items konkret formulieren",
"Buddy ebenfalls fragen"
],
"topics": ["First-Check", "Tools-Fix", "Stakeholder-Erweiterung"],
"difficulty": "einfach",
"source_heading": "Slot 2 -- Ende Woche 1, First-Check"
},
{
"id": "tag-30-settling",
"title": "Tag 30 -- Settling-In (60 Min)",
"objectives": [
"Selbst- + Fremdeinschätzung kombinieren",
"Radikal-Frage 'Würdest du den Vertrag wieder unterschreiben?'",
"Tag-30 als häufigster Stiller-Quitting-Punkt erkennen"
],
"topics": ["Settling-In", "Selbsteinschätzung", "Quitter-Risiko"],
"difficulty": "mittel",
"source_heading": "Slot 3 -- Tag 30, Settling-In"
},
{
"id": "tag-60-pulse",
"title": "Tag 60 -- Performance-Pulse (45 Min)",
"objectives": [
"Probezeit-Bedenken offen ansprechen, nicht erst Tag 89",
"Manager-Sicht transparent kommunizieren",
"Plan für die letzten 30 Tage schriftlich"
],
"topics": ["Performance-Pulse", "Frühwarnung", "Korrektur-Plan"],
"difficulty": "mittel",
"source_heading": "Slot 4 -- Tag 60, Performance-Pulse"
},
{
"id": "tag-90-probezeit",
"title": "Tag 90 -- Probezeit-Entscheidung",
"objectives": [
"Vorbereitung beidseitig (1-Pager Selbst-Reflexion + Manager-Skizze)",
"5-teilige Gesprächs-Struktur",
"3 Optionen: Bestehen / Verlängern / Beenden"
],
"topics": ["Probezeit-Entscheidung", "Anhörung", "BetrVG §102", "Outplacement"],
"difficulty": "schwer",
"source_heading": "Slot 5 -- Tag 90, Probezeit-Entscheidung"
},
{
"id": "feedback-frameworks",
"title": "Feedback-Frameworks (4-1, GROW, Stop-Start-Continue)",
"objectives": [
"4-1-Format für wöchentliche Check-ins",
"GROW-Modell für 30/60/90-Slots",
"Stop / Start / Continue als 1-Min-Pulse"
],
"topics": ["4-1-Format", "GROW-Modell", "Stop-Start-Continue"],
"difficulty": "mittel",
"source_heading": "Häufige Fragen-Sets als Vorlage"
}
]
},
{
"id": "rechtsrahmen",
"title": "5 · Rechtsrahmen + Remote + KPIs",
"short": "BGB, BBiG, AGG, BetrVG + Remote + KPIs",
"icon": "scale",
"color": "#0d9488",
"description": "Recht: Probezeit (BGB §622, BBiG §20), Befristung (TzBfG), AGG-konformer Personalfragebogen, BR-Mitbestimmung (BetrVG §99). Plus Remote-Onboarding-Spezifika, Onboarding-KPIs und die 10 typischen Fehler.",
"source_md": "05-rechtsrahmen-deutschland.md",
"modules": [
{
"id": "probezeit-bgb",
"title": "Probezeit nach BGB §622 / BBiG §20",
"objectives": [
"BGB §622 Abs. 3: max 6 Monate, 2-Wochen-Frist, NICHT automatisch",
"BBiG §20: Azubi 1-4 Monate, fristlos kündbar",
"Verlängerungs-Optionen + rechtliche Grenzen"
],
"topics": ["BGB §622", "BBiG §20", "Probezeit", "Wartezeit KSchG", "Verlängerung"],
"difficulty": "schwer",
"source_heading": "Probezeit -- was viele falsch wissen"
},
{
"id": "befristung-tzbfg",
"title": "Befristung TzBfG §14",
"objectives": [
"Sachgrundlose Befristung max. 2 Jahre + 3 Verlängerungen",
"Vorbeschäftigungs-Verbot kennen",
"Schriftform vor Arbeitsantritt"
],
"topics": ["TzBfG §14", "Sachgrund", "Vorbeschäftigung", "Schriftform"],
"difficulty": "schwer",
"source_heading": "Befristung -- TzBfG"
},
{
"id": "agg-personalfragebogen",
"title": "AGG + DSGVO Personalfragebogen",
"objectives": [
"Was darf gefragt werden (Vertragsabwicklung)",
"Was nicht (Familie, Religion, Schwangerschaft, Krankheit)",
"Konsequenzen Verstoß: §15 AGG bis 3 Monatsgehälter"
],
"topics": ["AGG §7", "AGG §15", "BDSG §26", "Art. 13 DSGVO", "Personalfragebogen"],
"difficulty": "schwer",
"source_heading": "Personalfragebogen / Datenerhebung -- AGG + DSGVO + § 26 BDSG"
},
{
"id": "betriebsrat",
"title": "Betriebsrat-Mitbestimmung (BetrVG §99 + §81)",
"objectives": [
"§99: Zustimmung BR vor Einstellung, 1 Woche Frist",
"§81: Unterrichtungs-Pflicht ist Onboarding-Plan",
"§87 Abs. 1 Nr. 6 bei HRIS / Überwachung"
],
"topics": ["BetrVG §99", "BetrVG §81", "BetrVG §87", "Mitbestimmung", "Zustimmungsersetzung"],
"difficulty": "schwer",
"source_heading": "Betriebsrat-Mitbestimmung beim Onboarding (BetrVG)"
},
{
"id": "remote-hybrid",
"title": "Remote- & Hybrid-Onboarding",
"objectives": [
"Remote != 'Office per Zoom' -- eigene Disziplin",
"Async-First (Slack > Zoom, Loom > Live-Tour)",
"Anti-Isolation (Coffee-Roulette, Co-Working, Always-on-DM)"
],
"topics": ["Remote-First", "Async", "Loom", "Coffee-Roulette", "Co-Working", "Time-Zone"],
"difficulty": "mittel",
"source_heading": "Der größte Denkfehler"
},
{
"id": "kpis-onboarding",
"title": "Onboarding-KPIs & Benchmarks",
"objectives": [
"5 Pflicht-KPIs: TTP, 90-Tage-Retention, eNPS, QoH, Time-to-Decision",
"Benchmarks (SHRM, Aberdeen, Bersin)",
"Gaming-Risiken erkennen + verhindern"
],
"topics": ["TTP", "Retention", "eNPS", "QoH", "Aberdeen Benchmarks"],
"difficulty": "mittel",
"source_heading": "KPI 1 -- Time-to-Productivity (TTP)"
}
]
}
],
"badges": [
{"id": "erste_planung", "title": "Erste Planung", "icon": "compass", "description": "1. Quiz zu Grundlagen erfolgreich."},
{"id": "rollen_meister", "title": "Rollen-Meister", "icon": "users", "description": "5 Rollen-Quiz korrekt beantwortet."},
{"id": "buddy_pro", "title": "Buddy-Pro", "icon": "handshake", "description": "3 Buddy-System-Fragen korrekt."},
{"id": "feedback_meister", "title": "Feedback-Meister", "icon": "message-circle", "description": "5 Feedback-Ritual-Fragen korrekt."},
{"id": "rechtsrahmen_kenner", "title": "Rechtsrahmen-Kenner", "icon": "scale", "description": "3 Probezeit/AGG/BetrVG-Fragen korrekt."},
{"id": "otto_meister", "title": "Otto-Meister", "icon": "crown", "description": "Alle 5 Module mit >=80% abgeschlossen."},
{"id": "streak_7", "title": "Onboarding-Disziplin", "icon": "flame", "description": "7 Tage in Folge aktiv gewesen."},
{"id": "night_owl", "title": "Nachteule", "icon": "moon", "description": "Nach 22 Uhr gelernt."},
{"id": "early_bird", "title": "Frühaufsteher", "icon": "sun", "description": "Vor 7 Uhr gelernt."}
],
"levels": [
{"min": 0, "title": "HR-Novize"},
{"min": 50, "title": "HR-Sachbearbeiter:in"},
{"min": 200, "title": "HR-Generalist:in"},
{"min": 500, "title": "HR-Business-Partner:in"},
{"min": 1250, "title": "HR-Lead"},
{"min": 2500, "title": "HR-Direktor:in"},
{"min": 5000, "title": "People-&-Culture-Chief"}
]
}

125
www/index.html Normal file
View file

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Otto · Dein Onboarding-Orchestrator</title>
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
<meta name="theme-color" content="#0a0a0f">
<meta name="description" content="Otto — der Onboarding-Coach für HR und Führungskräfte. Rollen-spezifische 90-Tage-Pläne, Buddy-System, Probezeit-Entscheidung. Im deutschen Bunker.">
<link rel="stylesheet" href="styles.css">
<script>window.__OTTO_KEY__ = 'qb_j4i2pwkzc5xl';</script>
</head>
<body>
<div class="app" role="application" aria-label="Otto 90 Tage zum produktiven Mitarbeiter">
<header class="topbar">
<div class="brand">
<span class="brand-icon" aria-hidden="true">O</span>
<span>Otto <small>Onboarding-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>Willkommen bei Otto!</h2>
<p>Hi, ich bin Otto. Ich bring deine Neuen in 90 Tagen zur Produktivität — ohne dass du jeden Plan einzeln baust. Sag mir <strong>Rolle + Team-Setup</strong>, ich liefer rollen-spezifischen Tag-1 bis Tag-90 mit <strong>Buddy-Briefing</strong>, <strong>Feedback-Slots</strong>, <strong>Probezeit-Check</strong>. Dazu Trainingseinheiten zu Bauer-Modell, Remote-Hybrid, AGG-konformer Personalfragebogen.</p>
<div class="mode-grid">
<button class="mode-card" data-goto="chat">
<strong>Chat</strong>
<span>Frag mich alles zu Onboarding, Probezeit, Buddy.</span>
</button>
<button class="mode-card" data-goto="quiz">
<strong>Quiz</strong>
<span>Szenario-Fragen aus dem HR-Alltag, mit XP.</span>
</button>
<button class="mode-card" data-goto="flash">
<strong>Flashcards</strong>
<span>Bauer-4-C, Probezeit, Buddy, KPIs — mit Spaced-Repetition.</span>
</button>
<button class="mode-card" data-goto="progress">
<strong>Fortschritt</strong>
<span>XP, Streaks, Badges, Level.</span>
</button>
<button class="mode-card" data-goto="curriculum">
<strong>Module</strong>
<span>5 Curricula: Grundlagen bis Rechtsrahmen.</span>
</button>
<button class="mode-card" data-prompt="PLAN_REQUEST: 90-Tage-Onboarding für [Rolle], [MA-Anzahl], [Branche]">
<strong>Plan-Generator</strong>
<span><code>PLAN_REQUEST</code> + Rolle/Größe/Branche → fertiger 90-Tage-Plan als Karte.</span>
</button>
</div>
<p style="font-size:.82rem;color:var(--text-mute)">In 3 Sätzen: Chat zum Plan-Bauen → Quiz zum Üben → Flashcards zum Merken. Fortschritt zeigt dir, wo du stehst; die Onboarding-Bibliothek gibt dir 5 strukturierte Module von Bauer-Modell bis Probezeit-Recht.</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 Otto — 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