Eine Web-Anwendung für strukturierte Partnergespräche basierend auf der Moeller-Methode ("Zwiegespräch"). Die App fungiert als neutrale dritte Instanz, die Sprechzeiten, Reihenfolge und Pausen verwaltet – so können sich beide Partner vollständig auf den Inhalt konzentrieren, ohne auf die Zeit achten zu müssen.
- Was ist das Zwiegespräch?
- Funktionsweise
- Gesprächsmodi
- Anleitung
- Features
- Installation & Entwicklung
- Technischer Stack
- Architektur
- Tests
- Lizenz
Das Zwiegespräch nach Michael Lukas Moeller ist eine strukturierte Kommunikationsmethode für Paare, bei der beide Partner in festgelegten Zeitabschnitten sprechen. Die Regeln sind einfach, aber wirkungsvoll:
- Einer spricht, der andere hört zu – ohne zu unterbrechen
- Feste Zeitfenster – jeder Partner erhält gleich viel Redezeit
- Keine Diskussion während der Slots – erst am Ende gibt es Raum für Dialog
- Regelmäßigkeit – idealerweise wöchentlich oder zweimal wöchentlich
Diese Methode schafft einen geschützten Raum für tiefere Verbindung, emotionale Intimität und präventive Beziehungspflege.
Jede Session besteht aus mehreren aufeinanderfolgenden Phasen:
| Phase | Beschreibung |
|---|---|
| Prep (Vorbereitung) | Ankommen, Einstimmung in das Gespräch (1-2 Minuten) |
| Slot A | Partner A spricht, Partner B hört zu (10-15 Minuten) |
| Slot B | Partner B spricht, Partner A hört zu (10-15 Minuten) |
| Transition (Übergang) | Kurze Pause zwischen den Runden (1-1,5 Minuten) |
| Closing A/B (Abschluss) | Abschließende Gedanken beider Partner (2-3 Minuten) |
| Cooldown | Gemeinsame stille Nachbereitungszeit (10 Minuten) |
Die meisten Modi arbeiten mit mehreren Runden (z. B. 2-3 Runden à Slot A + Slot B). Dies ermöglicht:
- Wiederholtes Sprechen und Vertiefen
- Reagieren auf Gehörtes (ohne direkt zu antworten)
- Natürlicher Gesprächsfluss durch Iteration
Die App nutzt Klangschalen-Töne (Web Audio API), um Phasenübergänge sanft anzuzeigen:
- 🔔 Tiefer Einzelton – Session startet
- 🔔 Aufsteigender Ton – Sprechzeit endet
- 🔔 Klarer Ton – Übergang endet
- 🔔 Doppelter Klang – Abschlussphase beginnt
- 🔔 Ausklingend – Cooldown startet
- 🔔 Dreifacher Klang – Session komplett beendet
Wichtig: Audio wird erst nach expliziter Nutzerinteraktion abgespielt (Browser-Policy).
Je nach Guidance-Level zeigt die App hilfreiche Tipps während der Phasen:
- Minimal – nur Cooldown-Tipps
- Moderate – zusätzlich Transition-Tipps
- High – auch Prep-Tipps (Einsteiger-Modus)
Die App bietet vier vordefinierte Modi plus einen vollständig anpassbaren Custom Mode:
- Zweck: Wöchentliche Beziehungshygiene
- Dauer: ~90 Minuten
- Runden: 3 × 15 Minuten
- Frequenz: 1× pro Woche
- Guidance: Moderate
Ideal für etablierte Paare zur regelmäßigen Pflege der Beziehung.
- Zweck: Stabilisierung in instabilen Phasen
- Dauer: ~60 Minuten
- Runden: 3 × 10 Minuten
- Frequenz: 2× pro Woche empfohlen
- Guidance: Moderate
Kürzere Sessions bei höherer Frequenz, ideal bei Konflikten oder Krisen.
- Zweck: Einstieg für Anfänger, Fokus auf aktives Zuhören
- Dauer: ~45 Minuten
- Runden: 2 × 10 Minuten
- Frequenz: Nach Bedarf
- Guidance: High
Kompakterer Einstieg mit mehr Hilfestellungen während des Gesprächs.
- Zweck: Vollständig anpassbare Phasen und Dauern
- Validierung: Mindestens 1× Slot A und 1× Slot B erforderlich
- Guidance: Wählbar (minimal, moderate, high)
Für fortgeschrittene Nutzer, die eigene Zeitstrukturen entwickeln möchten.
- App öffnen – Navigate zu couples-timer.app (oder lokal via
npm run dev) - Onboarding durchlaufen – Einführung in die Methode und App-Nutzung
- Sprache wählen – Deutsch oder Englisch
- Partnerprofile anlegen – Namen für beide Partner eingeben (z. B. "Anna & Max")
-
Modus auswählen
- Klicke auf eine der vier Karten (Maintain, Commitment, Listening, Custom)
- Lies die Beschreibung und Gesamtdauer
-
Einstellungen anpassen (optional)
- Guidance-Level ändern (minimal/moderate/high)
- Audio aktivieren/deaktivieren
- Bei Custom Mode: Phasen hinzufügen, entfernen, Reihenfolge ändern
-
Session starten
- Klicke auf "Start Session"
- Bereite dich während der Prep-Phase vor
- Die App leitet dich automatisch durch alle Phasen
- Timer – Zeigt verbleibende Zeit der aktuellen Phase
- Phasen-Indikator – Zeigt aktuellen und nächsten Schritt
- Guidance-Tipps – Erscheinen je nach Level und Phase
- Pause/Resume – Pausiere die gesamte Session bei Bedarf
- Stop – Beende die Session vorzeitig (Bestätigung erforderlich)
Wichtig: Einzelne Phasen können nicht übersprungen werden – dies ist zentral für die Methode!
- Cooldown – 10 Minuten stilles Nachspüren (kein Nachgespräch!)
- Session abschließen – App kehrt automatisch zur Startseite zurück
- Wiederholung planen – Regelmäßigkeit ist der Schlüssel zum Erfolg
- Wähle "Custom" auf der Startseite
- Klicke "Create New Custom Sequence"
- Phasen hinzufügen:
- Klicke "+Add Phase"
- Wähle Phase-Typ (prep, slotA, slotB, transition, closing, cooldown)
- Setze Dauer (per Slider oder Eingabefeld)
- Reihenfolge anpassen:
- Drag & Drop zum Verschieben von Phasen
- Guidance-Level wählen: minimal/moderate/high
- Speichern: Deine Sequenz wird im Browser persistiert
- Starten: Nutze die Sequenz wie einen Preset-Modus
Validierung: Mindestens 1× Slot A und 1× Slot B erforderlich.
- ✅ 4 wissenschaftlich fundierte Preset-Modi (Maintain, Commitment, Listening, Custom)
- ✅ Präziser Timer (Genauigkeit: ±1 Sekunde pro 30 Minuten)
- ✅ Audio-Signale (Klangschalen via Web Audio API)
- ✅ Guidance-System (3 Stufen: minimal, moderate, high)
- ✅ Zweisprachig (Deutsch/Englisch mit i18next)
- ✅ Onboarding für Erstnutzer
- ✅ Partnernamen individuell anpassbar
- ✅ Offline-fähig (keine Server-Abhängigkeit)
- ✅ Persistierung (LocalStorage für Custom Modes und Einstellungen)
- ✅ Responsive Design (Mobile & Desktop)
- ✅ Animations (Framer Motion für sanfte Übergänge)
- ✅ Type-safe (TypeScript 5+)
- ✅ Getestet (Vitest + Playwright E2E)
- 🚫 Keine Skip-Buttons – Methoden-Treue
- 🎯 Klare Phasen-Logik – SessionEngine als Zustandsmaschine
- 🔇 Audio-Consent – Explizite Nutzer-Aktivierung erforderlich
- 📏 Strikte Validierung – Custom Modes müssen Regeln einhalten
- Node.js 18+ und npm
- Git
# Repository klonen
git clone https://github.com/DYAI2025/CoupleTime.git
cd CoupleTime
# Dependencies installieren
npm install
# Dev-Server starten (Port 5173)
npm run dev# Entwicklung
npm run dev # Vite Dev-Server starten
npm run build # Production Build erstellen
npm run preview # Build lokal testen
# Testing
npm run test # Vitest Unit-Tests ausführen
npm run test:run # Tests einmalig laufen (CI)
npm run test:e2e # Playwright E2E-Tests
# Code-Qualität
npm run lint # ESLint prüfen
npm run format # Prettier formatieren
# Deployment
npm run deploy # Build + gh-pages deployment- React 19.2 – UI-Framework
- TypeScript 5.9 – Type-safe Development
- Vite 7 – Build-Tool (schnell, modern)
- Tailwind CSS 3.4 – Utility-First Styling
- Framer Motion 12 – Animations
- React Context/Hooks – UI-State
- SessionEngine – Domain-Logik (pure TypeScript)
- LocalStorage – Persistierung (PersistenceService)
- Web Audio API – Klangschalen-Generierung (AudioService)
- performance.now() – Timer-Genauigkeit (TimerService)
- i18next – Internationalisierung (DE/EN)
- Vitest – Unit & Component Tests
- @testing-library/react – React-Testing Utils
- Playwright – E2E-Tests
- ESLint + Prettier – Code-Qualität
src/
├── domain/ # Pure TypeScript Domain Models (UI-unabhängig)
│ ├── SessionEngine.ts # Zentrale Zustandsmaschine
│ ├── SessionMode.ts # Mode-Definitionen
│ ├── PhaseType.ts # prep, slotA, slotB, transition, closing, cooldown
│ ├── AudioEvent.ts # Audio-Event-Typen
│ ├── GuidanceLevel.ts # minimal, moderate, high
│ └── ...
├── services/ # Browser APIs & Side Effects
│ ├── AudioService.ts # Web Audio API Integration
│ ├── TimerService.ts # Drift-korrigierter Timer
│ ├── GuidanceService.ts # Tipp-Logik pro Phase
│ └── PersistenceService.ts # LocalStorage CRUD
├── viewModel/ # React Context & Hooks (Domain ↔ UI Bridge)
│ ├── useSession.ts # Session-State Management
│ └── useModeSelection.ts # Mode-Auswahl & Custom-Sequenzen
├── components/ # UI-Komponenten
│ ├── TimerDisplay/ # Countdown-Anzeige
│ ├── PhaseIndicator/ # Aktueller + Nächster Schritt
│ ├── GuidanceTip/ # Kontext-sensitive Tipps
│ ├── ModeCard/ # Mode-Karten auf Startseite
│ ├── onboarding/ # Onboarding-Flow
│ └── ...
├── pages/ # Views (Routing)
│ ├── ModeSelectionPage.tsx # Startseite mit 4 Modi
│ ├── SessionPage.tsx # Aktive Session-View
│ └── SequenceBuilderPage.tsx # Custom Mode Editor
├── i18n/ # Übersetzungen
│ ├── de/translation.json
│ └── en/translation.json
└── public/audio/ # Singing Bowl Sounds (6 WAV-Dateien, müssen ggf. selbst hinzugefügt werden – siehe Anleitung)
- Domain Layer – Vollständig UI-unabhängig, testbar ohne React
- Service Layer – Kapselt Browser-APIs (Audio, Timer, Storage)
- ViewModel Layer – React-spezifische Logik, bindet Domain an UI
- View Layer – Präsentationskomponenten, keine Business-Logik
Die zentrale Logik sitzt in SessionEngine.ts:
class SessionEngine {
start(): void // Session starten
pause(): void // Session pausieren
resume(): void // Session fortsetzen
stop(): void // Session beenden
tick(deltaMs: number): void // Timer-Tick verarbeiten
getCurrentPhase(): PhaseConfig
getProgress(): number // 0.0 - 1.0
// ...
}Key Features:
- Drift-Korrektur via
performance.now() - Event-Emitter für Audio-Trigger
- Strikte Phase-Sequenz-Validierung
- Immutable State-Updates
npm run testCoverage-Ziele:
- Domain Models & SessionEngine: ≥80%
- Services: ≥70%
- UI-Components: ≥60%
npm run test:e2eTestszenarien:
- Alle 4 Preset-Modi durchlaufen
- Custom Mode: Erstellen, Bearbeiten, Speichern, Laden, Ausführen
- Pause/Resume während Session
- Sprach-Switch (DE ↔ EN)
- Onboarding-Flow
npm run deployBuild wird nach dist/ erstellt und via gh-pages deployed.
- Netlify/Vercel: Repository verbinden, Build-Command:
npm run build, Output:dist/ - Docker: Optional Dockerfile erstellen (nginx + dist)
Contributions sind willkommen! Bitte beachte:
-
Issues: Beschreibe Bugs oder Feature-Requests im GitHub Issue Tracker
-
Pull Requests:
- Fork das Repo
- Erstelle einen Feature-Branch (
git checkout -b feature/AmazingFeature) - Committe deine Änderungen (
git commit -m 'Add AmazingFeature') - Pushe den Branch (
git push origin feature/AmazingFeature) - Öffne einen Pull Request
-
Code-Standards:
- TypeScript strict mode
- Prettier + ESLint befolgen
- Tests für neue Features schreiben
- Commits in Englisch
- Michael Lukas Moeller: "Die Wahrheit beginnt zu zweit"
- Wikipedia: Zwiegespräch
Dieses Projekt ist Open Source und unter der MIT License lizenziert. Siehe MIT License für Details.
- Michael Lukas Moeller – für die Zwiegespräch-Methode
- React & TypeScript Community – für großartige Tools
- Alle Contributors – die dieses Projekt verbessern
Made with ❤️ for better relationships
Bei Fragen oder Feedback: GitHub Issues