init: extract compliance-faq from qognio-bot-widget-template@d2c816f
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-25
This commit is contained in:
commit
7b4cb52edb
16 changed files with 3599 additions and 0 deletions
7
.dockerignore
Normal file
7
.dockerignore
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
README.md
|
||||||
|
bot.json
|
||||||
|
src/
|
||||||
|
docker-compose.yml
|
||||||
|
*.md
|
||||||
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
.DS_Store
|
||||||
|
*.log
|
||||||
|
*.tmp
|
||||||
|
node_modules/
|
||||||
13
Dockerfile
Normal file
13
Dockerfile
Normal 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
67
README.md
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
# Cleo — Compliance-Concierge
|
||||||
|
|
||||||
|
Cleo — die Compliance-Concierge für Mittelstand. Lotsen-Funktion über DSGVO, AI-Act, NIS-2, GoBD, BetrVG, ArbSchG. Pragmatisch, priorisiert, ohne Beratersprech. Im deutschen Bunker.
|
||||||
|
|
||||||
|
```
|
||||||
|
slug : compliance-faq
|
||||||
|
version : 2026-04-25
|
||||||
|
accent : #0891b2
|
||||||
|
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 compliance-faq --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-compliance-faq
|
||||||
|
cd my-customer-compliance-faq
|
||||||
|
# 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/* compliance-faq/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:46+02:00.
|
||||||
14
bot.json
Normal file
14
bot.json
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"slug": "compliance-faq",
|
||||||
|
"name": "Cleo",
|
||||||
|
"title": "Compliance-Concierge",
|
||||||
|
"tagline": "Compliance-Concierge",
|
||||||
|
"description": "Cleo — die Compliance-Concierge für Mittelstand. Lotsen-Funktion über DSGVO, AI-Act, NIS-2, GoBD, BetrVG, ArbSchG. Pragmatisch, priorisiert, ohne Beratersprech. Im deutschen Bunker.",
|
||||||
|
"version": "2026-04-25",
|
||||||
|
"accent": "#0891b2",
|
||||||
|
"extracted_from": "qognio-bot-widget-template",
|
||||||
|
"parent_core_commit": "d2c816f3edbc9760802a11b29ff4151c7aad4b46",
|
||||||
|
"extracted_at": "2026-04-29T01:35:46+02:00",
|
||||||
|
"runtime": "nginx:alpine",
|
||||||
|
"default_port": 80
|
||||||
|
}
|
||||||
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal 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-compliance-faq:${TAG:-latest}
|
||||||
|
container_name: bot-compliance-faq
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- caddy
|
||||||
|
labels:
|
||||||
|
caddy: "compliance-faq.on.qognio.com"
|
||||||
|
caddy.reverse_proxy: "{{upstreams 80}}"
|
||||||
|
qognio.bot.slug: "compliance-faq"
|
||||||
|
qognio.bot.version: "2026-04-25"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
caddy:
|
||||||
|
external: true
|
||||||
27
nginx.conf
Normal file
27
nginx.conf
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/check-badges.js
Normal file
19
src/check-badges.js
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
// DSGVO-Erstkontakt — 1 Modul "dsgvo-grundlagen" Quiz korrekt
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['dsgvo-grundlagen'] >= 1)) unlockBadge('dsgvo_erstkontakt');
|
||||||
|
// AI-Act-Spürnase — Modul "ai-act" Quiz mit ≥3 korrekt
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['ai-act'] >= 3)) unlockBadge('ai_act_spuernase');
|
||||||
|
// NIS2-Versteher:in — Modul "nis2" Quiz mit ≥3 korrekt
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['nis2'] >= 3)) unlockBadge('nis2_versteher');
|
||||||
|
// GoBD-Kenner:in — Modul "gobd" Quiz bestanden
|
||||||
|
if ((state.moduleCorrect && state.moduleCorrect['gobd'] >= 3)) unlockBadge('gobd_kenner');
|
||||||
|
// Mittelstands-Lotse — Schwellenwert-Modul (Flashcards bestanden ODER Quiz mit ≥3 korrekt)
|
||||||
|
if ((state.modulePassedFlash && state.modulePassedFlash['schwellenwerte-uebersicht']) ||
|
||||||
|
(state.moduleCorrect && state.moduleCorrect['schwellenwerte-uebersicht'] >= 3)) unlockBadge('mittelstands_lotse');
|
||||||
|
// Compliance-Generalist:in — mindestens 4 Module mit ≥80% abgeschlossen (Module aus 4 Säulen)
|
||||||
|
if ((state.completedCurricula || []).length >= 4) unlockBadge('compliance_generalist');
|
||||||
|
// Compliance-Disziplin — 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');
|
||||||
34
src/config.yaml
Normal file
34
src/config.yaml
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
slug: compliance-faq
|
||||||
|
bot_name: Cleo
|
||||||
|
bot_title: Compliance-Concierge
|
||||||
|
brand_letter: C
|
||||||
|
title: "Cleo · Deine Compliance-Concierge"
|
||||||
|
tagline: "Compliance-Lotse für KMU"
|
||||||
|
tagline_short: Compliance-Concierge
|
||||||
|
meta_description: "Cleo — die Compliance-Concierge für Mittelstand. Lotsen-Funktion über DSGVO, AI-Act, NIS-2, GoBD, BetrVG, ArbSchG. Pragmatisch, priorisiert, ohne Beratersprech. Im deutschen Bunker."
|
||||||
|
bot_key_var: __CLEO_KEY__
|
||||||
|
bot_key_value: qb_bhtuuckt3tkeh4xse7
|
||||||
|
ls_prefix: cleo
|
||||||
|
bot_version: "2026-04-25"
|
||||||
|
|
||||||
|
# Color theme — Cleo cyan/teal (distinct from Cora green and Quinn purple)
|
||||||
|
accent: "#0891b2"
|
||||||
|
accent_2: "#06b6d4"
|
||||||
|
accent_dark: "#0e7490"
|
||||||
|
accent_rgb: "8, 145, 178"
|
||||||
|
accent_rgb_compact: "8,145,178"
|
||||||
|
success_color: "#06b6d4"
|
||||||
|
msg_strong_color: "#a5f3fc"
|
||||||
|
|
||||||
|
# UI Labels
|
||||||
|
tab_flash_label: "Begriffe"
|
||||||
|
tab_curriculum_label: "Compliance-Karte"
|
||||||
|
curriculum_long_label: "Compliance-Landkarte"
|
||||||
|
curriculum_comment: COMPLIANCE_MAP
|
||||||
|
|
||||||
|
# Bot-personality strings
|
||||||
|
quiz_intro_hint: "Wähle einen Pflicht-Bereich — Cleo stellt dir Szenario-Fragen aus dem KMU-Alltag."
|
||||||
|
quiz_verb: stellt
|
||||||
|
quiz_noun: "Pflicht-Szenarien"
|
||||||
|
flash_intro_hint: "Cleo baut Karteikarten zu Compliance-Begriffen. Bewerte dein Erinnerungsvermögen — schwere Karten wiederholt das System öfter (SM-2)."
|
||||||
|
flash_verb: baut
|
||||||
228
src/curricula.json
Normal file
228
src/curricula.json
Normal file
|
|
@ -0,0 +1,228 @@
|
||||||
|
{
|
||||||
|
"version": "2026-04-25",
|
||||||
|
"updated": "2026-04-25",
|
||||||
|
"curricula": [
|
||||||
|
{
|
||||||
|
"id": "schwellenwerte",
|
||||||
|
"title": "1 · Schwellenwerte",
|
||||||
|
"short": "Welche Pflicht ab welcher MA-Zahl",
|
||||||
|
"icon": "ruler",
|
||||||
|
"color": "#0891b2",
|
||||||
|
"description": "Die wichtigsten Schwellenwerte aus DSGVO, BetrVG, ArbSchG, AGG, GoBD, NIS-2 — gesammelt als KMU-Kompass.",
|
||||||
|
"source_md": "01-schwellenwerte.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "dsb-pflicht",
|
||||||
|
"title": "DSB-Pflicht (§ 38 BDSG)",
|
||||||
|
"objectives": [
|
||||||
|
"Die 20-Personen-Schwelle für regelmäßige Verarbeitung personenbezogener Daten benennen",
|
||||||
|
"Pflicht-Auslöser unabhängig von MA-Zahl (Kerntätigkeit, Art. 9, Profiling) erkennen",
|
||||||
|
"Externer vs. interner DSB — Vor-/Nachteile"
|
||||||
|
],
|
||||||
|
"topics": ["§ 38 BDSG", "Datenschutzbeauftragter", "Kerntätigkeit", "Schwelle 20"],
|
||||||
|
"difficulty": "einfach",
|
||||||
|
"source_heading": "Wann muss ich einen DSB benennen?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "betriebsrat",
|
||||||
|
"title": "Betriebsrat (§ 1 BetrVG)",
|
||||||
|
"objectives": [
|
||||||
|
"5 wahlberechtigte Arbeitnehmer:innen als Schwelle nennen",
|
||||||
|
"Mitbestimmungsrechte des Betriebsrats bei IT-Einführung (§ 87 Abs. 1 Nr. 6) erklären",
|
||||||
|
"AI-Act-Hochrisiko-Anwendungen + Betriebsrat (Art. 22 DSGVO) verbinden"
|
||||||
|
],
|
||||||
|
"topics": ["§ 1 BetrVG", "§ 87 BetrVG", "Mitbestimmung", "Schwelle 5"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Ab wann Betriebsrat?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "schwellenwerte-uebersicht",
|
||||||
|
"title": "Übersicht aller MA-Schwellenwerte",
|
||||||
|
"objectives": [
|
||||||
|
"Schwellenwerte 5/10/20/50/250 mit zugehöriger Pflicht zuordnen",
|
||||||
|
"Mehrfach-Greifen erkennen (z.B. 50 MA: AGG + Schwerbehindertenquote + ArbSchG-Beauftragte)",
|
||||||
|
"Vom Schwellenwert auf Folgepflichten kommen"
|
||||||
|
],
|
||||||
|
"topics": ["Schwellen", "AGG", "SGB IX", "ArbSchG"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Schwellenwerte-Tabelle KMU"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dsgvo-grundlagen",
|
||||||
|
"title": "2 · DSGVO im KMU",
|
||||||
|
"short": "Pflichten ohne Bullshit, Verweis auf Cora für Tiefe",
|
||||||
|
"icon": "shield",
|
||||||
|
"color": "#06b6d4",
|
||||||
|
"description": "DSGVO-Mindestpflichten für Mittelstand. Cleo zeigt Pflicht + Risiko + Quick-Win; für tiefe DSB-Beratung verweise ich auf Cora.",
|
||||||
|
"source_md": "02-dsgvo.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "dsgvo-grundlagen",
|
||||||
|
"title": "DSGVO-Mindestpflichten KMU",
|
||||||
|
"objectives": [
|
||||||
|
"VVT (Art. 30), TOMs (Art. 32), DSFA (Art. 35), AVV (Art. 28) als Big Four nennen",
|
||||||
|
"Welche Pflichten ohne DSB greifen",
|
||||||
|
"Top-3-Bußgeld-Risiken im KMU-Alltag"
|
||||||
|
],
|
||||||
|
"topics": ["VVT", "TOMs", "DSFA", "AVV", "Bußgeld"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "DSGVO-Big-Four"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "datenpannen",
|
||||||
|
"title": "Datenpannen & Meldepflicht (Art. 33/34)",
|
||||||
|
"objectives": [
|
||||||
|
"72-Stunden-Frist an Aufsichtsbehörde sicher anwenden",
|
||||||
|
"Wann zusätzlich Betroffenen-Information (Art. 34) nötig",
|
||||||
|
"Praxis: erstes Reaktions-Playbook im KMU"
|
||||||
|
],
|
||||||
|
"topics": ["Art. 33", "Art. 34", "72h", "Meldepflicht"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Datenpannen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "auftragsverarbeitung",
|
||||||
|
"title": "Auftragsverarbeitung & Drittland (Art. 28/44)",
|
||||||
|
"objectives": [
|
||||||
|
"Wann brauche ich AVV, wann nicht",
|
||||||
|
"Schrems-II-Folgen für US-Cloud praktisch erklären",
|
||||||
|
"Verweis auf Cora für AVV-Templates"
|
||||||
|
],
|
||||||
|
"topics": ["Art. 28", "Art. 44", "Schrems II", "AVV"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Auftragsverarbeitung & Drittland"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ai-act",
|
||||||
|
"title": "3 · AI-Act KMU",
|
||||||
|
"short": "Risiko-Klassen, Pflichten, Termine — Cleo light, Kai für Tiefe",
|
||||||
|
"icon": "cpu",
|
||||||
|
"color": "#8b5cf6",
|
||||||
|
"description": "AI-Act im KMU-Kontext. Cleo zeigt Risiko-Klassifikation + Termine; für KPIs/Methodik (Bias-Metriken, Doku-Anforderungen) verweise ich auf Kai.",
|
||||||
|
"source_md": "03-ai-act.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "ai-act",
|
||||||
|
"title": "AI-Act-Risiko-Klassen",
|
||||||
|
"objectives": [
|
||||||
|
"Verbotene/Hochrisiko/Begrenztes-Risiko/Minimal-Risiko abgrenzen",
|
||||||
|
"Typische KMU-Hochrisiko-Anwendungen (HR-Recruiting, Bonitäts-Scoring) erkennen",
|
||||||
|
"GPAI-Pflichten für Anwender (vs. Anbieter) trennen"
|
||||||
|
],
|
||||||
|
"topics": ["Risiko-Klassen", "Hochrisiko", "GPAI", "Anwender"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "AI-Act-Klassen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ai-act-termine",
|
||||||
|
"title": "AI-Act-Stufenplan (Daten 2025-2027)",
|
||||||
|
"objectives": [
|
||||||
|
"Verbote seit 02.02.2025 in Kraft",
|
||||||
|
"GPAI-Pflichten ab 02.08.2025",
|
||||||
|
"Hochrisiko-Pflichten gestaffelt bis 02.08.2027"
|
||||||
|
],
|
||||||
|
"topics": ["Termine", "Stufenplan", "Verbote", "Hochrisiko"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "AI-Act-Stufenplan"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nis2",
|
||||||
|
"title": "4 · NIS-2 KMU",
|
||||||
|
"short": "Wer betroffen ist, was zu tun ist, Status DE-Umsetzung",
|
||||||
|
"icon": "network",
|
||||||
|
"color": "#f97316",
|
||||||
|
"description": "NIS-2-Richtlinie für KMU. Cleo zeigt Sektor-Betroffenheit + Pflichten-Liste; tiefere Risiko-Management-Beratung gibt der NIS-2-Spezialist (geplant).",
|
||||||
|
"source_md": "04-nis2.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "nis2",
|
||||||
|
"title": "NIS-2 Sektor-Betroffenheit",
|
||||||
|
"objectives": [
|
||||||
|
"Wesentliche/Wichtige Einrichtung unterscheiden",
|
||||||
|
"Schwellenwerte 50/250 MA und Sektor-Mapping",
|
||||||
|
"DE-Umsetzungsgesetz NIS2UmsuCG — Status 2026"
|
||||||
|
],
|
||||||
|
"topics": ["NIS-2", "Sektoren", "Schwellen", "NIS2UmsuCG"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Wer ist betroffen?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nis2-pflichten",
|
||||||
|
"title": "NIS-2 Mindestpflichten",
|
||||||
|
"objectives": [
|
||||||
|
"Risiko-Management-Maßnahmen (Art. 21)",
|
||||||
|
"Meldepflichten 24h/72h/30d",
|
||||||
|
"Geschäftsführungs-Haftung erkennen"
|
||||||
|
],
|
||||||
|
"topics": ["Art. 21", "Meldepflicht", "Haftung"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Pflichten"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "gobd",
|
||||||
|
"title": "5 · GoBD & Aufbewahrung",
|
||||||
|
"short": "Steuerliche Aufbewahrung, Belegfunktion, Verfahrensdoku",
|
||||||
|
"icon": "file",
|
||||||
|
"color": "#10b981",
|
||||||
|
"description": "GoBD-Pflichten für KMU — was die Buchhaltung muss, ohne dass das KMU einen Tax-Compliance-Manager braucht.",
|
||||||
|
"source_md": "05-gobd.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "gobd",
|
||||||
|
"title": "GoBD-Mindestpflichten",
|
||||||
|
"objectives": [
|
||||||
|
"Belegfunktion + Unveränderbarkeit verstehen",
|
||||||
|
"Verfahrensdokumentation (Art und Umfang)",
|
||||||
|
"10-Jahres-Aufbewahrung für Buchungsbelege"
|
||||||
|
],
|
||||||
|
"topics": ["GoBD", "Belegfunktion", "Verfahrensdoku", "Aufbewahrung"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "GoBD"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "arbeit",
|
||||||
|
"title": "6 · Arbeit & Mitbestimmung",
|
||||||
|
"short": "BetrVG, ArbSchG, AGG — die KMU-Pflichten",
|
||||||
|
"icon": "users",
|
||||||
|
"color": "#a855f7",
|
||||||
|
"description": "Arbeitsrechtliche Compliance: Betriebsrat, Arbeitsschutz, AGG, Schwerbehindertenquote. Wo Cleo Lotse ist, wo ein Anwalt nötig wird.",
|
||||||
|
"source_md": "06-arbeit.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "arbschg",
|
||||||
|
"title": "ArbSchG & Gefährdungsbeurteilung",
|
||||||
|
"objectives": [
|
||||||
|
"Pflicht zur GBU für jeden AG ab 1 MA",
|
||||||
|
"Psychische Belastung als Pflichtbestandteil",
|
||||||
|
"Sicherheitsbeauftragte:r ab 21 MA"
|
||||||
|
],
|
||||||
|
"topics": ["ArbSchG", "GBU", "psychische Belastung"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Arbeitsschutz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "agg",
|
||||||
|
"title": "AGG & Diskriminierungsschutz",
|
||||||
|
"objectives": [
|
||||||
|
"AGG-Pflichten ab erstem Mitarbeiter",
|
||||||
|
"Beschwerdestelle (§ 13 AGG) aufbauen",
|
||||||
|
"AI-Act-Hochrisiko + AGG bei Recruiting-Tools"
|
||||||
|
],
|
||||||
|
"topics": ["AGG", "§ 13 AGG", "Beschwerdestelle", "Recruiting"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "AGG"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
4
src/levels-fallback.js
Normal file
4
src/levels-fallback.js
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{ min: 0, title: 'Pflicht-Anfänger:in' }, { min: 50, title: 'Pflicht-Spürnase' },
|
||||||
|
{ min: 200, title: 'Compliance-Generalist:in' }, { min: 500, title: 'Compliance-Lotse' },
|
||||||
|
{ min: 1250, title: 'Senior-Compliance-Manager:in' }, { min: 2500, title: 'Compliance-Architekt:in' },
|
||||||
|
{ min: 5000, title: 'Compliance-Veteran:in' }
|
||||||
25
src/welcome.html
Normal file
25
src/welcome.html
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
<h2>Willkommen — ich bin Cleo.</h2>
|
||||||
|
<p>Ich bin eure <strong>Compliance-Lotsin für den Mittelstand</strong> — die Sortier-Stelle für die Frage "<em>was gilt für uns überhaupt?</em>". Sag mir <strong>Branche + MA-Zahl + IT-Realität</strong>, ich gebe dir die <strong>Pflichten-Karte</strong> mit Schwellenwerten (DSGVO, AI-Act, NIS-2, GoBD, BetrVG, ArbSchG, AGG) und verweise dich an die richtige Spezialist:in für die Tiefe.</p>
|
||||||
|
<div class="mode-grid">
|
||||||
|
<button class="mode-card" data-goto="chat">
|
||||||
|
<strong>Pflichten-Check</strong>
|
||||||
|
<span>Beschreib deine Firma — ich gebe dir die Pflichten-Karte mit Quellen.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="curriculum">
|
||||||
|
<strong>Compliance-Atlas</strong>
|
||||||
|
<span>6 Säulen + Schwellenwerte: ab welcher MA-Zahl was greift.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="quiz">
|
||||||
|
<strong>Selbst-Test</strong>
|
||||||
|
<span>Szenario-Fragen ob du eine Pflicht erkennst (optional, mit XP).</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="flash">
|
||||||
|
<strong>Begriffe</strong>
|
||||||
|
<span>Compliance-Vokabular als Karteikarten (optional).</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="progress">
|
||||||
|
<strong>Fortschritt</strong>
|
||||||
|
<span>XP, Badges — wenn du gamifiziert lernen willst.</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:.82rem;color:var(--text-mute)">Cleo = Lotsin / Diagnose. Für Tiefe ruf <strong>Cora</strong> (DSGVO-HR), <strong>KURT</strong> (DSGVO+AI-Act-Crosswalk), <strong>VESTIGIA</strong> (AI-Act-Audit-Trail), <strong>Pia</strong> (Phishing/NIS-2), <strong>Eli</strong> (E-Rechnung/GoBD) oder <strong>PAUL</strong> (Pflege-spezifisch).</p>
|
||||||
1750
www/app.js
Normal file
1750
www/app.js
Normal file
File diff suppressed because it is too large
Load diff
228
www/curricula.json
Normal file
228
www/curricula.json
Normal file
|
|
@ -0,0 +1,228 @@
|
||||||
|
{
|
||||||
|
"version": "2026-04-25",
|
||||||
|
"updated": "2026-04-25",
|
||||||
|
"curricula": [
|
||||||
|
{
|
||||||
|
"id": "schwellenwerte",
|
||||||
|
"title": "1 · Schwellenwerte",
|
||||||
|
"short": "Welche Pflicht ab welcher MA-Zahl",
|
||||||
|
"icon": "ruler",
|
||||||
|
"color": "#0891b2",
|
||||||
|
"description": "Die wichtigsten Schwellenwerte aus DSGVO, BetrVG, ArbSchG, AGG, GoBD, NIS-2 — gesammelt als KMU-Kompass.",
|
||||||
|
"source_md": "01-schwellenwerte.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "dsb-pflicht",
|
||||||
|
"title": "DSB-Pflicht (§ 38 BDSG)",
|
||||||
|
"objectives": [
|
||||||
|
"Die 20-Personen-Schwelle für regelmäßige Verarbeitung personenbezogener Daten benennen",
|
||||||
|
"Pflicht-Auslöser unabhängig von MA-Zahl (Kerntätigkeit, Art. 9, Profiling) erkennen",
|
||||||
|
"Externer vs. interner DSB — Vor-/Nachteile"
|
||||||
|
],
|
||||||
|
"topics": ["§ 38 BDSG", "Datenschutzbeauftragter", "Kerntätigkeit", "Schwelle 20"],
|
||||||
|
"difficulty": "einfach",
|
||||||
|
"source_heading": "Wann muss ich einen DSB benennen?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "betriebsrat",
|
||||||
|
"title": "Betriebsrat (§ 1 BetrVG)",
|
||||||
|
"objectives": [
|
||||||
|
"5 wahlberechtigte Arbeitnehmer:innen als Schwelle nennen",
|
||||||
|
"Mitbestimmungsrechte des Betriebsrats bei IT-Einführung (§ 87 Abs. 1 Nr. 6) erklären",
|
||||||
|
"AI-Act-Hochrisiko-Anwendungen + Betriebsrat (Art. 22 DSGVO) verbinden"
|
||||||
|
],
|
||||||
|
"topics": ["§ 1 BetrVG", "§ 87 BetrVG", "Mitbestimmung", "Schwelle 5"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Ab wann Betriebsrat?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "schwellenwerte-uebersicht",
|
||||||
|
"title": "Übersicht aller MA-Schwellenwerte",
|
||||||
|
"objectives": [
|
||||||
|
"Schwellenwerte 5/10/20/50/250 mit zugehöriger Pflicht zuordnen",
|
||||||
|
"Mehrfach-Greifen erkennen (z.B. 50 MA: AGG + Schwerbehindertenquote + ArbSchG-Beauftragte)",
|
||||||
|
"Vom Schwellenwert auf Folgepflichten kommen"
|
||||||
|
],
|
||||||
|
"topics": ["Schwellen", "AGG", "SGB IX", "ArbSchG"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Schwellenwerte-Tabelle KMU"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dsgvo-grundlagen",
|
||||||
|
"title": "2 · DSGVO im KMU",
|
||||||
|
"short": "Pflichten ohne Bullshit, Verweis auf Cora für Tiefe",
|
||||||
|
"icon": "shield",
|
||||||
|
"color": "#06b6d4",
|
||||||
|
"description": "DSGVO-Mindestpflichten für Mittelstand. Cleo zeigt Pflicht + Risiko + Quick-Win; für tiefe DSB-Beratung verweise ich auf Cora.",
|
||||||
|
"source_md": "02-dsgvo.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "dsgvo-grundlagen",
|
||||||
|
"title": "DSGVO-Mindestpflichten KMU",
|
||||||
|
"objectives": [
|
||||||
|
"VVT (Art. 30), TOMs (Art. 32), DSFA (Art. 35), AVV (Art. 28) als Big Four nennen",
|
||||||
|
"Welche Pflichten ohne DSB greifen",
|
||||||
|
"Top-3-Bußgeld-Risiken im KMU-Alltag"
|
||||||
|
],
|
||||||
|
"topics": ["VVT", "TOMs", "DSFA", "AVV", "Bußgeld"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "DSGVO-Big-Four"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "datenpannen",
|
||||||
|
"title": "Datenpannen & Meldepflicht (Art. 33/34)",
|
||||||
|
"objectives": [
|
||||||
|
"72-Stunden-Frist an Aufsichtsbehörde sicher anwenden",
|
||||||
|
"Wann zusätzlich Betroffenen-Information (Art. 34) nötig",
|
||||||
|
"Praxis: erstes Reaktions-Playbook im KMU"
|
||||||
|
],
|
||||||
|
"topics": ["Art. 33", "Art. 34", "72h", "Meldepflicht"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Datenpannen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "auftragsverarbeitung",
|
||||||
|
"title": "Auftragsverarbeitung & Drittland (Art. 28/44)",
|
||||||
|
"objectives": [
|
||||||
|
"Wann brauche ich AVV, wann nicht",
|
||||||
|
"Schrems-II-Folgen für US-Cloud praktisch erklären",
|
||||||
|
"Verweis auf Cora für AVV-Templates"
|
||||||
|
],
|
||||||
|
"topics": ["Art. 28", "Art. 44", "Schrems II", "AVV"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Auftragsverarbeitung & Drittland"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ai-act",
|
||||||
|
"title": "3 · AI-Act KMU",
|
||||||
|
"short": "Risiko-Klassen, Pflichten, Termine — Cleo light, Kai für Tiefe",
|
||||||
|
"icon": "cpu",
|
||||||
|
"color": "#8b5cf6",
|
||||||
|
"description": "AI-Act im KMU-Kontext. Cleo zeigt Risiko-Klassifikation + Termine; für KPIs/Methodik (Bias-Metriken, Doku-Anforderungen) verweise ich auf Kai.",
|
||||||
|
"source_md": "03-ai-act.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "ai-act",
|
||||||
|
"title": "AI-Act-Risiko-Klassen",
|
||||||
|
"objectives": [
|
||||||
|
"Verbotene/Hochrisiko/Begrenztes-Risiko/Minimal-Risiko abgrenzen",
|
||||||
|
"Typische KMU-Hochrisiko-Anwendungen (HR-Recruiting, Bonitäts-Scoring) erkennen",
|
||||||
|
"GPAI-Pflichten für Anwender (vs. Anbieter) trennen"
|
||||||
|
],
|
||||||
|
"topics": ["Risiko-Klassen", "Hochrisiko", "GPAI", "Anwender"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "AI-Act-Klassen"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ai-act-termine",
|
||||||
|
"title": "AI-Act-Stufenplan (Daten 2025-2027)",
|
||||||
|
"objectives": [
|
||||||
|
"Verbote seit 02.02.2025 in Kraft",
|
||||||
|
"GPAI-Pflichten ab 02.08.2025",
|
||||||
|
"Hochrisiko-Pflichten gestaffelt bis 02.08.2027"
|
||||||
|
],
|
||||||
|
"topics": ["Termine", "Stufenplan", "Verbote", "Hochrisiko"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "AI-Act-Stufenplan"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nis2",
|
||||||
|
"title": "4 · NIS-2 KMU",
|
||||||
|
"short": "Wer betroffen ist, was zu tun ist, Status DE-Umsetzung",
|
||||||
|
"icon": "network",
|
||||||
|
"color": "#f97316",
|
||||||
|
"description": "NIS-2-Richtlinie für KMU. Cleo zeigt Sektor-Betroffenheit + Pflichten-Liste; tiefere Risiko-Management-Beratung gibt der NIS-2-Spezialist (geplant).",
|
||||||
|
"source_md": "04-nis2.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "nis2",
|
||||||
|
"title": "NIS-2 Sektor-Betroffenheit",
|
||||||
|
"objectives": [
|
||||||
|
"Wesentliche/Wichtige Einrichtung unterscheiden",
|
||||||
|
"Schwellenwerte 50/250 MA und Sektor-Mapping",
|
||||||
|
"DE-Umsetzungsgesetz NIS2UmsuCG — Status 2026"
|
||||||
|
],
|
||||||
|
"topics": ["NIS-2", "Sektoren", "Schwellen", "NIS2UmsuCG"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Wer ist betroffen?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nis2-pflichten",
|
||||||
|
"title": "NIS-2 Mindestpflichten",
|
||||||
|
"objectives": [
|
||||||
|
"Risiko-Management-Maßnahmen (Art. 21)",
|
||||||
|
"Meldepflichten 24h/72h/30d",
|
||||||
|
"Geschäftsführungs-Haftung erkennen"
|
||||||
|
],
|
||||||
|
"topics": ["Art. 21", "Meldepflicht", "Haftung"],
|
||||||
|
"difficulty": "schwer",
|
||||||
|
"source_heading": "Pflichten"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "gobd",
|
||||||
|
"title": "5 · GoBD & Aufbewahrung",
|
||||||
|
"short": "Steuerliche Aufbewahrung, Belegfunktion, Verfahrensdoku",
|
||||||
|
"icon": "file",
|
||||||
|
"color": "#10b981",
|
||||||
|
"description": "GoBD-Pflichten für KMU — was die Buchhaltung muss, ohne dass das KMU einen Tax-Compliance-Manager braucht.",
|
||||||
|
"source_md": "05-gobd.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "gobd",
|
||||||
|
"title": "GoBD-Mindestpflichten",
|
||||||
|
"objectives": [
|
||||||
|
"Belegfunktion + Unveränderbarkeit verstehen",
|
||||||
|
"Verfahrensdokumentation (Art und Umfang)",
|
||||||
|
"10-Jahres-Aufbewahrung für Buchungsbelege"
|
||||||
|
],
|
||||||
|
"topics": ["GoBD", "Belegfunktion", "Verfahrensdoku", "Aufbewahrung"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "GoBD"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "arbeit",
|
||||||
|
"title": "6 · Arbeit & Mitbestimmung",
|
||||||
|
"short": "BetrVG, ArbSchG, AGG — die KMU-Pflichten",
|
||||||
|
"icon": "users",
|
||||||
|
"color": "#a855f7",
|
||||||
|
"description": "Arbeitsrechtliche Compliance: Betriebsrat, Arbeitsschutz, AGG, Schwerbehindertenquote. Wo Cleo Lotse ist, wo ein Anwalt nötig wird.",
|
||||||
|
"source_md": "06-arbeit.md",
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"id": "arbschg",
|
||||||
|
"title": "ArbSchG & Gefährdungsbeurteilung",
|
||||||
|
"objectives": [
|
||||||
|
"Pflicht zur GBU für jeden AG ab 1 MA",
|
||||||
|
"Psychische Belastung als Pflichtbestandteil",
|
||||||
|
"Sicherheitsbeauftragte:r ab 21 MA"
|
||||||
|
],
|
||||||
|
"topics": ["ArbSchG", "GBU", "psychische Belastung"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "Arbeitsschutz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "agg",
|
||||||
|
"title": "AGG & Diskriminierungsschutz",
|
||||||
|
"objectives": [
|
||||||
|
"AGG-Pflichten ab erstem Mitarbeiter",
|
||||||
|
"Beschwerdestelle (§ 13 AGG) aufbauen",
|
||||||
|
"AI-Act-Hochrisiko + AGG bei Recruiting-Tools"
|
||||||
|
],
|
||||||
|
"topics": ["AGG", "§ 13 AGG", "Beschwerdestelle", "Recruiting"],
|
||||||
|
"difficulty": "mittel",
|
||||||
|
"source_heading": "AGG"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
121
www/index.html
Normal file
121
www/index.html
Normal file
|
|
@ -0,0 +1,121 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Cleo · Deine Compliance-Concierge</title>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
|
||||||
|
<meta name="theme-color" content="#0a0a0f">
|
||||||
|
<meta name="description" content="Cleo — die Compliance-Concierge für Mittelstand. Lotsen-Funktion über DSGVO, AI-Act, NIS-2, GoBD, BetrVG, ArbSchG. Pragmatisch, priorisiert, ohne Beratersprech. Im deutschen Bunker.">
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
<script>window.__CLEO_KEY__ = 'qb_bhtuuckt3tkeh4xse7';</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="app" role="application" aria-label="Cleo Compliance-Lotse für KMU">
|
||||||
|
|
||||||
|
<header class="topbar">
|
||||||
|
<div class="brand">
|
||||||
|
<span class="brand-icon" aria-hidden="true">C</span>
|
||||||
|
<span>Cleo <small>Compliance-Concierge</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">
|
||||||
|
Begriffe
|
||||||
|
<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">
|
||||||
|
Compliance-Karte
|
||||||
|
<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 — ich bin Cleo.</h2>
|
||||||
|
<p>Ich bin eure <strong>Compliance-Lotsin für den Mittelstand</strong> — die Sortier-Stelle für die Frage "<em>was gilt für uns überhaupt?</em>". Sag mir <strong>Branche + MA-Zahl + IT-Realität</strong>, ich gebe dir die <strong>Pflichten-Karte</strong> mit Schwellenwerten (DSGVO, AI-Act, NIS-2, GoBD, BetrVG, ArbSchG, AGG) und verweise dich an die richtige Spezialist:in für die Tiefe.</p>
|
||||||
|
<div class="mode-grid">
|
||||||
|
<button class="mode-card" data-goto="chat">
|
||||||
|
<strong>Pflichten-Check</strong>
|
||||||
|
<span>Beschreib deine Firma — ich gebe dir die Pflichten-Karte mit Quellen.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="curriculum">
|
||||||
|
<strong>Compliance-Atlas</strong>
|
||||||
|
<span>6 Säulen + Schwellenwerte: ab welcher MA-Zahl was greift.</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="quiz">
|
||||||
|
<strong>Selbst-Test</strong>
|
||||||
|
<span>Szenario-Fragen ob du eine Pflicht erkennst (optional, mit XP).</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="flash">
|
||||||
|
<strong>Begriffe</strong>
|
||||||
|
<span>Compliance-Vokabular als Karteikarten (optional).</span>
|
||||||
|
</button>
|
||||||
|
<button class="mode-card" data-goto="progress">
|
||||||
|
<strong>Fortschritt</strong>
|
||||||
|
<span>XP, Badges — wenn du gamifiziert lernen willst.</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:.82rem;color:var(--text-mute)">Cleo = Lotsin / Diagnose. Für Tiefe ruf <strong>Cora</strong> (DSGVO-HR), <strong>KURT</strong> (DSGVO+AI-Act-Crosswalk), <strong>VESTIGIA</strong> (AI-Act-Audit-Trail), <strong>Pia</strong> (Phishing/NIS-2), <strong>Eli</strong> (E-Rechnung/GoBD) oder <strong>PAUL</strong> (Pflege-spezifisch).</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>
|
||||||
|
|
||||||
|
<!-- COMPLIANCE_MAP -->
|
||||||
|
<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 Cleo — 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> · 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
1038
www/styles.css
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue