mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 19:41:09 +02:00
feat(sleep): add sleep module with tracking, hygiene checklists, and stats
New "Sleep/Schlaf" module for daily sleep tracking with morning quick-log, quality ratings, sleep hygiene evening checklists, and comprehensive stats. Includes: 10 preset hygiene checks, upsert-by-date entries, week bar chart with goal line, sleep debt calculation, consistency score (stddev-based), streak tracking, 30-day quality heatmap, and hygiene-quality correlation. Dashboard shows last night summary, week overview, stats grid, and hygiene impact. Morning log has smart defaults, star rating, interruption counter, tag chips. Hygiene checklist supports custom user-created checks. Registered in module-registry, encryption registry (4 tables), database v13, seed-registry, app-icons (moon icon, indigo), mana-apps, and workbench. Also updates MODULE_IDEAS.md with stretch (built), posture, skin, eyes entries. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
66dd684bba
commit
1e992d3c92
21 changed files with 2737 additions and 2 deletions
353
docs/modules/SLEEP_MODULE_PLAN.md
Normal file
353
docs/modules/SLEEP_MODULE_PLAN.md
Normal file
|
|
@ -0,0 +1,353 @@
|
|||
# Modul-Planung: Sleep / Schlaf
|
||||
|
||||
> **Kontext:** Neues Health-Modul im Mana-Ökosystem. Schlaf ist der #1 Health-Multiplier — beeinflusst Training, Stimmung, Kognition. Starke Synergien mit Body (DailyCheck), Dreams, Drink (Koffein), Stretch (Abendroutine), Meditate.
|
||||
|
||||
---
|
||||
|
||||
## 1. Namensvorschläge
|
||||
|
||||
| Englisch | Deutsch | `appId` | Anmerkung |
|
||||
|----------|---------|---------|-----------|
|
||||
| **Sleep** | **Schlaf** | `sleep` | Klar, kurz, kein Konflikt |
|
||||
| Slumber | Schlummer | `slumber` | Poetisch, aber etwas lang |
|
||||
| Rest | Ruhe | `rest` | Doppeldeutig (REST API) |
|
||||
| Nite | Nacht | `nite` | Modern, aber unklar |
|
||||
|
||||
**Empfehlung:** `sleep` / `Schlaf`
|
||||
|
||||
---
|
||||
|
||||
## 2. Feature-Übersicht
|
||||
|
||||
### 2.1 Schlaf-Logging
|
||||
|
||||
Kern des Moduls: tägliches Erfassen von Schlafzeiten und -qualität.
|
||||
|
||||
**Erfassung:**
|
||||
- **Einschlafzeit** (Bedtime) — wann ins Bett gegangen
|
||||
- **Aufwachzeit** (Wake time) — wann aufgestanden
|
||||
- **Schlafdauer** — automatisch berechnet
|
||||
- **Einschlafdauer** — wie lange zum Einschlafen gebraucht (optional)
|
||||
- **Unterbrechungen** — Anzahl und Gesamtdauer nächtlicher Aufwacher
|
||||
- **Schlafqualität** — 1–5 Sterne Gesamtbewertung
|
||||
|
||||
**Quick-Log UX:**
|
||||
- Morgens: "Wie hast du geschlafen?" → Aufwachzeit (default: jetzt), Einschlafzeit (gestern), Qualität
|
||||
- 3-Tap-Minimum: Einschlafzeit → Aufwachzeit → Qualität → Fertig
|
||||
- Smart Defaults: letzte Woche Durchschnitt als Vorschlag
|
||||
|
||||
### 2.2 Schlafziel & Fortschritt
|
||||
|
||||
- Tägliches Schlafziel konfigurierbar (Default: 8h)
|
||||
- Tagesanzeige: "7h 23min von 8h" mit Fortschrittsbalken
|
||||
- Wochenziel: "Diese Woche: 52h von 56h"
|
||||
- Konsistenz-Score: wie regelmäßig sind Ein-/Aufschlafzeiten?
|
||||
|
||||
### 2.3 Schlafhygiene-Checkliste
|
||||
|
||||
Abendliche Checkliste für besseren Schlaf:
|
||||
|
||||
| Check | Kategorie |
|
||||
|-------|-----------|
|
||||
| Kein Koffein nach 14:00 | Ernährung |
|
||||
| Kein Alkohol 3h vor Schlaf | Ernährung |
|
||||
| Bildschirme aus 1h vor Schlaf | Digital |
|
||||
| Schlafzimmer kühl (16–18°C) | Umgebung |
|
||||
| Schlafzimmer dunkel | Umgebung |
|
||||
| Keine schwere Mahlzeit 2h vor Schlaf | Ernährung |
|
||||
| Entspannungsroutine gemacht | Routine |
|
||||
| Gleiche Schlafenszeit ±30min | Konsistenz |
|
||||
|
||||
- Nutzer kann Checks an/aus schalten und eigene hinzufügen
|
||||
- Tägliche Abfrage (optional, abends via Reminder)
|
||||
- Korrelation: Checklisten-Score vs. Schlafqualität über Zeit
|
||||
|
||||
### 2.4 Statistiken & Trends
|
||||
|
||||
- **Wochen-Übersicht:** Balkendiagramm Schlafdauer pro Nacht
|
||||
- **Schlafenszeit-Trend:** Linie wann eingeschlafen/aufgewacht (Konsistenz sichtbar)
|
||||
- **Qualitäts-Heatmap:** 30-Tage Kalender farbcodiert (rot → grün)
|
||||
- **Durchschnitte:** Ø Schlafdauer, Ø Qualität, Ø Einschlafzeit letzte 7/30 Tage
|
||||
- **Schlechteste/Beste Nacht:** Highlights der letzten 30 Tage
|
||||
- **Schlafschuld:** Kumuliertes Defizit (Ziel − tatsächlich) über die Woche
|
||||
|
||||
### 2.5 Schlaf-Reminder
|
||||
|
||||
- **Schlafenszeit-Erinnerung:** "In 30 Min ist Schlafenszeit" (konfigurierbarer Vorlauf)
|
||||
- **Wind-Down Routine:** Optional: Stretch-Abendroutine oder Meditate-Session vorschlagen
|
||||
- **Morgen-Log Reminder:** "Wie hast du geschlafen?" (wenn morgens nicht geloggt)
|
||||
|
||||
### 2.6 Cross-Modul Synergien
|
||||
|
||||
| Modul | Integration |
|
||||
|-------|-------------|
|
||||
| **Body** | `bodyChecks.sleep` (1–5) wird durch Sleep-Qualitätswert ersetzt/gespiegelt. Korrelation: Schlafdauer vs. Trainingsleistung |
|
||||
| **Dreams** | "Traum gehabt?" Button im Morgen-Log → öffnet Dreams-Modul mit verknüpfter Nacht |
|
||||
| **Drink** | Koffein-Warnung: "Du hattest um 16:30 einen Kaffee — das kann den Schlaf beeinflussen" |
|
||||
| **Stretch** | Abendroutine als Wind-Down vorschlagen wenn Schlafenszeit naht |
|
||||
| **Meditate** | Einschlaf-Meditation vorschlagen |
|
||||
| **Mood** (zukünftig) | Korrelation Stimmung ↔ Schlafqualität |
|
||||
| **Habits** | "Kein Bildschirm ab 22:00" als Habit tracken, in Schlafhygiene-Score einfließen |
|
||||
|
||||
---
|
||||
|
||||
## 3. Datenmodell
|
||||
|
||||
### Tabellen
|
||||
|
||||
```typescript
|
||||
// Schlaf-Eintrag (eine Nacht)
|
||||
interface LocalSleepEntry extends BaseRecord {
|
||||
/** YYYY-MM-DD der Nacht (= Datum des Einschlafens) */
|
||||
date: string;
|
||||
/** ISO datetime — wann ins Bett */
|
||||
bedtime: string;
|
||||
/** ISO datetime — wann aufgewacht */
|
||||
wakeTime: string;
|
||||
/** Berechnete Schlafdauer in Minuten */
|
||||
durationMin: number;
|
||||
/** Minuten zum Einschlafen (optional) */
|
||||
sleepLatencyMin: number | null;
|
||||
/** Anzahl nächtlicher Aufwacher */
|
||||
interruptions: number;
|
||||
/** Gesamtdauer der Unterbrechungen in Minuten */
|
||||
interruptionDurationMin: number;
|
||||
/** Schlafqualität 1–5 */
|
||||
quality: number;
|
||||
/** Aufgewacht ausgeruht? 1–5 */
|
||||
restedness: number | null;
|
||||
/** Freitext-Notizen */
|
||||
notes: string;
|
||||
/** Tags (z.B. "Alptraum", "Jetlag", "Medikament") */
|
||||
tags: string[];
|
||||
/** Verknüpfung zu Dreams-Modul */
|
||||
dreamIds: string[];
|
||||
}
|
||||
|
||||
// Schlafhygiene-Check (abendlich, optional)
|
||||
interface LocalSleepHygieneLog extends BaseRecord {
|
||||
/** YYYY-MM-DD */
|
||||
date: string;
|
||||
/** IDs der erfüllten Checks */
|
||||
completedCheckIds: string[];
|
||||
/** Score 0–100 (% der aktiven Checks erfüllt) */
|
||||
score: number;
|
||||
}
|
||||
|
||||
// Schlafhygiene-Check Definition (konfigurierbar)
|
||||
interface LocalSleepHygieneCheck extends BaseRecord {
|
||||
name: string;
|
||||
description: string;
|
||||
category: HygieneCategory;
|
||||
isActive: boolean;
|
||||
isPreset: boolean;
|
||||
order: number;
|
||||
}
|
||||
|
||||
// Schlaf-Einstellungen (Singleton)
|
||||
interface LocalSleepSettings extends BaseRecord {
|
||||
/** Schlafziel in Minuten (Default: 480 = 8h) */
|
||||
goalMin: number;
|
||||
/** Ziel-Einschlafzeit HH:mm */
|
||||
targetBedtime: string;
|
||||
/** Ziel-Aufwachzeit HH:mm */
|
||||
targetWakeTime: string;
|
||||
/** Reminder: Minuten vor Schlafenszeit (0 = aus) */
|
||||
bedtimeReminderMin: number;
|
||||
/** Morgen-Log Reminder aktiv */
|
||||
morningReminderEnabled: boolean;
|
||||
/** Morgen-Log Reminder Zeit HH:mm */
|
||||
morningReminderTime: string;
|
||||
}
|
||||
|
||||
// Enums
|
||||
type HygieneCategory = 'nutrition' | 'digital' | 'environment' | 'routine' | 'consistency' | 'custom';
|
||||
```
|
||||
|
||||
### Encryption Registry
|
||||
|
||||
```typescript
|
||||
sleepEntries: { enabled: true, fields: ['notes'] },
|
||||
sleepHygieneLogs: { enabled: false, fields: [] },
|
||||
sleepHygieneChecks: { enabled: true, fields: ['name', 'description'] },
|
||||
sleepSettings: { enabled: false, fields: [] },
|
||||
```
|
||||
|
||||
### Module Config
|
||||
|
||||
```typescript
|
||||
export const sleepModuleConfig: ModuleConfig = {
|
||||
appId: 'sleep',
|
||||
tables: [
|
||||
{ name: 'sleepEntries' },
|
||||
{ name: 'sleepHygieneLogs' },
|
||||
{ name: 'sleepHygieneChecks' },
|
||||
{ name: 'sleepSettings' },
|
||||
],
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. UI-Konzept
|
||||
|
||||
### Dashboard (`/sleep`)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Letzte Nacht │
|
||||
│ ┌─────────────────────────────────┐ │
|
||||
│ │ 23:15 ━━━━━━━━━━━━━━━━ 06:42 │ │
|
||||
│ │ 7h 27min ★★★★☆ │ │
|
||||
│ └─────────────────────────────────┘ │
|
||||
│ 7h 27min / 8h Ziel ████████░░ 93% │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Diese Woche Ø 7h 12min │
|
||||
│ Mo ██████░ 6:45 │
|
||||
│ Di ███████ 7:30 │
|
||||
│ Mi ██████░ 6:50 │
|
||||
│ Do ████████ 8:10 │
|
||||
│ Fr ███████ 7:23 │
|
||||
│ Sa ░░░░░░░ — │
|
||||
│ So ░░░░░░░ — │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Schlafschuld: -48 Min diese Woche │
|
||||
├─────────────────────────────────────────┤
|
||||
│ Trends (30 Tage) │
|
||||
│ Ø Qualität: 3.8 ★ │ Ø Dauer: 7:15 │
|
||||
│ Konsistenz: 82% │ Streak: 14 Tage│
|
||||
├─────────────────────────────────────────┤
|
||||
│ [ Schlaf loggen ] [ Hygiene-Check ] │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Morgen-Log Flow
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ Guten Morgen! Wie hast du geschlafen? │
|
||||
│ │
|
||||
│ Eingeschlafen [ 23:15 ] ← gestern │
|
||||
│ Aufgewacht [ 06:42 ] ← heute │
|
||||
│ │
|
||||
│ ═══════════ 7h 27min ═══════════ │
|
||||
│ │
|
||||
│ Qualität │
|
||||
│ ☆ ☆ ☆ ☆ ☆ │
|
||||
│ (tap to rate) │
|
||||
│ │
|
||||
│ Aufwacher in der Nacht? [ 0 ] │
|
||||
│ │
|
||||
│ Traum gehabt? [ Ja → Dreams ] │
|
||||
│ │
|
||||
│ Notizen (optional) │
|
||||
│ ┌─────────────────────────────────┐ │
|
||||
│ │ │ │
|
||||
│ └─────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [ Speichern ] │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Schlafenszeit-Balken
|
||||
|
||||
Kompakte Visualisierung einer Nacht:
|
||||
|
||||
```
|
||||
23:00 00:00 01:00 02:00 03:00 04:00 05:00 06:00 07:00
|
||||
│▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│
|
||||
↑ Einschlaf Aufwach ↑
|
||||
```
|
||||
|
||||
Für die Wochenansicht gestapelt — zeigt auf einen Blick wie konsistent die Schlafzeiten sind.
|
||||
|
||||
---
|
||||
|
||||
## 5. Seed-Daten
|
||||
|
||||
### Schlafhygiene-Checks (Presets)
|
||||
|
||||
```typescript
|
||||
const HYGIENE_PRESETS = [
|
||||
{ id: 'hygiene-no-caffeine', name: 'Kein Koffein nach 14:00', category: 'nutrition', order: 0 },
|
||||
{ id: 'hygiene-no-alcohol', name: 'Kein Alkohol 3h vor Schlaf', category: 'nutrition', order: 1 },
|
||||
{ id: 'hygiene-no-heavy-meal', name: 'Keine schwere Mahlzeit 2h vor Schlaf', category: 'nutrition', order: 2 },
|
||||
{ id: 'hygiene-screens-off', name: 'Bildschirme aus 1h vor Schlaf', category: 'digital', order: 3 },
|
||||
{ id: 'hygiene-no-phone-bed', name: 'Kein Handy im Bett', category: 'digital', order: 4 },
|
||||
{ id: 'hygiene-cool-room', name: 'Schlafzimmer kühl (16–18°C)', category: 'environment', order: 5 },
|
||||
{ id: 'hygiene-dark-room', name: 'Schlafzimmer dunkel', category: 'environment', order: 6 },
|
||||
{ id: 'hygiene-quiet', name: 'Ruhige Umgebung / Ohrstöpsel', category: 'environment', order: 7 },
|
||||
{ id: 'hygiene-wind-down', name: 'Entspannungsroutine gemacht', category: 'routine', order: 8 },
|
||||
{ id: 'hygiene-consistent-time', name: 'Gleiche Schlafenszeit ±30min', category: 'consistency', order: 9 },
|
||||
];
|
||||
```
|
||||
|
||||
### Default Settings
|
||||
|
||||
```typescript
|
||||
const DEFAULT_SETTINGS = {
|
||||
goalMin: 480, // 8h
|
||||
targetBedtime: '23:00',
|
||||
targetWakeTime: '07:00',
|
||||
bedtimeReminderMin: 30, // 30min vorher
|
||||
morningReminderEnabled: true,
|
||||
morningReminderTime: '08:00',
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. App-Registrierung
|
||||
|
||||
```typescript
|
||||
{
|
||||
id: 'sleep',
|
||||
name: 'Sleep',
|
||||
nameDe: 'Schlaf',
|
||||
description: {
|
||||
de: 'Schlaf-Tracking',
|
||||
en: 'Sleep Tracking',
|
||||
},
|
||||
longDescription: {
|
||||
de: 'Tracke deinen Schlaf mit Zeiten, Qualität und Schlafhygiene. Wochen-Trends, Schlafschuld, Konsistenz-Score und Verknüpfung mit Träumen.',
|
||||
en: 'Track your sleep with times, quality, and sleep hygiene. Weekly trends, sleep debt, consistency score, and dream linking.',
|
||||
},
|
||||
icon: APP_ICONS.sleep,
|
||||
color: '#6366f1', // Indigo — Nacht/Ruhe
|
||||
status: 'development',
|
||||
requiredTier: 'guest',
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Technische Besonderheiten
|
||||
|
||||
### Nacht-Überlappung
|
||||
- Schlaf überlappt Mitternacht: Einschlafzeit gehört zum Vortag
|
||||
- `date` Feld = Datum des Einschlafens (nicht Aufwachens)
|
||||
- Dauer-Berechnung muss über Mitternacht funktionieren
|
||||
|
||||
### Konsistenz-Score
|
||||
```
|
||||
score = 100 - (stddev_bedtime_minutes / 30 * 50) - (stddev_waketime_minutes / 30 * 50)
|
||||
```
|
||||
Capped auf 0–100. Je geringer die Abweichung der Ein-/Aufschlafzeiten, desto höher.
|
||||
|
||||
### Schlafschuld
|
||||
```
|
||||
debt_week = sum(goalMin - actualMin) for each day
|
||||
```
|
||||
Positiv = Defizit, Negativ = Überschuss. Resets wöchentlich (Montag).
|
||||
|
||||
---
|
||||
|
||||
## 8. Implementierungsreihenfolge
|
||||
|
||||
1. **Datenmodell + Store** — Types, Config, Collections, Queries, Store
|
||||
2. **Morgen-Log** — Quick-Entry Formular (Kernfunktion)
|
||||
3. **Dashboard** — Letzte Nacht, Wochenübersicht, Schlafziel-Fortschritt
|
||||
4. **Statistiken** — Trends, Durchschnitte, Konsistenz-Score, Schlafschuld
|
||||
5. **Schlafhygiene** — Check-Konfiguration, Abend-Checklist, Korrelation
|
||||
6. **Reminders** — Schlafenszeit-Erinnerung, Morgen-Log Reminder
|
||||
7. **Cross-Modul** — Dreams-Verlinkung, Body-Check Integration, Drink-Warnung
|
||||
Loading…
Add table
Add a link
Reference in a new issue