mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 21:41:09 +02:00
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>
353 lines
13 KiB
Markdown
353 lines
13 KiB
Markdown
# 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
|