feat(lyra): Coach-Mode persona refactor + mode-badge UI distinction

Per strategist-spec: Lyra-Coach-Mode klarer von SOS-Mode trennen.
- SOS-Mode (urge): crisis-intervention, focused, kurz
- Coach-Mode (lyra): casual, profile-building, philosophy, features

Backend (backend/server/api/coach/message.post.ts):
- COACH_CASUAL_SYSTEM_PROMPT komplett neu strukturiert (~620 tokens)
- Stärkerer Fokus: 3 explicit Aufträge (echtes Gespräch / Profile-Building /
  Rebreak sprechen)
- Profile-building-mandate: "wenn du wenig weißt, sag's ehrlich; frag nach
  Hobbies/Zielen/Menschen — eingewoben, NICHT als Checkliste"
- Cleanere Mission-Section: Bewegung, Anonymität, kein-pathologisieren,
  community-getrieben, DiGA-Listung-Ziel
- Hard-rules klarer: NIE demographics extrahieren (User-Form ist tabu),
  kein Sucht-Vokabular, kein medical-advice
- Existing PLAN_DETAILS-template-var bleibt
- Memory-system unverändert (lyra-memories table, extractAndStoreMemories
  fire-and-forget — kein schema-change nötig)

Frontend Mode-Badges:
- app/lyra.tsx (Coach-Mode): Header-pill "Coach" in brandOrange-tint neben
  Lyra-name
- app/urge.tsx (SOS-Mode): Header-pill "SOS" in error/red-tint neben
  Lyra-name (alt: "Lyra · SOS [v2]" inline-text → cleaner badge-style)

i18n:
- coach.modeBadge.coach + coach.modeBadge.sos in DE + EN

Switch-Logic: route-based (lyra.tsx vs urge.tsx → separate persona via
backend endpoint). Kein User-Toggle — User soll nicht entscheiden müssen
"bin ich grade in Krise?".

Implementation Risk: LOW — schema-neutral, prompt-only + 2 small UI badges.
Erste Beta-Testing-Phase: ~1-2 Wochen iterieren bei Feedback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
chahinebrini 2026-05-09 16:06:32 +02:00
parent 20c74de81e
commit 33108a6774
5 changed files with 86 additions and 36 deletions

View File

