diff --git a/apps/rebreak-native/app/dm.tsx b/apps/rebreak-native/app/dm.tsx
index 2ef4de2..d24e03d 100644
--- a/apps/rebreak-native/app/dm.tsx
+++ b/apps/rebreak-native/app/dm.tsx
@@ -28,6 +28,7 @@ import * as FileSystem from 'expo-file-system/legacy';
import { apiFetch } from '../lib/api';
import { ChatBubble, type ChatMsg, type MessageReaction } from '../components/chat/ChatBubble';
import { DmChatBackground } from '../components/chat/DmChatBackground';
+import { FormSheet } from '../components/FormSheet';
import { useDmRealtime } from '../hooks/useChatRealtime';
import { useColors } from '../lib/theme';
import { useThemeStore } from '../stores/theme';
@@ -532,7 +533,7 @@ export default function DmScreen() {
onLike={toggleLike}
onReact={toggleReaction}
onDelete={deleteMessage}
- onOpenImage={() => {}}
+ onOpenImage={(url) => setLightboxUri(url)}
/>
)}
keyExtractor={(m) => m.id}
@@ -545,6 +546,7 @@ export default function DmScreen() {
keyboardDismissMode="interactive"
keyboardShouldPersistTaps="handled"
onContentSizeChange={() => flatListRef.current?.scrollToEnd({ animated: false })}
+ onLayout={() => flatListRef.current?.scrollToEnd({ animated: false })}
/>
)}
@@ -706,103 +708,90 @@ function DmInfoSheet({
);
return (
-
-
- {/* Header */}
-
-
- {t('chat.info')}
-
-
-
-
-
-
-
- {/* Partner-Karte */}
-
- {partner?.avatar ? (
-
- ) : (
-
-
- {partner?.nickname?.[0]?.toUpperCase() ?? '?'}
-
-
- )}
-
-
- {partner?.nickname ?? '…'}
-
-
- {t('dm.view_profile', { defaultValue: 'Profil anzeigen' })}
-
-
-
-
-
-
-
- {/* Geteilte Medien */}
-
-
- {t('dm.shared_media', { defaultValue: 'Geteilte Medien' })}
- {sharedMedia.length > 0 && (
-
- {' '}{sharedMedia.length}
-
- )}
-
-
-
- {sharedMedia.length === 0 ? (
-
-
-
- {t('dm.no_shared_media', { defaultValue: 'Keine geteilten Medien' })}
-
-
+
+
+ {/* Partner-Karte */}
+
+ {partner?.avatar ? (
+
) : (
-
- {[...sharedMedia].reverse().map((m) => (
- onImagePress(m.attachmentUrl!)}
- >
-
-
- ))}
+
+
+ {partner?.nickname?.[0]?.toUpperCase() ?? '?'}
+
)}
-
-
-
+
+
+ {partner?.nickname ?? '…'}
+
+
+ {t('dm.view_profile')}
+
+
+
+
+
+
+
+ {/* Geteilte Medien */}
+
+
+ {t('dm.shared_media')}
+
+ {sharedMedia.length > 0 && (
+
+ {sharedMedia.length}
+
+ )}
+
+
+ {sharedMedia.length === 0 ? (
+
+
+
+ {t('dm.no_shared_media')}
+
+
+ ) : (
+
+ {[...sharedMedia].reverse().map((m) => (
+ onImagePress(m.attachmentUrl!)}
+ >
+
+
+ ))}
+
+ )}
+
+
);
}
diff --git a/backend/server/api/coach/transcribe.post.ts b/backend/server/api/coach/transcribe.post.ts
index f3f75b2..c8680e0 100644
--- a/backend/server/api/coach/transcribe.post.ts
+++ b/backend/server/api/coach/transcribe.post.ts
@@ -84,34 +84,18 @@ export default defineEventHandler(async (event) => {
);
// Deepgram language mapping.
- // Live-Diagnose (2026-05-30): nova-3 lehnt language=ar (und tr) mit
- // 400 "No such model/language/tier combination found" ab — entgegen
- // der vorherigen Annahme. Fallback für ar/tr: nova-2-general
- // (multilingual auto-detect). Für alle anderen Sprachen bleibt nova-3
- // (bessere Genauigkeit, diskrete language-codes).
+ // Stand 2026-06-01: nova-3 unterstützt alle Sprachen inkl. ar/tr.
+ // nova-2-general hat ar/tr-Support eingestellt ("No such model/language/tier
+ // combination found") — daher einheitlich nova-3 für alle Sprachen.
const deepgramLang =
language &&
["de", "en", "tr", "ar", "fr", "es", "pt", "it"].includes(language)
? language
: "de";
- // nova-2-general unterstützt language=ar/tr (im Gegensatz zu nova-3).
- // Ohne expliziten language-Param fällt nova-2 auf Auto-Detect zurück und
- // misdetektiert arabisches Audio oft als Englisch (phonetisches Transcript
- // wie "salam alaikum" statt "السلام عليكم") — Lyra antwortet dann nicht
- // auf Arabisch. Mit language=ar wird der korrekte Acoustic-Model-Pfad
- // verwendet und die Schrift bleibt arabisch.
- const needsGeneralModel = ["ar", "tr"].includes(deepgramLang);
- const deepgramUrl = needsGeneralModel
- ? `https://api.deepgram.com/v1/listen?language=${deepgramLang}&model=nova-2-general`
- : `https://api.deepgram.com/v1/listen?language=${deepgramLang}&model=nova-3`;
+ const deepgramUrl = `https://api.deepgram.com/v1/listen?language=${deepgramLang}&model=nova-3`;
- console.log(
- "[transcribe] language:",
- deepgramLang,
- "model:",
- needsGeneralModel ? "nova-2-general" : "nova-3",
- );
+ console.log("[transcribe] language:", deepgramLang, "model: nova-3");
try {
const response = await fetch(deepgramUrl, {