feat(cards): recovery mode, undo, FSRS slider, streak header, stats charts, blog
Some checks are pending
CI / validate (push) Waiting to run
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:
parent
21ec535173
commit
abf493aeec
27 changed files with 2667 additions and 29 deletions
|
|
@ -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.5–0.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").
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -181,10 +181,10 @@ weil sie den breitesten Markt haben.
|
|||
|
||||
| # | Deck-Slug | Titel | Karten | Lizenz | Sprache |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 | `cardecky/englisch-a2-grundwortschatz` | Englisch A2 — 500 häufigste Wörter | 500 (basic-reverse) | CC-BY-4.0 | de |
|
||||
| 2 | `cardecky/englisch-b1-aufbauwortschatz` | Englisch B1 — Aufbau-Wortschatz | 600 (basic-reverse) | CC-BY-4.0 | de |
|
||||
| 3 | `cardecky/franzoesisch-a2-grundwortschatz` | Französisch A2 — Grundwortschatz | 500 (basic-reverse) | CC-BY-4.0 | de |
|
||||
| 4 | `cardecky/mathematik-sek1-grundbegriffe` | Mathematik Sek 1 — Begriffe + Formeln | 200 (basic + cloze) | CC-BY-4.0 | de |
|
||||
| 1 | `cardecky/englisch-a2-grundwortschatz` | Englisch A2 — 500 häufigste Wörter | 500 (basic-reverse) | CC-BY-4.0 | de | ✅ live 2026-05-12 (557 Karten) |
|
||||
| 2 | `cardecky/englisch-b1-aufbauwortschatz` | Englisch B1 — Aufbau-Wortschatz | 600 (basic-reverse) | CC-BY-4.0 | de | ✅ live 2026-05-13 (689 Karten) |
|
||||
| 3 | `cardecky/franzoesisch-a2-grundwortschatz` | Französisch A2 — Grundwortschatz | 500 (basic-reverse) | CC-BY-4.0 | de | ✅ live 2026-05-13 (575 Karten) |
|
||||
| 4 | `cardecky/mathematik-sek1-grundbegriffe` | Mathematik Sek 1 — Begriffe + Formeln | 200 (basic + cloze) | CC-BY-4.0 | de | ✅ live 2026-05-13 (178 Karten) |
|
||||
| 5 | `cardecky/geografie-welt-hauptstaedte` | Geografie Welt — Länder + Hauptstädte | 195 (basic-reverse) | CC-BY-4.0 | de |
|
||||
| 6 | `cardecky/periodensystem-elemente` | Periodensystem — 118 Elemente | 118 (basic-reverse) | CC-BY-4.0 | de |
|
||||
| 7 | `cardecky/biologie-zelle-grundlagen` | Biologie — Zelle und Zellbiologie | 80 (basic + cloze) | CC-BY-4.0 | de |
|
||||
|
|
@ -206,6 +206,26 @@ weil sie den breitesten Markt haben.
|
|||
geschätzt 30–40 Stunden über mehrere Sessions, weil Recherche +
|
||||
Quellen-Belege + Stufen-Validierung pro Deck Zeit kosten.
|
||||
|
||||
## 8b. Bonus-Decks (außerhalb Phase-1-Seed)
|
||||
|
||||
| # | Deck-Slug | Titel | Karten | Lizenz | Sprache | Status |
|
||||
|---|---|---|---|---|---|---|
|
||||
| B-1 | `cardecky/taegerwilen-bodensee` | Tägerwilen am Bodensee | 66 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-2 | `cardecky/kreuzlingen-thurgau` | Kreuzlingen am Bodensee | 70 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-3 | `cardecky/gottlieben-seerhein` | Gottlieben am Seerhein | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-4 | `cardecky/konstanz-bodensee` | Konstanz am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-5 | `cardecky/meersburg-bodensee` | Meersburg am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-6 | `cardecky/muensterlingen-bodensee` | Münsterlingen am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-7 | `cardecky/reichenau-bodensee` | Reichenau am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-8 | `cardecky/friedrichshafen-bodensee` | Friedrichshafen am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-9 | `cardecky/lindau-bodensee` | Lindau am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-10 | `cardecky/bregenz-vorarlberg` | Bregenz am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-11 | `cardecky/ueberlingen-bodensee` | Überlingen am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-12 | `cardecky/romanshorn-bodensee` | Romanshorn am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-13 | `cardecky/allensbach-bodensee` | Allensbach am Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-14 | `cardecky/bodensee` | Der Bodensee | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
| B-15 | `cardecky/thurgau` | Kanton Thurgau | 50 (basic + cloze + mc) | CC0-1.0 | de | ✅ live 2026-05-12 |
|
||||
|
||||
**Lizenzen:**
|
||||
- Default `CC-BY-4.0` mit Attribution „Cardecky / mana e.V." erlaubt
|
||||
Re-Use durch Lehrer/innen, Forks, Schul-Repositories.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue