feat(cards): recovery mode, undo, FSRS slider, streak header, stats charts, blog
Some checks are pending
CI / validate (push) Waiting to run

Study-View:
- Graceful Backlog Recovery: Banner bei >30 fälligen Karten, Recovery-Queue
  sortiert nach Stability aufsteigend (25er-Batch, ?recovery=true)
- Undo letzte Bewertung: 5s-Toast mit RAF-Fortschrittsbalken, Ctrl/Cmd+Z,
  prevSnapshot-Spalte in reviews (Migration 0001, Prod deployed)
- FSRS-Tooltip nach Reveal: State / Stability / Difficulty als Popover

Deck-Edit:
- Neuer Abschnitt „Lern-Algorithmus" mit request_retention-Slider (50–99 %)

Header:
- Streak-Pill (🔥 N) + fällige-Karten-Pill via GET /api/v1/me/summary

Stats-Page:
- Difficulty-Distribution (5 Buckets, Farb-Bars)
- Deck-Fortschritt (Mastery % = stability>21, max 6 Decks)

API:
- GET /me/summary: streak_days + due_now (leichtgewichtiger Header-Endpoint)
- GET /reviews/due: ?recovery=true → stability-sort, Limit 25
- POST /reviews/:cardId/:subIndex/undo: prevSnapshot-Restore, 409 wenn leer
- /me/stats: difficulty_distribution + deck_mastery

Landing:
- 5 Blog-Artikel (Quizlet-Paywall, FSRS, Datenschutz, Anki, Lernkarten-Tipps)
- BlogTeaser-Komponente auf Startseite, Footer-Spalte „Artikel"

i18n: 11 neue Schlüssel in DE/EN/FR/IT/ES

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-05-13 13:37:03 +02:00
parent 21ec535173
commit abf493aeec
27 changed files with 2667 additions and 29 deletions

View file

@ -77,17 +77,23 @@ aber im Code längst gelandet:
### Scheduler-Verbesserungen
- **FSRS-Parameter pro User optimieren**`ts-fsrs` liefert
`computeParameters()` aus Review-History; Schema (`decks.fsrs_settings`)
und Per-Deck-Override sind vorbereitet, aber kein Endpoint und kein UI.
Größter messbarer Retention-Gewinn pro Aufwand.
- **FSRS-Parameter pro User optimieren**`ts-fsrs@5.3.2` hat
**kein** `computeParameters()` aus Review-History (das erfordert den
Python `fsrs-optimizer`). Der praktisch nutzbare Hebel ist
`request_retention` (0.50.99): höherer Wert → mehr Wiederholungen,
besser für prüfungsrelevantes Lernen; niedrigerer Wert → lockerer,
gut für Allgemeinwissen. Schema (`decks.fsrs_settings`) und
Per-Deck-PATCH-Endpoint sind da; **Retention-Slider im Deck-Edit
gebaut 2026-05-13.** w-Gewichte-Optimierung (Offline-Python-Skript
→ JSON-Upload) bleibt offen.
- **Leech-Detection — gebaut 2026-05-12.** `me/stats` liefert
`leech_cards` (Threshold 4 Lapses, Limit 20, sortiert nach
Lapses desc, mit Front-Snippet + Deck-Name). Stats-Page hat eine
rote Leech-Sektion mit Link in den Card-Editor. i18n in DE/EN/
FR/IT/ES. Suspension/Aufteilen-Vorschläge sind nächste Welle.
- **Undo letzte Bewertung** — wichtiger UX-Reflex; aktuell muss man
das Review händisch zurückbauen.
- **Undo letzte Bewertung — gebaut 2026-05-13.** `prevSnapshot`-
Spalte in `reviews`, API `POST /:cardId/:subIndex/undo`, 5-s-Toast
mit Fortschrittsbalken im Study-View, Ctrl/Cmd+Z-Shortcut.
- **Card Burial / Suspension** — Karten temporär deaktivieren ohne
Löschen; häufig angefragtes Anki-Feature.
- **Geschwister-Burial** — Cloze-Cluster und basic-reverse-Seiten
@ -100,9 +106,9 @@ aber im Code längst gelandet:
Fehler" als saubere Filter im Queue-Loader.
- **Subdeck-Unterstützung** — hierarchische Deck-Struktur
(z. B. Vokabeln → Nomen / Verben).
- **Cloze-Hint-Anzeige** — `{{c1::answer::hint}}` wird aktuell beim
Rendern fallen gelassen; Hint-Anzeige steht in `STATUS.md` als
verbleibender Phase-9-Punkt.
- **Cloze-Hint-Anzeige — bereits implementiert.** `renderClozePrompt`
in `packages/cards-domain/src/cloze.ts` rendert `{{c1::answer::hint}}`
bereits als `[hint]`. `STATUS.md`-Eintrag ist veraltet.
### Kartentypen, Schema vorhanden / vorbereitet
@ -119,8 +125,9 @@ aber im Code längst gelandet:
- **Streak-Freeze-Token** — ein Streak-Schutztag pro Woche, optional
durch Credits kaufbar.
- **Streak im Header** — heute nur im Stats-Dashboard sichtbar;
Header-Glyph mit Zahl wäre Mikro-Aufwand, sichtbare Wirkung.
- **Streak im Header — gebaut 2026-05-13.** `GET /api/v1/me/summary`
liefert `streak_days` + `due_now`; Header zeigt Flammen-Pill und
fällige-Karten-Pill via `onMount`.
- **XP + Badges** — Meilensteine (erstes Deck, 100 Karten, 30-Tage-
Streak).
- **Tages-Ziele** — „Heute: 20 Karten" mit Progress-Bar im Dashboard.
@ -152,17 +159,21 @@ aber im Code längst gelandet:
## Analytics & Insights
- **Vergessenskurven-Visualisierung** — pro Deck und Tag, aus
FSRS-State ableitbar.
- **Vergessenskurven-Visualisierung / Graceful Backlog Recovery —
gebaut 2026-05-13.** Stats-Page zeigt Difficulty-Distribution
(5 Buckets, Farb-Bars) + Deck-Fortschritt (Mastery %, Stability>21).
Study-View zeigt Recovery-Banner wenn total>30 fällige Karten,
startet Queue nach Stability sortiert (25er-Batch).
- **Retention-Rate** — aufgeschlüsselt nach Kategorie und Sprache.
- **Lernzeit-Tracking** — Minuten pro Session, Wochentrend.
- **Karten-Schwierigkeits-Heatmap** — welche Karten kosten die
meiste Review-Zeit.
- **Wöchentliche Zusammenfassung** — In-App oder per Email via
`mana-notify`.
- **Algorithmus-Transparenz pro Karte** — kleines „Wieso wurde ich
befragt?"-Tooltip mit Stability/Difficulty/letztem Rating. Macht
FSRS sichtbar (Mission-Wert „Souveränität").
- **Algorithmus-Transparenz pro Karte — gebaut 2026-05-13.**
FSRS-Tooltip im Study-View: ⓘ-Button nach Reveal öffnet Popover
mit State, Stability, Difficulty, letztem Rating. Macht FSRS
sichtbar (Mission-Wert „Souveränität").
---