managarten/manadeck/apps/mobile/Docs/spaced-repetition.md
Till-JS e7f5f942f3 chore: initial commit - consolidate 4 projects into monorepo
Projects included:
- maerchenzauber (NestJS backend + Expo mobile + SvelteKit web + Astro landing)
- manacore (Expo mobile + SvelteKit web + Astro landing)
- manadeck (NestJS backend + Expo mobile + SvelteKit web)
- memoro (Expo mobile + SvelteKit web + Astro landing)

This commit preserves the current state before monorepo restructuring.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-22 23:38:24 +01:00

276 lines
No EOL
7.2 KiB
Markdown

# Spaced Repetition System - Dokumentation
## Überblick
Manadeck implementiert ein wissenschaftlich fundiertes **Spaced Repetition System (SRS)** basierend auf dem **SuperMemo 2 (SM-2) Algorithmus**. Dieses System optimiert den Lernprozess durch intelligente Wiederholungsintervalle, die sich an die individuelle Lernleistung anpassen.
## Was ist Spaced Repetition?
Spaced Repetition ist eine Lernmethode, die auf der **Vergessenskurve** von Hermann Ebbinghaus basiert. Das Prinzip:
- Informationen werden in zunehmend größeren Intervallen wiederholt
- Je besser man sich erinnert, desto länger das nächste Intervall
- Schwierige Karten werden öfter wiederholt als leichte
## Der SM-2 Algorithmus
### Grundprinzipien
Der SM-2 Algorithmus berechnet optimale Wiederholungsintervalle basierend auf:
1. **Qualität der Antwort (Q)**: Bewertung von 0-5
2. **Ease Factor (EF)**: Schwierigkeitsgrad der Karte (min. 1.3)
3. **Interval (I)**: Tage bis zur nächsten Wiederholung
4. **Repetitions (R)**: Anzahl erfolgreicher Wiederholungen
### Qualitätsstufen
In Manadeck werden 4 Bewertungsstufen verwendet:
| Button | Qualität (Q) | Bedeutung | Typisches Intervall |
|--------|--------------|-----------|-------------------|
| **Nochmal** | 1 | Antwort vergessen | < 1 Minute |
| **Schwer** | 3 | Mit Mühe erinnert | ~6 Minuten |
| **Gut** | 4 | Normal erinnert | ~10 Minuten / 1 Tag |
| **Leicht** | 5 | Perfekt erinnert | ~4 Tage |
### Algorithmus-Formel
```typescript
// Ease Factor Berechnung
EF' = EF + (0.1 - (5 - Q) * (0.08 + (5 - Q) * 0.02))
EF = max(1.3, EF') // Minimum 1.3
// Intervall-Berechnung
if (Q < 3) {
// Falsche Antwort
R = 0
I = 1 Tag
} else {
// Richtige Antwort
if (R == 0) I = 1 Tag
else if (R == 1) I = 6 Tage
else I = I(prev) * EF
R = R + 1
}
```
## Implementation in Manadeck
### Datenbankstruktur
#### `card_progress` Tabelle
```sql
- id: UUID (Primary Key)
- user_id: UUID (Foreign Key users)
- card_id: UUID (Foreign Key cards)
- deck_id: UUID (Foreign Key decks)
- ease_factor: Decimal (Default: 2.5)
- interval: Integer (Tage)
- repetitions: Integer
- next_review_date: Timestamp
- last_reviewed_at: Timestamp
- total_reviews: Integer
- correct_reviews: Integer
- incorrect_reviews: Integer
- status: Enum ('new', 'learning', 'review', 'relearning')
```
### Karten-Status
1. **new**: Noch nie gelernt
2. **learning**: In Lernphase (Intervall < 10 Tage)
3. **review**: Langzeit-Wiederholung (Intervall 10 Tage)
4. **relearning**: Nach Fehler zurück in Lernphase
### Lernmodi
#### 1. Alle Karten
- Zeigt alle Karten des Decks
- Standardreihenfolge nach Position
#### 2. Neue Karten
- Nur Karten mit Status `new`
- Noch nie studierte Karten
#### 3. Wiederholung
- Karten mit `next_review_date ≤ heute`
- Sortiert nach Überfälligkeit (älteste zuerst)
#### 4. Favoriten
- Nur als Favorit markierte Karten
#### 5. Zufällig
- Alle Karten in zufälliger Reihenfolge
## Lernablauf
### 1. Session Start
```typescript
1. Deck auswählen
2. Lernmodus wählen
3. Karten werden gefiltert/sortiert
4. Session wird in Datenbank erstellt
```
### 2. Karte lernen
```typescript
1. Karte anzeigen
2. Antwort geben (Flashcard umdrehen, Quiz beantworten)
3. Schwierigkeit bewerten
4. SM-2 berechnet nächstes Review-Datum
5. Progress in Datenbank speichern
```
### 3. Session Ende
```typescript
1. Statistiken berechnen
2. Session in Datenbank aktualisieren
3. Zusammenfassung anzeigen
```
## Beispiel-Lernverlauf
### Tag 1: Erste Begegnung
- Neue Karte lernen
- Bewertung: "Gut" (Q=4)
- Nächste Review: **Morgen**
### Tag 2: Erste Wiederholung
- Bewertung: "Gut" (Q=4)
- EF bleibt bei 2.5
- Nächste Review: **In 6 Tagen**
### Tag 8: Zweite Wiederholung
- Bewertung: "Leicht" (Q=5)
- EF steigt auf 2.6
- Nächste Review: **In 15 Tagen** (6 * 2.6)
### Tag 23: Dritte Wiederholung
- Bewertung: "Schwer" (Q=3)
- EF sinkt auf 2.36
- Nächste Review: **In 35 Tagen** (15 * 2.36)
## Vorteile des Systems
### 1. **Effizienz**
- Minimaler Zeitaufwand
- Fokus auf schwierige Karten
- Automatische Intervall-Anpassung
### 2. **Langzeit-Retention**
- Optimale Wiederholungszeitpunkte
- Bekämpft die Vergessenskurve
- Nachweislich 90%+ Retention möglich
### 3. **Personalisierung**
- Individuelle Ease Factors pro Karte
- Anpassung an Lerngeschwindigkeit
- Berücksichtigt Schwierigkeitsgrad
## Code-Referenzen
### Hauptdateien
1. **`utils/spacedRepetition.ts`**
- SM-2 Algorithmus Implementation
- Hilfsfunktionen für Intervalle
2. **`store/studyStore.ts`**
- Progress Management
- Session Verwaltung
- Supabase Integration
3. **`app/study/session/[id].tsx`**
- Lern-UI mit Bewertungsbuttons
- Intervall-Vorschau
4. **Datenbank-Migrationen**
- `create_card_progress_table`
- `create_study_sessions_table`
### Wichtige Funktionen
```typescript
// Hauptfunktion für SM-2 Berechnung
calculateSM2(quality, repetitions, previousInterval, previousEaseFactor)
// Schwierigkeit zu Qualität konvertieren
difficultyToQuality(difficulty: 'easy' | 'medium' | 'hard' | 'again')
// Prüfen ob Karte fällig ist
isCardDue(nextReviewDate: Date | string)
// Review-Queue organisieren
organizeReviewQueue(cards: CardProgress[])
```
## Best Practices
### Für Nutzer
1. **Ehrliche Bewertung**: Bewerte Karten ehrlich für optimale Intervalle
2. **Tägliches Lernen**: Regelmäßigkeit ist wichtiger als Intensität
3. **Reviews priorisieren**: Fällige Reviews vor neuen Karten
### Für Entwickler
1. **Ease Factor Grenzen**: Nie unter 1.3 fallen lassen
2. **Timezone-Handling**: Reviews um 4 Uhr morgens zurücksetzen
3. **Progress Backup**: Regelmäßig in Datenbank persistieren
## Wissenschaftliche Grundlagen
### Forschung
- Basiert auf Piotr Wozniak's SuperMemo Forschung (1987)
- Ebbinghaus Vergessenskurve (1885)
- Cognitive Science Prinzipien
### Effektivität
- **Studien zeigen**: 50% weniger Lernzeit bei gleicher Retention
- **Langzeit-Retention**: Bis zu 95% nach 1 Jahr möglich
- **Optimal für**: Vokabeln, Fakten, Formeln, Konzepte
## Vergleich mit anderen Systemen
| Feature | Manadeck | Anki | Quizlet |
|---------|----------|------|---------|
| Algorithmus | SM-2 | SM-2+ | Proprietary |
| Open Source | | | |
| Cloud Sync | | Partial | |
| Mobile App | | | |
| Kostenlos | | | Freemium |
## Zukünftige Verbesserungen
### Geplant
- [ ] FSRS (Free Spaced Repetition Scheduler) als Alternative
- [ ] Machine Learning für personalisierte Intervalle
- [ ] Heatmap-Kalender für Lernstreak
- [ ] Detaillierte Statistiken pro Karte
- [ ] Import/Export von Anki-Decks
### Experimentell
- [ ] Adaptive Tageszeit-Optimierung
- [ ] Kontext-basierte Schwierigkeit
- [ ] Gruppen-Lernstatistiken
## Troubleshooting
### Problem: Zu viele Reviews
**Lösung**: Tägliches Limit einführen, schwierige Karten vereinfachen
### Problem: Karten werden zu schnell vergessen
**Lösung**: Ease Factor manuell reduzieren, mehr Kontext hinzufügen
### Problem: Intervalle zu lang
**Lösung**: Bei Unsicherheit "Schwer" statt "Gut" wählen
## Fazit
Das Spaced Repetition System in Manadeck bietet eine wissenschaftlich fundierte, effiziente Methode zum Langzeit-Lernen. Durch die SM-2 Implementation erreichen Nutzer optimale Lernresultate mit minimalem Zeitaufwand.
---
*Letzte Aktualisierung: November 2024*
*Version: 1.0.0*