Module 5: Meeting Review Flow
Know how meeting transcripts become actionable Linear issues.
Estimated time: 10 minutes
The Problem
After every client meeting, someone has to manually extract action items, figure out who's responsible, create Linear issues, and assign them to the right team. This is tedious, error-prone, and often delayed.
The Meeting Review feature automates the extraction and makes issue creation a one-click operation.
The Flow
Notion Database (unprocessed meetings, last 24h)
↓
"Extract meetings" button in platform UI
↓
Backend fetches page blocks → assembles transcript
↓
Claude API extracts action items (forced tool use)
↓
Resolve assignees → Linear user IDs
Resolve teams → Linear team IDs (from meeting title + keywords)
↓
User reviews items in the UI
↓
"Create X issues" → Linear API
↓
Notion pages marked as followed-upStep 1: Extraction
When you click "Extract meetings" in the platform UI, the backend:
- Queries a Notion database for pages where
Followed-up?isfalseandDateis within the last 24 hours - For each meeting page, fetches all block children and concatenates the rich text into a transcript
- Sends each transcript to Claude (
claude-sonnet-4-6) with forced tool use (extract_meeting_items)
Claude extracts only actionable items — not status updates, FYIs, or discussion points. Each item gets:
- Description — concise action text
- Type —
bug,feature,improvement, ortask - Assignee — person name (resolved to a Linear user ID via a lookup map)
Step 2: Team Resolution
The system automatically assigns each item to a Linear team based on two signals:
Meeting Title Matching
The meeting title is matched against patterns to identify the client:
| Pattern | Client |
|---|---|
[Anthos], Anthos...Loop3 | Anthos Capital |
[KV], KV <> L3, Khosla | Khosla Ventures |
Greylock | Greylock |
Loop3, LVL10, L3 | Loop3 internal |
Sub-Team Assignment
Within each client group:
taskitems always go to the parent team (e.g.,Anthos Capital,Khosla Ventures)bug,feature, andimprovementitems are scored against each sub-team's keyword list and assigned to the best match
For example, a bug mentioning "API endpoint" in a Greylock meeting would be routed to [GL] Data Intel BE based on backend keywords.
Step 3: Review in the UI
The Meeting Review page (platform.loop3.ai) shows:
- Meeting cards — one per meeting, with expand/collapse and a badge showing
selected / totalitems - Action items — each row has a checkbox, type emoji, description, assignee, and a team dropdown
- Bulk action bar — fixed at the bottom with "Select all", "Deselect all", and "Create X issue(s)"
As a reviewer, you can:
- Toggle items on/off (unchecked items won't become issues)
- Override the team using the dropdown (the AI pre-selects, but you have final say)
- Create all selected items at once
Step 4: Issue Creation
When you click "Create issues":
- Each selected item becomes a Linear issue via the
issueCreateGraphQL mutation - The issue gets the item's description as title, medium priority, and the selected team/assignee
- After all issues are created, each source meeting is marked as
Followed-up? = truein Notion - The UI shows a success banner with clickable Linear links for every created issue
The Components
| Component | Purpose |
|---|---|
MeetingsPage | Main page — orchestrates extraction, state, and creation |
MeetingCard | Expandable card per meeting with item count badge |
ActionItem | Single action item row with checkbox, type, assignee, team |
TeamSelect | Dropdown with all 13 Linear teams, AI pre-selected |
BulkActionBar | Fixed bottom bar with select all / create buttons |