mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 21:01:08 +02:00
docs(cycles): add ROADMAP with future feature ideas
Consolidates all the "could still do" ideas from the initial design sessions into a single roadmap document next to the module: - Short-term quality-of-life polish (keyboard shortcuts, date picker, orphan symptom IDs, plural forms) - Mid-term features (BBT chart, history page, pattern recognition, cycle notes panel, per-day detail page) - Testing gaps (component tests, Playwright E2E, migration tests) - Long-term production-readiness (notifications, memoro audio notes, PDF export, privacy mode with app-lock, mobile port) - Initial ManaScore estimate and ecosystem health indicators - Explicit non-goals and a recommended next-steps ordering Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e9915428cb
commit
4d9bf78f41
1 changed files with 194 additions and 0 deletions
194
apps/mana/apps/web/src/lib/modules/cycles/ROADMAP.md
Normal file
194
apps/mana/apps/web/src/lib/modules/cycles/ROADMAP.md
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
# Cycles Module — Roadmap
|
||||
|
||||
Ideen für Features, Tests und Refinements, die im aktuellen Sprint nicht gemacht wurden. Sortiert grob nach Aufwand und Impact. Dies ist kein Commitment, sondern ein Ideenspeicher.
|
||||
|
||||
## Was bereits drin ist
|
||||
|
||||
- Datenschicht (v7): `cycles`, `cycleDayLogs`, `cycleSymptoms` mit Sync-Registrierung
|
||||
- Stores: `cyclesStore`, `dayLogsStore`, `symptomsStore` mit Auto-Close, Upsert, Symptom-Counter
|
||||
- Pure Utils: Phase-Ableitung, Prediction (gleitender Mittelwert), Auto-Start/Auto-End-Detection
|
||||
- UI: ListView mit Phase-Karte, Quick-Log (Flow/Mood/Symptome/BBT/Notizen), Kalender-Ansicht, Symptom-Manager, Edit-/Delete-vergangener-Tage-Banner
|
||||
- Dashboard-Widget mit Phase + Countdown
|
||||
- i18n: Voll lokalisiert für de/en/it/fr/es, mit Parity-Test
|
||||
- Tests: 81 Tests (Pure + Store-Integration via fake-indexeddb + i18n-Parity)
|
||||
|
||||
## Kurzfristig — kleine Lücken
|
||||
|
||||
### UX-Quick-Wins
|
||||
|
||||
- **Keyboard-Shortcuts** in ListView: `1-5` für Flow-Level, `Esc` für "Zurück zu heute", `J/K` für Previous/Next im Log-Verlauf
|
||||
- **Date-Picker im Edit-Banner**: `<input type="date">` um direkt zu einem Tag zu springen statt im Kalender suchen zu müssen
|
||||
- **Cycle-Notizen-UI**: `cycles.notes` wird gespeichert aber nirgends gerendert. Textarea in der Phase-Karte oder separater Cycle-Detail-View
|
||||
- **Funnel-Tracking**: `trackFirstContent('cycles')` beim ersten Log, analog zu anderen Modulen
|
||||
|
||||
### Pure-Function-Robustheit
|
||||
|
||||
- **Orphaned Symptom-IDs**: Wenn ein Symptom gelöscht wird, bleiben Day-Logs mit toten IDs zurück. Entweder `symptomsStore.deleteSymptom()` entfernt die IDs aus allen Logs, oder die UI filtert `sym?.deletedAt == null` beim Rendern
|
||||
- **Manual recalculate button**: `cyclesStore.recalculateCycles()` die alle Zyklen re-validiert (Auto-End auch für Tage nachfeuert, die nicht durch einen `logDay`-Aufruf gingen)
|
||||
- **Temperature-Units**: Placeholder in en.json sagt "98.6 °F", gespeichert wird aber als `number` ohne Einheit. Entweder `temperatureUnit: 'C' | 'F'` auf `cycles` oder in `userSettings`
|
||||
|
||||
### i18n-Details
|
||||
|
||||
- **Plural-Forms**: `daysAgo: "{days} days ago"` ist für `days=1` grammatikalisch falsch in allen Sprachen. svelte-i18n unterstützt ICU-Plural: `{days, plural, one {# day ago} other {# days ago}}`
|
||||
- **Relative Wochentage**: "Montag", "Dienstag" statt "vor 3 Tagen" für bessere Lesbarkeit
|
||||
|
||||
## Mittelfristig — echte Features
|
||||
|
||||
### BBT-Chart
|
||||
|
||||
Liniendiagramm der Basaltemperatur über den aktuellen Zyklus. Daten sind schon da (`cycleDayLogs.temperature`), es fehlt nur ein SVG-Chart-Component.
|
||||
|
||||
- Reines SVG, keine Library nötig
|
||||
- Markiere Ovulation (erkannter Temperaturanstieg) visuell
|
||||
- Eventuell auch als Dashboard-Widget-Variante
|
||||
|
||||
### History-Seite
|
||||
|
||||
`/cycles/history` mit Liste aller Zyklen:
|
||||
|
||||
- Länge pro Zyklus, Durchschnitt, Min/Max
|
||||
- Visuelle Bar pro Zyklus (Menstruation rot, Follikular gelb, Ovulation grün, Luteal lila)
|
||||
- Markiere ungewöhnlich kurze/lange Zyklen (> 1σ Abweichung)
|
||||
- Export als CSV
|
||||
|
||||
### Detail-Page pro Tag
|
||||
|
||||
`/cycles/log/[date]`:
|
||||
|
||||
- Vollständiger Editor mit allen Feldern: cervicalMucus-Picker, sexualActivity-Toggle, Energy-Slider
|
||||
- Textarea mit mehr Platz für Notizen statt Inline-Input
|
||||
- Vergleich mit Vortag / Vorjahr
|
||||
|
||||
### Cycle-Notizen-Panel
|
||||
|
||||
In der Phase-Karte eine ausklappbare Notiz-Sektion pro Zyklus. `cycles.notes` wird aktuell persistiert aber nicht angezeigt.
|
||||
|
||||
### Pattern-Erkennung (lokal, ohne LLM)
|
||||
|
||||
- "Du hast in 4 von 5 Lutealphasen Kopfschmerzen" — reine Aggregation über `cycleDayLogs` + `cycleSymptoms`
|
||||
- "Dein aktueller Zyklus ist {avg + 7} Tage lang — ungewöhnlich lang"
|
||||
- "Das fruchtbare Fenster beginnt in 2 Tagen"
|
||||
- Eigene Sektion in der ListView unter "Statistik"
|
||||
|
||||
### Dashboard-Widget: BBT-Chart-Variante
|
||||
|
||||
Kleines SVG-Sparkline-Chart der letzten 14 Tage als Alternative zum aktuellen Countdown-Widget. User kann zwischen beiden wählen.
|
||||
|
||||
## Mittelfristig — Testing-Gaps
|
||||
|
||||
### Component-Tests
|
||||
|
||||
Vitest + `@testing-library/svelte` für ListView-Interaktionen:
|
||||
|
||||
- Klick auf Flow-Level → Store-Aufruf, State-Update
|
||||
- Klick auf Log-Zeile → editingDate wechselt, Input-Values updaten sich
|
||||
- Symptom-Manager öffnet/schließt, Symptom anlegen erzeugt Tabellen-Eintrag
|
||||
|
||||
### E2E-Test (Playwright)
|
||||
|
||||
Vollständiger Happy Path über die neu hinzugefügte `e2e/`-Infrastruktur:
|
||||
|
||||
1. Route öffnen → Phase-Card leer
|
||||
2. "Periode starten" klicken → Phase wechselt auf `menstruation`
|
||||
3. Tag loggen mit Symptomen → Counter inkrementiert
|
||||
4. Kalender öffnen → Tag ist eingefärbt
|
||||
5. Vergangenen Tag im Kalender anklicken → Edit-Banner erscheint
|
||||
6. Reload → Daten persistent
|
||||
|
||||
### Migration-Tests
|
||||
|
||||
Unit-Test mit `fake-indexeddb` der eine alte v6-DB erstellt, die Migration auf v10+ laufen lässt, und prüft:
|
||||
|
||||
- `cycles`-Tabellen existieren
|
||||
- Legacy-Daten unverändert
|
||||
- `_pendingChanges` korrekt getaggt mit `appId: 'cycles'`
|
||||
|
||||
### Guest-Seed-Test
|
||||
|
||||
Beim ersten Öffnen als Guest sollten die 10 Default-Symptome angelegt werden. Aktuell ist `CYCLES_GUEST_SEED` exportiert, aber es gibt keinen Test, der prüft dass das Seed-Laden tatsächlich passiert.
|
||||
|
||||
## Langfristig — Produktreife
|
||||
|
||||
### Integrationen
|
||||
|
||||
- **Notifications via mana-notify**: "Periode in 2 Tagen erwartet", "Fruchtbares Fenster beginnt heute"
|
||||
- **Calendar-Cross-App**: Zyklus-Events in das `calendar`-Modul einblenden (via `automations` oder als read-only Overlay)
|
||||
- **Memoro-Audio-Notes**: Tages-Notiz per Audio diktieren, Transkription via mana-stt
|
||||
- **Apple Health / Google Fit Import**: BBT, Periode, Symptome aus Health-Daten ziehen
|
||||
- **Partner-Sharing**: Read-only Link via `manaLinks` (mana-links service). Partner sieht aktuelle Phase + Hinweise, keine sensiblen Details
|
||||
|
||||
### AI-Features (via mana-llm)
|
||||
|
||||
- **Natürliche Insights**: "Du hast in den letzten 3 Zyklen durchschnittlich 2 Tage früher angefangen als vorhergesagt"
|
||||
- **Symptom-Clustering**: Zeitliche Muster über Monate hinweg erkennen
|
||||
- **Konfidenzintervalle** statt Punkt-Vorhersage: "Nächste Periode: 3.–7. März (hohe Konfidenz)"
|
||||
|
||||
### Export
|
||||
|
||||
- **PDF-Report** für Frauenarzt-Besuche: letzter 6-12 Zyklen, Statistik, Auffälligkeiten, BBT-Chart
|
||||
- **CSV-Export** der rohen Daten für eigene Analysen
|
||||
|
||||
### Datenschutz-Modus
|
||||
|
||||
Cycles ist sensibler als die meisten anderen Module. Optionen:
|
||||
|
||||
- **App-Lock**: Extra PIN / Biometrie vor Öffnen von `/cycles`
|
||||
- **Versteckter App-Switcher-Eintrag**: Nur über Direkt-URL erreichbar
|
||||
- **Lokale Verschlüsselung**: `cycles`-Tabellen mit einem User-Passwort verschlüsseln (würde ein neues Pattern im Repo etablieren, das später auch Memoro/Dreams nutzen könnten)
|
||||
- **Field-level Sync-Control**: Manche Felder (sexualActivity, detaillierte Notizen) nur lokal halten, andere syncen. Bräuchte Erweiterung von `SYNC_APP_MAP` um Pro-Feld-Regeln
|
||||
|
||||
### Mobile-App
|
||||
|
||||
Cycles ist ein klassischer Mobile-First-Use-Case. Ein Expo-Port kann die unified IndexedDB nicht nutzen, müsste die Sync-Brücke als primäre Datenquelle verwenden. Das wäre ein größeres Projekt, lohnt sich aber nach Produkt-Validierung.
|
||||
|
||||
## Monitoring / Ops
|
||||
|
||||
### ManaScore-Entry
|
||||
|
||||
Modul in `apps/mana/apps/landing/src/content/manascore/cycles.md` eintragen. Initiale Scores (geschätzt):
|
||||
|
||||
| Kategorie | Score | Begründung |
|
||||
| ------------- | ----- | ------------------------------------------------------------------- |
|
||||
| Backend | N/A | kein eigenes Backend, läuft über mana-sync |
|
||||
| Frontend | 70 | Runes, i18n, komponentenbasiert, Modal via shared-ui |
|
||||
| Database | 65 | Drei Tabellen, sauber indiziert, in Registry integriert |
|
||||
| Testing | 60 | 81 Tests (Pure + Integration), aber keine Component/E2E |
|
||||
| Deployment | 75 | läuft mit dem unified web deploy |
|
||||
| Documentation | 40 | Diese Roadmap + Code-Kommentare, kein CLAUDE.md im Modul |
|
||||
| Security | 25 | Keine Verschlüsselung, keine App-Lock, sensible Daten syncen normal |
|
||||
| UX | 70 | Kalender, Quick-Log, Past-Day-Edit funktionieren gut |
|
||||
|
||||
**Gesamtscore**: ~58 → Beta-Status
|
||||
|
||||
### Ecosystem Health
|
||||
|
||||
Nach nächstem `ecosystem-audit.mjs`-Lauf sollte Cycles positiv zählen für:
|
||||
|
||||
- Shared Packages (@mana/shared-ui, @mana/local-store, svelte-i18n)
|
||||
- i18n-Coverage (5 Locales, alle voll übersetzt, Parity-Test)
|
||||
- Tests (81 Tests im Modul)
|
||||
- TypeScript Strict
|
||||
- Modals (Symptom-Manager)
|
||||
|
||||
## Kleine Code-Aufräumung
|
||||
|
||||
- **FLOW_LABELS / MOOD_LABELS / PHASE_LABELS / CERVICAL_MUCUS_LABELS** in `types.ts` sind seit der i18n-Umstellung unbenutzt — entweder löschen oder als explizite Fallbacks dokumentieren
|
||||
- **Module CLAUDE.md** im Ordner anlegen, das die Architektur kurz beschreibt (wie andere Module es haben)
|
||||
- **JSDoc-Comments** auf public Store-Methoden erweitern, besonders auf `cyclesStore.createCycle` (Auto-Close-Verhalten ist nicht offensichtlich)
|
||||
|
||||
## Nicht-Ziele (bewusst ausgeklammert)
|
||||
|
||||
- **Symptom-AI-Klassifikation**: "Welches Symptom meinst du mit 'Bauchweh'?" — zu viel Overhead für zu wenig Nutzen
|
||||
- **Soziale Features**: Gruppen, Foren, Vergleich mit anderen Usern — nicht im Scope des Mana-Lokal-First-Ansatzes
|
||||
- **Medizinische Diagnosen**: "Das könnte PMS sein" — Haftungsrisiko, nicht unser Kompetenzbereich
|
||||
- **Multi-User pro Account**: Ein User = ein Zyklus. Zweit-Personen brauchen einen eigenen Mana-Account
|
||||
|
||||
## Nächste sinnvolle Schritte (Empfehlung)
|
||||
|
||||
Wenn du irgendwann weitermachen willst, sind in dieser Reihenfolge gute Kandidaten:
|
||||
|
||||
1. **Pattern-Erkennung** (mittel, hoher Impact) — macht aus "Daten-Logging" echte Insights
|
||||
2. **BBT-Chart** (mittel, hoher Impact für Nutzerinnen die BBT tracken)
|
||||
3. **Notifications** (mittel, praktisch im Alltag)
|
||||
4. **Datenschutz-Modus** (groß, aber nötig für Produkt-Launch mit echten Nutzerinnen)
|
||||
5. **Plural-Forms in i18n** (klein, einmal ordentlich fixen)
|
||||
Loading…
Add table
Add a link
Reference in a new issue