mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-24 00:16:42 +02:00
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>
276 lines
No EOL
7.2 KiB
Markdown
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* |