Skip to content

Commit cd6021b

Browse files
committed
Add autogenerated meeting notes to recordings
- Add NOTES_PROMPT for structured meeting notes generation - Generate notes during transcription using GPT-4o-mini - Display notes section between Extracted Tasks and Transcript - Notes include: Overview, Key Points, Action Items, Details - Custom styling for readable, scannable note formatting
1 parent 57172c5 commit cd6021b

File tree

3 files changed

+69
-0
lines changed

3 files changed

+69
-0
lines changed

src/main/services/transcription-prompts.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,31 @@ For each task, provide a clear title and a description with relevant context fro
2323
If there are no actionable tasks, return an empty tasks array.
2424
2525
Transcript:`;
26+
27+
export const NOTES_PROMPT = `You are a meeting notes generator. You receive raw transcripts and produce structured, scannable notes.
28+
29+
Generate notes in the following markdown format:
30+
31+
## Overview
32+
[2-3 sentence summary: what was this meeting about, what got decided/discussed]
33+
34+
## Key Points
35+
- [main discussion topics, decisions, or conclusions]
36+
- [include specific details: numbers, names, commitments]
37+
- [capture disagreements or open questions]
38+
39+
## Action Items
40+
- [who needs to do what, if clear from context]
41+
- [outstanding questions or follow-ups needed]
42+
43+
## Details
44+
[anything substantive that doesn't fit above - technical specifics, context, tangents that mattered]
45+
46+
Rules:
47+
- Be terse. No fluff.
48+
- Preserve specifics: numbers, quotes, technical terms
49+
- If you're uncertain about something, say "unclear from transcript: [thing]"
50+
- Don't invent structure that isn't there - if there were no action items, say "no explicit action items"
51+
- Prioritize what's ACTIONABLE or DECIDABLE over background chatter
52+
53+
Transcript:`;

src/renderer/features/recordings/components/RecordingDetail.tsx

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
import type { Recording } from "@shared/types";
1515
import { format } from "date-fns";
1616
import { useHotkeys } from "react-hotkeys-hook";
17+
import { MarkdownRenderer } from "../../../components/MarkdownRenderer";
1718
import { useAuthStore } from "../../../stores/authStore";
1819
import { useRecordingStore } from "../stores/recordingStore";
1920
import { AudioPlayer } from "./AudioPlayer";
@@ -137,6 +138,45 @@ export function RecordingDetail({
137138
</>
138139
)}
139140

141+
{recording.transcription?.notes && (
142+
<>
143+
<Separator size="4" />
144+
<Flex direction="column" gap="3">
145+
<Heading size="4">Notes</Heading>
146+
<Card>
147+
<Box
148+
p="3"
149+
style={{
150+
fontSize: "var(--font-size-2)",
151+
lineHeight: "1.6",
152+
}}
153+
className="notes-section"
154+
>
155+
<style>{`
156+
.notes-section h2 {
157+
font-size: var(--font-size-4) !important;
158+
font-weight: 600 !important;
159+
margin-top: 1rem !important;
160+
margin-bottom: 0.5rem !important;
161+
color: var(--gray-12) !important;
162+
}
163+
.notes-section h2:first-child {
164+
margin-top: 0 !important;
165+
}
166+
.notes-section ul {
167+
margin-bottom: 0.75rem !important;
168+
}
169+
.notes-section li {
170+
margin-bottom: 0.25rem !important;
171+
}
172+
`}</style>
173+
<MarkdownRenderer content={recording.transcription.notes} />
174+
</Box>
175+
</Card>
176+
</Flex>
177+
</>
178+
)}
179+
140180
{recording.transcription?.text && (
141181
<>
142182
<Separator size="4" />

src/shared/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ export interface Recording {
158158
status: "processing" | "completed" | "error";
159159
text: string;
160160
summary?: string;
161+
notes?: string; // Structured meeting notes in markdown
161162
extracted_tasks?: Array<{
162163
title: string;
163164
description: string;

0 commit comments

Comments
 (0)