managarten/docs/modules/SLEEP_MODULE_PLAN.md
Till JS 1e992d3c92 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>
2026-04-13 21:19:52 +02:00

13 KiB
Raw Permalink Blame History

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 — 15 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 (1618°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
  • 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 (15) 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 15 */
  quality: number;
  /** Aufgewacht ausgeruht? 15 */
  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 0100 (% 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 (1618°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
  • 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 0100. 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