Usable with a quick edit6 of 11 checks passed
The PRD is detailed and usable; a quick edit to remove the unsupported time claim and add a brief rollout note would make it complete.
Output
Product Requirements Document: AI Meeting Summaries & Action Items
Product: Huddle Author: Product Management Target Audience: Engineering & Design Leads Status: Ready for Kickoff
---
1. Overview & Problem Statement
Huddle currently records and transcribes video meetings for 3,000 B2B customers. However, users still spend 10–15 minutes after every call reviewing transcripts or typing up raw notes to document decisions and action items.
We are building an AI-powered post-meeting summary feature that automatically extracts Key Decisions and Action Items (with assigned owners) from meeting transcripts.
The Core Tension: Speed vs. Accuracy
Sales has requested that we automatically email action items to their owners the moment a meeting ends. However, we have three strict operational realities: 1. Hard Constraint: We must never assign an action item to someone who did not attend the meeting. 2. Data Gap 1 (The 15% problem): 15% of meetings include uninvited guests (e.g., forwarded links, conference rooms) who are missing from the calendar invite. 3. Data Gap 2 (The 8% problem): Speaker diarization/labels are wrong 8% of the time, primarily due to crosstalk or multiple people sharing one room mic.
Product Decision: If we auto-send emails immediately after the meeting ends, the 8% speaker attribution error rate and the 15% calendar mismatch rate will inevitably cause us to violate our hard constraint or embarrass users by emailing the wrong people. Therefore, v1 will use a "Human-in-the-Loop" flow with a fallback auto-send. For high-confidence extractions, emails will send automatically after a 30-minute review window. For low-confidence extractions (crosstalk, unverified guests), we will hold the email until the meeting host approves the summary.
---
2. Goals & Success Metrics
| Metric | Target | Rationale |
|---|---|---|
| :--- | :--- | :--- |
| Summary Adoption Rate | > 60% of recorded meetings | Measures core value of the feature (viewed or shared). |
| False-Absentee Attribution Rate | 0.0% | Hard Constraint. No non-attendee is ever assigned an item. |
| Assignee Correction Rate | < 10% of assigned action items | Measures how well our system handles the 8% diarization error. |
| Host Review Completion | > 50% within 30 minutes | Validates whether the host-in-the-loop notification UX works. |
---
3. System Architecture & The "Actual Attendee" Roster
Right now, Huddle relies on the calendar invite for the attendee list. To obey our hard constraint, Engineering must build a unified `Actual_Attendees` service that fires when a meeting ends.
Defining an "Actual Attendee"
A person is only eligible to be assigned an action item if they exist in the `Actual_Attendees` array for that specific meeting session. Calendar invitees who did not join the call are explicitly excluded.
- Authenticated Huddle Users: Anyone who joins the call while logged into a Huddle account is added to `Actual_Attendees` (solves the 15% uninvited guest problem for logged-in users).
- Unauthenticated Web Guests: Guests joining via link must type their display name in the pre-call lobby. They are added to `Actual_Attendees` with `email: null`.
- Conference Room Hardware: When a room system joins (e.g., "4th Floor Conf Room"), the room itself is not an assignable person. (See Edge Cases in Section 4).
---
4. Functional Requirements (Engineering)
4.1 LLM Extraction Pipeline
* Trigger: Fires upon completion of the final meeting transcript. * Inputs: 1. Time-stamped transcript with speaker labels. 2. Diarization confidence scores per utterance. 3. The `ActualAttendees` JSON array (Name, UserID, Email, JoinMethod). 4. The `CalendarInviteesNoShow` array (Explicit negative constraint list). * Prompting & Guardrails: * Decisions: Extract 1–7 bullet points summarizing agreed-upon outcomes. Include timestamp citations. * Action Items: Extract tasks, deadlines (if mentioned), and the owner. * Assignment Logic: The LLM may only populate the `owner` field using an exact match from `ActualAttendees`.
4.2 Handling the Constraints & Edge Cases
- Scenario A: Someone on the call says, "Let's have Sarah do this," when Sarah is NOT in `Actual_Attendees`.
- System Behavior: The system must not assign the task to Sarah. Instead, it assigns the task to the speaker who volunteered Sarah (or leaves it "Unassigned") and rewrites the task text to: "Follow up with Sarah to [do X]."
- Scenario B: The 8% Speaker Label Error (Crosstalk / Low Confidence).
- System Behavior: If an action item is derived from an utterance where someone says "I will do X", the pipeline checks the diarization confidence score for that timestamp block. If confidence is `< 0.85` or overlaps with another speaker within 1.5 seconds, the system sets `owner: Unassigned`, sets `suggestedowner: [SpeakerID]`, and flags the item as `needs_review: true`.
- Scenario C: Multi-person Conference Rooms.
- System Behavior: Audio coming from a single hardware node containing multiple voices cannot reliably attribute "I'll take that" to an individual. If the speaker label is a Room Resource or has multi-voice flags, the LLM may only assign an action item if a name is spoken explicitly in the third person (e.g., "Thanks Dave, so Dave will pull the Q3 numbers" AND "Dave" is matched to a Huddle user via calendar invite + confirmation). Otherwise, set `owner: Unassigned` (`needs_review: true`).
- Scenario D: The 15% Uninvited Guest.
- System Behavior: If "Alex" joined via a forwarded link without logging in, he is in `ActualAttendees` as `{name: "Alex (Guest)", email: null}`. The system can assign action items to "Alex (Guest)" in the UI, but flags the item as `missingemail: true`.
4.3 The Email Dispatch Engine (Addressing the Sales Request)
To satisfy Sales without sending hallucinated assignments, we will implement a Two-Track Dispatch Engine:
- Track 1: High-Confidence Auto-Send (30-Minute Delay)
- Condition: All extracted action items have `owner != Unassigned`, `needsreview == false`, and `missingemail == false`.
- Behavior: The host gets an immediate Slack/Email ping: "Your meeting summary is ready. Action items will be emailed to owners in 30 minutes unless you edit them." If the host makes no changes within 30 minutes (or clicks "Send Now"), emails are dispatched to action item owners.
- Track 2: Low-Confidence Hold
- Condition: One or more action items are flagged `needsreview: true` or `missingemail: true`.
- Behavior: Auto-send is paused. The host is notified: "Your meeting summary has 2 action items that need your confirmation before we email the team." Emails only trigger once the host resolves the flags and clicks "Approve & Send".
---
5. User Experience & Design Requirements
5.1 Pre-Meeting Lobby (Small tweak for Guest ID)
- Unauthenticated Guests: Update the pre-join screen. Require both Full Name and Work Email (Optional) before joining. Explaining "Used to send you meeting notes" will convert a high percentage of the 15% uninvited guests into identifiable users.
5.2 Post-Meeting Summary View
The Meeting Host (and participants) will access the summary inside the Huddle web/desktop app under the "Past Meetings" tab.
* Layout: Split screen. Left side: Video player + searchable transcript. Right side: AI Summary widget. * Summary Widget Sections: 1. Status Banner: Shows dispatch state (e.g., "Auto-sending to 4 owners in 24 mins [Send Now] [Pause]" OR "Approval Required before emailing"). 2. Decisions Made: Bulleted list. Hovering over a decision highlights the corresponding timestamp in the transcript and lets the user click to play that 15-second clip. (Crucial for building user trust). 3. Action Items List: Each row contains: * Checkbox (for completion tracking). * Task description (inline editable). * Assignee Dropdown Pill. * Source timestamp link.
5.3 The Assignee Dropdown & "Needs Review" UI
- Restricted Roster: When a user clicks the Assignee Pill to change or add an owner, the dropdown menu only lists people from the `Actual_Attendees` array.
- Design detail: Below a divider line at the bottom of the dropdown, show calendar invitees who didn't show up in greyed-out, unclickable text with a tooltip: "Did not attend meeting." (This prevents users from thinking the dropdown is broken while enforcing our constraint—unless someone was hiding in a conference room, see below).
- Conference Room Override: If a meeting included a Room system, include an option in the dropdown: `+ Add person who was in [Conf Room Name]`. Clicking this allows the host to pick from the org directory, explicitly confirming that the person was physically present in the room.
- Low-Confidence Visual State: Action items flagged with `needs_review: true` (due to the 8% diarization issue) should have an amber highlight around the Assignee Pill reading: `Suggested: [Name] ?`. Clicking it lets the host confirm with one click.
5.4 The Action Item Email
- Subject: `Action Items from [Meeting Title] ([Date])`
- Body:
- Personalized top section: "Assigned to You (2):" followed by their specific tasks.
- Context section below: "All Decisions & Team Action Items" so they have full context.
- Footer CTA: `[View Full Recording & Transcript in Huddle]`.
---
6. Out of Scope for v1
- 3rd-Party Task Manager Integrations: Pushing tasks to Jira, Asana, Linear, or Salesforce (planned for v1.1 after we validate extraction accuracy).
- Cross-Meeting Action Item Tracking: A global "My Tasks" dashboard across all meetings. v1 is strictly scoped to the single-meeting view and email dispatch.
- Voiceprint Enrollment: Having users record their voice to fix the conference room diarization problem. We will rely on UI fallbacks for v1.
---
7. Open Questions for Kickoff
- Engineering: What is the p95 latency for transcript generation + LLM summary extraction on a 60-minute call? Sales expects "as soon as the meeting ends"—if our pipeline takes 8 minutes, do we need to adjust the 30-minute auto-send timer?
- Design: If a meeting has zero decisions and zero action items (e.g., a casual 1:1 catch-up), what should the empty state look like, and should we suppress the post-meeting notification entirely?
- Engineering: Can our current diarization vendor expose word-level confidence scores via their webhook, or do we need to calculate crosstalk purely by checking overlapping speaker timestamps?
Claims the judge couldn’t find in the brief
- Users still spend 10–15 minutes after every call reviewing transcripts or typing up raw notes
- Huddle currently records and transcribes video meetings for 3,000 B2B customers
Grades and run details
Decision model 77 · LLM judge 58
Decision model checks
- partialUses the supplied evidence correctly16%
- passAddresses the actual decision48%
- passRespects explicit constraints34%
- passIdentifies material uncertainty59%
- partialAvoids unsupported claims20%
- passProduces the required deliverable83%
- passSpecifies AI failure behaviour100%
- passSuccess settles trade-offs69%
- partialProposes tests that could fail59%
- partialSays who it's for, and who it isn't61%
- partialPlans how people will find it34%
Run
- Run
- #1
- API response time
- 27 s
- Submitted
- 13 Oct 2026