diff --git a/apps/x/apps/renderer/src/App.tsx b/apps/x/apps/renderer/src/App.tsx
index 40923262..4b01c2fb 100644
--- a/apps/x/apps/renderer/src/App.tsx
+++ b/apps/x/apps/renderer/src/App.tsx
@@ -387,6 +387,8 @@ function FixedSidebarToggle({
onNewChat,
onOpenSearch,
meetingState,
+ meetingSummarizing,
+ meetingAvailable,
onToggleMeeting,
leftInsetPx,
}: {
@@ -397,6 +399,8 @@ function FixedSidebarToggle({
onNewChat: () => void
onOpenSearch: () => void
meetingState: MeetingTranscriptionState
+ meetingSummarizing: boolean
+ meetingAvailable: boolean
onToggleMeeting: () => void
leftInsetPx: number
}) {
@@ -433,31 +437,37 @@ function FixedSidebarToggle({
>
-
-
-
-
-
- {meetingState === 'recording' ? 'Stop meeting notes' : 'Take new meeting notes'}
-
-
+ {meetingAvailable && (
+
+
+
+
+
+ {meetingSummarizing ? 'Generating meeting notes...' : meetingState === 'recording' ? 'Stop meeting notes' : 'Take new meeting notes'}
+
+
+ )}
{/* Back / Forward navigation */}
{isCollapsed && (
<>
@@ -3352,6 +3362,7 @@ function App() {
}, [loadDirectory, navigateToFile, fileTabs])
const meetingNotePathRef = useRef(null)
+ const [meetingSummarizing, setMeetingSummarizing] = useState(false)
const [showMeetingPermissions, setShowMeetingPermissions] = useState(false)
const startMeetingAfterPermissions = useCallback(async () => {
@@ -3371,6 +3382,7 @@ function App() {
// Read the final transcript and generate meeting notes via LLM
const notePath = meetingNotePathRef.current
if (notePath) {
+ setMeetingSummarizing(true)
try {
const result = await window.ipc.invoke('workspace:readFile', { path: notePath, encoding: 'utf8' })
const fileContent = result.data
@@ -3398,6 +3410,7 @@ function App() {
} catch (err) {
console.error('[meeting] Failed to generate meeting notes:', err)
}
+ setMeetingSummarizing(false)
meetingNotePathRef.current = null
}
} else if (meetingTranscription.state === 'idle') {
@@ -4278,6 +4291,8 @@ function App() {
onNewChat={handleNewChatTab}
onOpenSearch={() => setIsSearchOpen(true)}
meetingState={meetingTranscription.state}
+ meetingSummarizing={meetingSummarizing}
+ meetingAvailable={voiceAvailable}
onToggleMeeting={() => { void handleToggleMeeting() }}
leftInsetPx={isMac ? MACOS_TRAFFIC_LIGHTS_RESERVED_PX : 0}
/>
diff --git a/apps/x/apps/renderer/src/hooks/useMeetingTranscription.ts b/apps/x/apps/renderer/src/hooks/useMeetingTranscription.ts
index e680b033..3fc40cce 100644
--- a/apps/x/apps/renderer/src/hooks/useMeetingTranscription.ts
+++ b/apps/x/apps/renderer/src/hooks/useMeetingTranscription.ts
@@ -12,6 +12,7 @@ const DEEPGRAM_PARAMS = new URLSearchParams({
interim_results: 'true',
smart_format: 'true',
punctuate: 'true',
+ language: 'en',
});
const DEEPGRAM_LISTEN_URL = `wss://api.deepgram.com/v1/listen?${DEEPGRAM_PARAMS.toString()}`;