- LICENSE.md: Dual license explanation (MIT + CKL) - LICENSE-MIT.md: Full MIT text with plain language explanation - LICENSE-CKL.md: Full Children's Knowledge License v0.1-draft - OZM-NEXUS-ECOSYSTEM.md: Complete ecosystem architecture and governance - KINDERRECHTE.md: Children's rights operationalization (export/deletion processes) - README.md: Project overview with CKL badge and comprehensive documentation links - CLAUDE.md: Project instructions for Claude Code This establishes Crumbforest as part of the OZM⟡NEXUS ecosystem with: - Dual licensing strategy (developer freedom + child protection) - 8 axioms operationalized through CKL - Clear governance path (OZM as custodian) - DSGVO-compliant children's rights processes - Roadmap through Q4 2025 "Wissen gehört dem Kind, solange es fragt." 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
472 lines
14 KiB
Markdown
472 lines
14 KiB
Markdown
# Deine Rechte bei Crumbforest 🌲
|
||
|
||
> **Für Kinder:** Das hier gehört **DIR**. Wir passen darauf auf.
|
||
> **Für Eltern:** Dieses Dokument operationalisiert CKL §3 (Rechte der Kinder) und ist DSGVO-konform.
|
||
|
||
---
|
||
|
||
## 📦 Was gehört dir?
|
||
|
||
Alles, was **du** erschaffst, gehört **dir** – nicht uns, nicht der Schule, nicht dem Internet.
|
||
|
||
### Das sind deine Sachen:
|
||
|
||
- ✍️ **Texte**: Alle Fragen, die du stellst. Alle Geschichten, die du schreibst.
|
||
- 💻 **Code**: Alle Programme, die du baust (Python, Bash, Blockly...)
|
||
- 🎨 **Bilder**: Alle Zeichnungen und Screenshots
|
||
- 📊 **Messungen**: Alle Daten, die du sammelst (Temperatur, Bewegung, Sensoren...)
|
||
- 💬 **Chats**: Alle Gespräche mit den Charakteren (Krümeleule, FunkFox...)
|
||
- 🏗️ **Projekte**: Alles, was du mit Raspberry Pi, ESP32 oder anderen Tools baust
|
||
|
||
**Wichtig:** Auch wenn du das auf einem Computer von Crumbforest machst – **du** bist der Besitzer oder die Besitzerin!
|
||
|
||
Das steht so im Gesetz (CKL §3.1 + DSGVO Art. 20).
|
||
|
||
---
|
||
|
||
## 💾 Wie bekomme ich meine Daten?
|
||
|
||
Du kannst **jederzeit** eine Kopie von allem verlangen, was du gemacht hast.
|
||
|
||
### So geht's:
|
||
|
||
#### **Wenn du mit CrumbCore arbeitest:**
|
||
|
||
**Aktuell (Stand 2025-12):**
|
||
- Sprich mit deinem Lehrer oder deiner Lehrerin
|
||
- Oder schreibe eine Email an: [Kontakt wird ergänzt]
|
||
- Wir schicken dir dann alles als Datei
|
||
|
||
**Bald (geplant Q1 2025):**
|
||
Du kannst selbst auf einen Knopf drücken:
|
||
1. Gehe zu deinem Profil
|
||
2. Klicke auf "Meine Daten herunterladen"
|
||
3. Du bekommst eine ZIP-Datei mit allem
|
||
|
||
Die Datei enthält:
|
||
```
|
||
meine-crumbforest-daten.zip
|
||
├── chats.json (alle Gespräche)
|
||
├── projekte/ (deine Projekte)
|
||
│ ├── esp32-blink/
|
||
│ └── pi-server/
|
||
├── messungen.csv (Sensor-Daten)
|
||
└── README.txt (Erklärung, was was ist)
|
||
```
|
||
|
||
**Alles in offenen Formaten** (JSON, CSV, TXT, PNG) – du kannst es mit jedem Programm öffnen!
|
||
|
||
#### **Wenn du mit Crumbpages lernst:**
|
||
- Alle Markdown-Dateien sind sowieso frei zugänglich
|
||
- Du kannst sie einfach kopieren: Rechtsklick → Kopieren
|
||
- Oder das ganze Repo herunterladen (siehe QUICKSTART.md)
|
||
|
||
---
|
||
|
||
## 🗑️ Wie lösche ich meine Daten?
|
||
|
||
Manchmal möchte man nicht, dass alte Sachen gespeichert bleiben. **Das ist okay!**
|
||
|
||
Du kannst sagen: "Ich will, dass ihr alles von mir löscht."
|
||
|
||
### So geht's:
|
||
|
||
#### **Option 1: Alles löschen**
|
||
- Sprich mit deinem Lehrer/deiner Lehrerin
|
||
- Oder schreibe eine Email mit deinen Eltern an: [Kontakt wird ergänzt]
|
||
- Schreibe rein: "Bitte löscht alle meine Daten."
|
||
|
||
**Was wir dann tun:**
|
||
1. Wir löschen alle deine Chats aus der Datenbank
|
||
2. Wir löschen deine Projekte vom Server
|
||
3. Wir löschen deinen Account
|
||
4. **Wichtig:** Vorher fragen wir: "Willst du vorher eine Kopie?"
|
||
|
||
**Das dauert maximal 7 Tage.**
|
||
|
||
#### **Option 2: Nur bestimmte Sachen löschen**
|
||
Du kannst auch sagen: "Löscht nur dieses Projekt" oder "Löscht nur diese Chat-Nachricht".
|
||
|
||
Das geht genauso – sag uns einfach, was weg soll.
|
||
|
||
#### **Bald (geplant Q1 2025):**
|
||
Du kannst selbst löschen:
|
||
1. Gehe zu deinem Profil
|
||
2. Klicke auf "Meine Daten verwalten"
|
||
3. Wähle aus, was du löschen willst
|
||
4. Bestätige: "Ja, wirklich löschen"
|
||
|
||
---
|
||
|
||
## 🔍 Was wird überhaupt gespeichert?
|
||
|
||
**Wir speichern nur, was zum Lernen wichtig ist. Nicht mehr!**
|
||
|
||
### Das speichern wir:
|
||
|
||
| Was? | Warum? | Wo? | Wie lange? |
|
||
|------|--------|-----|------------|
|
||
| Dein Benutzername | Damit wir wissen, wer du bist | CrumbCore Datenbank | Bis du kündigst |
|
||
| Deine Chat-Nachrichten | Damit die Charaktere sich erinnern | CrumbCore Datenbank | Bis du löschst |
|
||
| Deine Projekte (Code, Bilder...) | Damit du später weiter machen kannst | CrumbCore Dateisystem | Bis du löschst |
|
||
| Sensor-Messungen | Damit du deine Experimente auswerten kannst | CrumbCore Datenbank | Bis du löschst |
|
||
| Wann du dich einloggst | Damit wir wissen, ob du noch aktiv bist | CrumbCore Logfiles | 90 Tage |
|
||
|
||
### Das speichern wir **NICHT**:
|
||
|
||
- ❌ Keine Passwörter (nur verschlüsselte Hashes)
|
||
- ❌ Keine IP-Adressen (außer temporär für Sicherheit)
|
||
- ❌ Keine Tracking-Cookies
|
||
- ❌ Keine "Werbe-ID" oder ähnliches
|
||
- ❌ Keine Bilder von dir (außer du lädst sie hoch für ein Projekt)
|
||
- ❌ Keine Sprachaufnahmen
|
||
- ❌ Keine Bewegungsprofile
|
||
|
||
**Crumbforest hat kein Google Analytics, kein Facebook Pixel, keine Spionage-Tools.**
|
||
|
||
### Wer kann meine Daten sehen?
|
||
|
||
1. **Du selbst** (immer)
|
||
2. **Dein Lehrer/deine Lehrerin** (wenn du in einem Kurs bist)
|
||
3. **Die Admins von Crumbforest** (nur für technischen Support)
|
||
4. **Niemand sonst!**
|
||
|
||
Wir verkaufen deine Daten **NIEMALS**. Nie, nie, nie.
|
||
|
||
Das ist gesetzlich verboten (DSGVO) **und** gegen die CKL.
|
||
|
||
---
|
||
|
||
## 🚪 Was passiert, wenn ich gehe?
|
||
|
||
Du kannst **jederzeit** aufhören, bei Crumbforest zu lernen.
|
||
|
||
### Wenn du gehst:
|
||
|
||
**Du kannst wählen:**
|
||
|
||
**Option A: Mitnehmen**
|
||
- Wir geben dir alles als Download
|
||
- Du kannst woanders weiter machen
|
||
- Wir löschen deine Daten nach 30 Tagen
|
||
|
||
**Option B: Löschen**
|
||
- Wir löschen sofort alles
|
||
- Nichts bleibt übrig
|
||
- Du kannst nicht mehr zurück
|
||
|
||
**Option C: Archivieren**
|
||
- Wir behalten deine Sachen für dich (max. 1 Jahr)
|
||
- Du kannst später wieder kommen
|
||
- Nach 1 Jahr fragen wir nochmal: "Willst du es noch?"
|
||
|
||
**Ohne Nachteile:** Du musst nichts zahlen, du bekommst keinen Ärger, alles ist gut.
|
||
|
||
Das ist dein Recht (CKL §10.2 + DSGVO Art. 17).
|
||
|
||
---
|
||
|
||
## 🛡️ Wie sicher sind meine Daten?
|
||
|
||
Wir nehmen Sicherheit **sehr ernst**.
|
||
|
||
### Was wir tun:
|
||
|
||
- 🔒 **Verschlüsselung**: Passwörter sind verschlüsselt (niemand kann sie lesen)
|
||
- 🖥️ **Lokaler Server**: Deine Daten sind nicht in der "Cloud" (kein Google, kein Amazon)
|
||
- 🔐 **Zugriffskontrolle**: Nur du und dein Lehrer können deine Projekte sehen
|
||
- 📝 **Logs**: Wir schreiben auf, wer was macht (gegen Hacker)
|
||
- 🔄 **Backups**: Wir machen Sicherheitskopien (falls Computer kaputt geht)
|
||
- 🗑️ **Löschung**: Wenn wir löschen, ist es **wirklich** gelöscht (nicht nur versteckt)
|
||
|
||
### Was du tun solltest:
|
||
|
||
- ✅ Wähle ein gutes Passwort (nicht "1234")
|
||
- ✅ Verrate dein Passwort niemandem (auch nicht Freunden)
|
||
- ✅ Melde dich ab, wenn du fertig bist
|
||
- ✅ Sag Bescheid, wenn etwas komisch ist
|
||
|
||
---
|
||
|
||
## ❓ Ich habe eine Frage / Es gibt ein Problem
|
||
|
||
### Für Kinder:
|
||
|
||
**Sprich zuerst mit deinem Lehrer oder deiner Lehrerin.**
|
||
|
||
Wenn das nicht hilft, oder wenn du denkst "Das ist nicht okay", dann:
|
||
|
||
- Sprich mit deinen Eltern
|
||
- Oder schreibe uns: [Kontakt wird ergänzt]
|
||
|
||
### Für Eltern/Sorgeberechtigte:
|
||
|
||
Sie haben jederzeit das Recht:
|
||
- Auskunft über gespeicherte Daten zu verlangen (DSGVO Art. 15)
|
||
- Daten korrigieren zu lassen (DSGVO Art. 16)
|
||
- Daten löschen zu lassen (DSGVO Art. 17)
|
||
- Der Verarbeitung zu widersprechen (DSGVO Art. 21)
|
||
- Beschwerde bei der Aufsichtsbehörde einzulegen
|
||
|
||
**Kontakt:**
|
||
- Email: [wird ergänzt]
|
||
- Verantwortlicher: Branko (Lead Maintainer)
|
||
- Datenschutzbeauftragter: [wird ergänzt, wenn benötigt]
|
||
|
||
**Aufsichtsbehörde:**
|
||
Je nach Bundesland – siehe: https://www.bfdi.bund.de/DE/Service/Anschriften/Laender/Laender-node.html
|
||
|
||
---
|
||
|
||
## 📋 Zusammenfassung (für Eltern & Lehrer)
|
||
|
||
| Recht | Gesetzliche Grundlage | Wie umgesetzt? |
|
||
|-------|----------------------|----------------|
|
||
| Eigentum an Inhalten | CKL §3.1 | Kinder behalten Urheberrechte |
|
||
| Datenportabilität | DSGVO Art. 20, CKL §3.2 | Export-Funktion (geplant Q1 2025) |
|
||
| Löschung | DSGVO Art. 17, CKL §3.3 | Löschprozess dokumentiert |
|
||
| Auskunft | DSGVO Art. 15 | Auf Anfrage, bald self-service |
|
||
| Widerspruch | DSGVO Art. 21 | Jederzeit ohne Nachteile |
|
||
| Datenminimierung | DSGVO Art. 5, CKL §5.1 | Nur lernrelevante Daten |
|
||
| Transparenz | DSGVO Art. 12-14, CKL §5.3 | Dieses Dokument + DATENSCHUTZ.md |
|
||
| Keine Paywalls | CKL §7.3 | Lernkerne kostenlos |
|
||
|
||
---
|
||
|
||
## 🔧 Technische Umsetzung (für Entwickler)
|
||
|
||
### TODOs für vollständige Compliance:
|
||
|
||
#### 1. Export-API implementieren
|
||
|
||
**Status:** ⏳ Geplant Q1 2025
|
||
|
||
**Endpoint:** `GET /api/v1/my-data`
|
||
|
||
**Authentication:** Bearer Token (User muss eingeloggt sein)
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"user": {
|
||
"username": "kruemel123",
|
||
"created_at": "2024-09-15T10:30:00Z",
|
||
"last_login": "2025-12-13T14:22:00Z"
|
||
},
|
||
"messages": [
|
||
{
|
||
"id": 1,
|
||
"character": "Krümeleule",
|
||
"timestamp": "2025-12-13T14:00:00Z",
|
||
"user_message": "Wie funktioniert Bash?",
|
||
"character_response": "Bash ist eine Shell..."
|
||
}
|
||
],
|
||
"projects": [
|
||
{
|
||
"id": 1,
|
||
"name": "ESP32 Blink",
|
||
"created_at": "2025-11-01T09:00:00Z",
|
||
"files": [
|
||
{"filename": "main.py", "content": "...base64..."}
|
||
]
|
||
}
|
||
],
|
||
"measurements": [...],
|
||
"export_date": "2025-12-13T15:00:00Z",
|
||
"format_version": "1.0"
|
||
}
|
||
```
|
||
|
||
**Optional:** Auch als ZIP-Download verfügbar machen:
|
||
```python
|
||
# app/routers/data_export.py
|
||
from fastapi import APIRouter, Depends
|
||
from fastapi.responses import StreamingResponse
|
||
import zipfile
|
||
import io
|
||
|
||
@router.get("/my-data.zip")
|
||
async def export_data_zip(user = Depends(get_current_user)):
|
||
# Erstelle ZIP in Memory
|
||
zip_buffer = io.BytesIO()
|
||
with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file:
|
||
# Füge alle User-Daten hinzu
|
||
zip_file.writestr("README.txt", "Deine Crumbforest Daten...")
|
||
zip_file.writestr("chats.json", json.dumps(user.messages))
|
||
# ... weitere Dateien
|
||
|
||
zip_buffer.seek(0)
|
||
return StreamingResponse(
|
||
zip_buffer,
|
||
media_type="application/zip",
|
||
headers={"Content-Disposition": f"attachment; filename=crumbforest-{user.username}.zip"}
|
||
)
|
||
```
|
||
|
||
#### 2. Lösch-API implementieren
|
||
|
||
**Status:** ⏳ Geplant Q1 2025
|
||
|
||
**Endpoint:** `DELETE /api/v1/my-data`
|
||
|
||
**Authentication:** Bearer Token + zusätzliche Bestätigung (gegen Unfälle)
|
||
|
||
**Request:**
|
||
```json
|
||
{
|
||
"confirm": "DELETE_ALL_MY_DATA",
|
||
"reason": "optional feedback"
|
||
}
|
||
```
|
||
|
||
**Was gelöscht wird:**
|
||
```python
|
||
# app/services/data_deletion.py
|
||
async def delete_user_data(user_id: int):
|
||
# 1. Chats aus MariaDB
|
||
await db.execute("DELETE FROM messages WHERE user_id = ?", user_id)
|
||
|
||
# 2. Vektoren aus Qdrant (wenn User-spezifisch)
|
||
qdrant_client.delete(
|
||
collection_name="crumbforest",
|
||
points_selector=models.FilterSelector(
|
||
filter=models.Filter(
|
||
must=[
|
||
models.FieldCondition(
|
||
key="user_id",
|
||
match=models.MatchValue(value=user_id)
|
||
)
|
||
]
|
||
)
|
||
)
|
||
)
|
||
|
||
# 3. Projekte aus Dateisystem
|
||
shutil.rmtree(f"/data/projects/{user_id}")
|
||
|
||
# 4. Sessions
|
||
await db.execute("DELETE FROM sessions WHERE user_id = ?", user_id)
|
||
|
||
# 5. User-Account
|
||
await db.execute("DELETE FROM users WHERE id = ?", user_id)
|
||
|
||
# 6. Logs bereinigen (DSGVO: Personenbezug entfernen)
|
||
# Logfiles anonymisieren, nicht löschen (Sicherheit)
|
||
await anonymize_logs(user_id)
|
||
```
|
||
|
||
**Response:**
|
||
```json
|
||
{
|
||
"status": "deleted",
|
||
"deleted_at": "2025-12-13T15:30:00Z",
|
||
"items_deleted": {
|
||
"messages": 42,
|
||
"projects": 3,
|
||
"files": 18
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 3. DATENSCHUTZ.md erstellen
|
||
|
||
**Status:** ⏳ TODO (nächster Schritt nach KINDERRECHTE.md)
|
||
|
||
Sollte enthalten:
|
||
- Detaillierte Datenbank-Schema-Dokumentation
|
||
- Welche Tabellen speichern was?
|
||
- Retention Policies
|
||
- Backup-Strategie
|
||
- Incident Response Plan
|
||
|
||
#### 4. Frontend für Self-Service
|
||
|
||
**Status:** ⏳ Geplant Q1 2025
|
||
|
||
Mockup:
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ Mein Profil │
|
||
├─────────────────────────────────────┤
|
||
│ │
|
||
│ 📦 Meine Daten herunterladen │
|
||
│ ├─ Als JSON │
|
||
│ └─ Als ZIP (alles) │
|
||
│ │
|
||
│ 🗑️ Daten löschen │
|
||
│ ├─ Nur Chats löschen │
|
||
│ ├─ Nur Projekt "X" löschen │
|
||
│ └─ ⚠️ ALLES löschen (Account) │
|
||
│ │
|
||
│ 📊 Was ist gespeichert? │
|
||
│ ├─ 42 Chat-Nachrichten │
|
||
│ ├─ 3 Projekte (18 Dateien) │
|
||
│ └─ Letzter Login: heute 14:22 │
|
||
│ │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
#### 5. Automatische Daten-Bereinigung
|
||
|
||
**Status:** ⏳ Geplant Q2 2025
|
||
|
||
Cron-Job für:
|
||
- Alte Sessions löschen (> 90 Tage inaktiv)
|
||
- Anonyme Accounts löschen (> 1 Jahr inaktiv)
|
||
- Logfiles bereinigen (> 90 Tage alt)
|
||
|
||
```python
|
||
# scripts/cleanup_cron.py
|
||
async def cleanup_inactive_users():
|
||
threshold = datetime.now() - timedelta(days=365)
|
||
inactive_users = await db.fetch_all(
|
||
"SELECT id FROM users WHERE last_login < ? AND account_type = 'anonymous'",
|
||
threshold
|
||
)
|
||
for user in inactive_users:
|
||
# Email-Warnung 30 Tage vorher (wenn Email vorhanden)
|
||
# Dann löschen
|
||
await delete_user_data(user.id)
|
||
```
|
||
|
||
---
|
||
|
||
## 📜 Rechtliche Hinweise
|
||
|
||
**Dieses Dokument ist rechtsverbindlich.**
|
||
|
||
Es konkretisiert die Rechte aus:
|
||
- Crumbforest Children's Knowledge License (CKL) v0.1
|
||
- DSGVO (Datenschutz-Grundverordnung)
|
||
- TMG (Telemediengesetz)
|
||
- Kinderrechtskonvention der UN (insb. Art. 16)
|
||
|
||
**Verantwortlicher im Sinne der DSGVO:**
|
||
[Wird ergänzt nach OZM-Transition – aktuell: Branko]
|
||
|
||
**Stand:** 2025-12-13
|
||
**Version:** 1.0-draft
|
||
**Nächstes Review:** Q1 2025 (nach CKL v1.0 Finalisierung)
|
||
|
||
---
|
||
|
||
## 🌲 Schlusswort
|
||
|
||
**Crumbforest ist dein Wald.**
|
||
|
||
Alles, was du hier pflanzt, gehört dir.
|
||
Niemand kann es dir wegnehmen.
|
||
Du kannst es jederzeit mitnehmen.
|
||
|
||
**Und wenn du Fragen hast?**
|
||
Frag einfach. Das ist dein Recht.
|
||
|
||
> *"Wissen gehört dem Kind, solange es fragt."*
|
||
|
||
---
|
||
|
||
**Lizenz:** CC-BY-SA 4.0 (dieses Dokument)
|
||
**Teil von:** Crumbforest Ecosystem (https://crumbforest.com)
|
||
**Siehe auch:** [LICENSE-CKL.md](LICENSE-CKL.md), [OZM-NEXUS-ECOSYSTEM.md](OZM-NEXUS-ECOSYSTEM.md)
|