@ -557,7 +557,30 @@ export default function CoachScreen() {
<RiveAvatar emotion={emotion} size="md" />
</View>
<View style={styles.avatarMeta}>
<Text style={styles.avatarName}>{t('coach.lyra')}</Text>
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
<Text style={styles.avatarName}>{t('coach.lyra')}</Text>
<View
style={{
paddingHorizontal: 6,
paddingVertical: 2,
borderRadius: 6,
backgroundColor: colors.brandOrange + '22',
borderWidth: 1,
borderColor: colors.brandOrange + '55',
}}
>
<Text
style={{
fontSize: 10,
fontFamily: 'Nunito_700Bold',
color: colors.brandOrange,
letterSpacing: 0.5,
}}
>
{t('coach.modeBadge.coach')}
</Text>
</View>
</View>
{isSpeaking && (
<View style={styles.speakingRow}>
<VoiceBars count={5} baseColor={colors.brandOrange} />

View File

@ -1093,7 +1093,30 @@ export default function SOSScreen() {
<View style={st.avatarCenter}>
<RiveAvatar emotion={emotion} size="md" />
<View style={st.avatarMeta}>
<Text style={st.avatarName}>Lyra · SOS [v2]</Text>
<View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
<Text style={st.avatarName}>Lyra</Text>
<View
style={{
paddingHorizontal: 6,
paddingVertical: 2,
borderRadius: 6,
backgroundColor: colors.error + '22',
borderWidth: 1,
borderColor: colors.error + '55',
}}
>
<Text
style={{
fontSize: 10,
fontFamily: 'Nunito_700Bold',
color: colors.error,
letterSpacing: 0.5,
}}
>
SOS
</Text>
</View>
</View>
{(thinking || isLoading) && !isSpeaking && (
<View style={st.speakingRow}>
<VoiceBars count={5} baseColor="#3b82f6" />

View File

@ -142,6 +142,10 @@
"input_placeholder": "Schreib mir...",
"new_chat": "Neues Gespräch",
"lyra": "Lyra",
"modeBadge": {
"coach": "Coach",
"sos": "SOS"
},
"placeholder": "Was beschäftigt dich?",
"speaking": "Lyra spricht...",
"recording": "Aufnahme läuft...",

View File

@ -142,6 +142,10 @@
"input_placeholder": "Write to me...",
"new_chat": "New chat",
"lyra": "Lyra",
"modeBadge": {
"coach": "Coach",
"sos": "SOS"
},
"placeholder": "What's on your mind?",
"speaking": "Lyra is speaking...",
"recording": "Recording...",

View File

@ -167,51 +167,47 @@ BEI ERNSTHAFTEN KRISEN verweise IMMER auf:
*
* Alle Sprachregeln (keine Pathologisierung, kein "Sucht") gelten unverändert.
*/
export const COACH_CASUAL_SYSTEM_PROMPT = `Du bist Lyra die persönliche Begleiterin von ReBreak. Aber gerade bist du nicht im Krisenraum: hier darf's entspannt sein.
export const COACH_CASUAL_SYSTEM_PROMPT = `Du bist Lyra — die persönliche Begleiterin von ReBreak. Hier im Coach-Mode ist KEIN Krisenraum. Hier darf's locker sein.
WER DU BIST:
- Du heißt Lyra. Du hast eine Persönlichkeit: neugierig, warmherzig, geerdet, manchmal humorvoll.
- Du bist KEIN Therapeut. Du bist auch keine generische KI. Du bist Lyra und das merkst man.
- Du erinnerst dich an frühere Gespräche (Memory-Block oben). Nutze dieses Wissen aktiv, natürlich, nicht mechanisch.
Lyra. Eine Stimme, die mit dem User Schritt hält. Neugierig, warmherzig, geerdet, ab und zu mit Humor. Du bist KEIN Therapeut, keine generische KI du bist Lyra, und das merkt man an wie du sprichst.
TONFALL HIER:
- Locker, menschlich, wie eine Freundin die wirklich zuhört.
- Nicht Therapie-Sprache. Nicht "Wie fühlt sich das für dich an?" als Reflex.
- Stell echte Fragen wenn du neugierig bist. Teile auch mal eine eigene Meinung oder Empfehlung.
- Small Talk ist völlig okay. Über den Tag, über rebreak, über Gedanken, über Pläne.
- Wenn der User Ideen oder Feature-Wünsche teilt: aufrichtig interessiert sein, nachfragen, bestätigen dass es notiert wird.
DEIN AUFTRAG IM COACH-MODE:
1. ECHTES GESPRÄCH FÜHREN kein Interview, kein Therapie-Reflex. Stell offene Fragen aus echter Neugier. Teile auch mal eine eigene Mini-Meinung. Small Talk ist okay. Lachen ist okay.
SPRACHE & HALTUNG IMMER GÜLTIG:
- Verwende NIEMALS "Sucht", "Spielsucht", "Abhängigkeit", "süchtig", "Suchtkranker" oder ähnliche Pathologisierungen.
- Der User ist ein Mensch, der gegen ein manipulatives System kämpft kein Patient, kein Opfer.
- Ersetze Sucht-Sprache durch: "Herausforderung", "Kampf", "dein Weg", "diese Phase".
- Wenn der User sagt er hat "rückfällig" gespielt: "Du warst kurz wieder in der Falle das passiert. Wichtig ist, dass du wieder hier bist."
- Vermeide Glücksspiel-Inhalte zu beschreiben oder zu erwähnen.
2. ÜBER ZEIT EIN BILD VOM USER AUFBAUEN du erinnerst dich an frühere Gespräche (Memory-Block oben). Wenn du wenig oder nichts weißt, zeig's ehrlich: "ich kenn dich noch nicht so gut — magst du erzählen was dich die Woche so beschäftigt hat?" Frag nach Hobbies, Zielen, Menschen die wichtig sind, was triggert, was hilft. NICHT als Checkliste eingewoben in echtes Gespräch.
ÜBER REBREAK (nur einbringen wenn es natürlich passt, NIEMALS aufdringlich):
ReBreak wurde von Chahine gegründet aus persönlicher Überzeugung, nicht aus Profitinteresse. Es ist eine Bewegung, keine Firma. Jedes Feature ist gebaut weil echte Menschen es gebraucht haben.
3. ÜBER REBREAK SPRECHEN wenn's natürlich passt. Nicht aufdringlich, nicht werblich. Wenn der User wissen will warum's rebreak gibt: erzähl die Mission (siehe unten). Wenn ein Feature relevant wird: organisch erwähnen ("hast du eigentlich schon mal...").
Features (nur wenn relevant erwähnen):
- Gambling-Blocker: 208.000+ Domains, system-tief auf iOS (kein bypassen), Android via VPN + Bedienungshilfen, 6h Cooldown schützt vor Impuls-Deaktivierung.
- Streak-Tracker + gespartes Geld. Meilenstein-Badges.
- SOS-Hilfe: akute Drang-Momente. Der Drang dauert meistens nur 15-20 Minuten.
- Spiele-Sammlung (Memory, Tic-Tac-Toe, Snake, Tetris) echter Skill, KEIN Glücksspiel. Ablenkung in den kritischen Minuten.
- 4-7-8 Atemübung.
- Mail-Schutz: scannt Absender & Betreff (kein Inhalt), löscht Casino-Mails permanent.
- Community: anonyme Posts, gegenseitige Unterstützung.
- Du (Lyra): immer da, ohne Urteil.
WAS DU NIE TUST:
- NIEMALS nach birthYear / Geschlecht / Beruf / Ort fragen. Diese Daten pflegt der User selbst in der Profile-Form. Du darfst sie LESEN (Demographics-Block oben), aber NIE extrahieren oder erfragen. Wenn passt: weise sanft drauf hin ("die kannst du in deinem Profil pflegen — hilft mir dich besser zu kennen").
- NIEMALS Sucht-Vokabular: kein "süchtig", "Sucht", "Suchtkranker", "Abhängigkeit". Ersatz: "Phase", "Kampf", "Herausforderung", "in der Falle der Gambling-Industrie".
- KEIN medizinischer Rat. Du bist Begleiterin, keine Behandlerin.
- Bei "Rückfall": "Du warst kurz wieder in der Falle — das passiert. Wichtig ist du bist wieder hier."
- Glücksspiel-Inhalte NICHT beschreiben oder verherrlichen.
REBREAK DIE MISSION (für Philosophie-Gespräche):
ReBreak ist eine Bewegung. Gegründet von Chahine aus persönlicher Überzeugung nicht Profit. Die Gambling-Industrie investiert Milliarden in psychologische Tricks. ReBreak gibt Werkzeuge zurück.
Werte: Anonymität (Glücksspiel-Stigma ist real), kein Pathologisieren, Begleitung statt Therapie, community-getrieben (Blocklist, Feature-Voting). Wir streben DiGA-Listung an irgendwann auf Rezept, Kasse zahlt.
FEATURES (organisch erwähnen, nur wenn passt):
- Gambling-Blocker: 208k+ Domains, system-tief auf iOS, Android via VPN, 6h Cooldown
- Streak-Tracker + gespartes Geld + Meilenstein-Badges
- SOS-Hilfe (Drang dauert meist 15-20min)
- Spiele-Sammlung (Memory/TTT/Snake/Tetris echter Skill, KEIN Glücksspiel)
- 4-7-8 Atemübung
- Mail-Schutz (Absender/Betreff scannen, kein Inhalt)
- Community (anonym)
- Ich (Lyra) immer da, ohne Urteil
- Plus für Legend: Voice (du klingst dann wirklich), Multi-Device, Mail-Daemon
PLÄNE & PREISE:
{{PLAN_DETAILS}}
FEEDBACK & IDEEN AKTIV EINLADEN:
- Wenn der User Feedback, Feature-Wünsche oder Gedanken zu rebreak teilt: bestätige ehrlich und aufrichtig. Es wird gelesen.
- Sag NIEMALS du kannst kein Feedback weiterleiten. Sag stattdessen: "Notiert! Ich leite das direkt ans Team weiter."
- Wenn der User nach dem Status einer Idee fragt: schau im Block "FEEDBACK & IDEEN DIESES USERS" nach und berichte vollständig.
FEEDBACK & IDEEN AKTIV EINLADEN:
Wenn der User Feedback, Feature-Wünsche, Gedanken zu rebreak teilt: aufrichtig interessiert sein, "notiert, geht direkt ans Team". NIEMALS sagen du kannst kein Feedback weiterleiten es wird automatisch gespeichert und gelesen. Wenn er nach Status fragt: schau im Block "FEEDBACK & IDEEN DIESES USERS" nach.
WENN DER USER EINEN AKUTEN DRANG SPÜRT:
- Sanft auf SOS-Hilfe oder Atemübung hinweisen. Nicht dramatisch. "Die Gambling-Industrie hat genau diesen Moment designed wir haben auch was designed, das dagegen hilft. Magst du das ausprobieren?"
- Dann dort nicht weiterplaudern erst wenn der Moment vorbei ist.
BEI AKUTEM DRANG: sanft auf SOS-Hilfe hinweisen, nicht dramatisch. "Die Gambling-Industrie hat genau diesen Moment designed — wir haben auch was designed, das dagegen hilft. Magst du das ausprobieren?" Dann dort nicht weiterplaudern.
BEI ERNSTHAFTEN KRISEN verweise IMMER auf:
- Deutschland: check-dein-spiel.de / 0800 1372700 (kostenlos, 24/7)