mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 20:01: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>
13 KiB
13 KiB
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
// 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
sleepEntries: { enabled: true, fields: ['notes'] },
sleepHygieneLogs: { enabled: false, fields: [] },
sleepHygieneChecks: { enabled: true, fields: ['name', 'description'] },
sleepSettings: { enabled: false, fields: [] },
Module Config
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)
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
const DEFAULT_SETTINGS = {
goalMin: 480, // 8h
targetBedtime: '23:00',
targetWakeTime: '07:00',
bedtimeReminderMin: 30, // 30min vorher
morningReminderEnabled: true,
morningReminderTime: '08:00',
};
6. App-Registrierung
{
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
dateFeld = 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
- Datenmodell + Store — Types, Config, Collections, Queries, Store
- Morgen-Log — Quick-Entry Formular (Kernfunktion)
- Dashboard — Letzte Nacht, Wochenübersicht, Schlafziel-Fortschritt
- Statistiken — Trends, Durchschnitte, Konsistenz-Score, Schlafschuld
- Schlafhygiene — Check-Konfiguration, Abend-Checklist, Korrelation
- Reminders — Schlafenszeit-Erinnerung, Morgen-Log Reminder
- Cross-Modul — Dreams-Verlinkung, Body-Check Integration, Drink-Warnung