๐ŸŽ™๏ธ Agents in a Box โ€” Masterclass Resource

Meeting Intelligence

Turn every meeting into searchable data. Auto-capture summaries, action items, attendees, and AI insights โ€” then let your agent prep for the next one.

Three Data Types, One Dashboard

Meeting Intelligence stores three types of records in ops_data. Your agent reads, writes, and cross-references all of them through one API.

๐Ÿ“
Meeting Records
Title, attendees, summary, action items, duration, AI insights, sentiment, source URL
๐Ÿ“Š
Overview KPIs
Total meetings, this week count, open action items, top contacts, top topics
๐Ÿ“…
Calendar Events
Upcoming meetings synced from Google Calendar via Make.com โ€” title, time, attendees, location

From Recording to Intelligence

Meetings flow through an automated pipeline โ€” from webhook capture to searchable intelligence your agent can query.

๐ŸŽ™๏ธ
Fathom Webhook
Meeting ends
โ†’
๐Ÿ’พ
raw_reports
Store payload
โ†’
๐Ÿ”„
Transform
Extract fields
โ†’
๐Ÿ“Š
ops_data
Meeting record
โ†’
๐Ÿ–ฅ๏ธ
Dashboard
Searchable UI

Meeting Record Fields

Every meeting record stored in ops_data follows this shape. Agents read and write these fields via the OpsCenter API.

๐Ÿ“ data.type: "meeting"

titleMeeting name โ€” "Weekly Standup with Engineering"
dateISO timestamp โ€” "2026-02-25T10:00:00Z"
duration_minutesLength in minutes โ€” used to compute duration_display
duration_displayHuman-readable โ€” "45m" or "1h 15m"
attendeesArray of names โ€” ["Alice", "Bob", "Charlie"]
summaryAI-generated markdown summary from Fathom or manual entry
action_itemsArray of {task, assignee, done, playback_url} objects
ai_insightsOne-liner: "45 min meeting with 3 attendees (1 external)"
meeting_typeAuto-classified: 1-on-1, team, sales, external, standup, etc.
sentimentpositive, neutral, or negative
has_external_participantsBoolean โ€” true if non-company domains detected
external_domainsArray of external email domains โ€” ["acme.com", "gmail.com"]
fathom_urlLink back to the Fathom recording page
share_urlPublic shareable link for the meeting summary
recording_idUnique Fathom recording ID โ€” used for deduplication
source"fathom", "manual", or custom source identifier

What the Dashboard Shows

๐Ÿ“Š KPI Cards + Charts

  • Total meetings, this week, open action items
  • Meeting type distribution (donut chart)
  • Monthly trend (bar chart)
  • Avg duration, external meeting %

๐Ÿ” Search + Filters

  • Full-text search across meeting titles
  • Filter by meeting type (13 categories)
  • Date range filters (7d, 30d, 90d, all)
  • External-only and has-action-items toggles

๐Ÿ“‹ Meeting Cards

  • Expandable detail panel per meeting
  • Markdown-rendered summaries (DOMPurify)
  • Action items with playback URLs
  • Attendee initials with color-coded avatars

โšก Feature Pipeline

  • "Send To..." dropdown on each meeting
  • Queue to Action Items, Proposals, Lead Magnets
  • Status tracking: queued โ†’ processing โ†’ complete
  • Error recovery with retry actions

๐Ÿ“‹ Prerequisites

You need a meeting recording tool that sends webhooks. Supported options:

Meeting Recording: Fathom AI (recommended) ยท Fireflies.ai ยท Otter.ai ยท or any tool that exports transcripts + action items via webhook or API.

Calendar Sync (optional): Google Calendar via Make.com scenario for upcoming meeting prep.

๐Ÿ”— Fathom Auto-Sync is Live

When a Fathom meeting finishes, the webhook fires โ†’ report-webhook edge function receives it โ†’ transforms the payload โ†’ inserts into ops_data automatically. No cron job or manual import needed. The bridge function handles deduplication via recording_id.

Build Meeting Intelligence from Scratch

Give this prompt to your AI agent (Claude Code or any agent with ClawBuddy API access) to create the full Meeting Intelligence OpsCenter app โ€” pages, blocks, seed data, and webhook integration.

meeting-intelligence-setup.md
# Meeting Intelligence โ€” Complete Setup & API Reference Build a "Meeting Intelligence" module inside ClawBuddy's OpsCenter. This module tracks all meetings from Fathom AI (or manual entry), stores them as searchable records, shows KPI dashboards, and lets agents query past meetings to prep for upcoming ones. --- ## Step 1: Create the App ```json { "request_type": "ops", "action": "create_app", "name": "Meeting Intelligence", "description": "Track meetings, extract insights, and prep for upcoming calls", "icon": "calendar", "agent_name": "<agent_name>", "agent_emoji": "<agent_emoji>" } ``` Save the returned `app_id` โ€” you'll use it in every subsequent call. --- ## Step 2: Create Pages (Tabs) Create 3 pages for the app: ```json {"request_type": "ops", "action": "create_page", "app_id": "<app_id>", "name": "Dashboard", "sort_order": 1} ``` ```json {"request_type": "ops", "action": "create_page", "app_id": "<app_id>", "name": "Meetings", "sort_order": 2} ``` ```json {"request_type": "ops", "action": "create_page", "app_id": "<app_id>", "name": "Calendar", "sort_order": 3} ``` Save each `page_id`. --- ## Step 3: Create Blocks **Dashboard page:** ```json { "request_type": "ops", "action": "create_block", "page_id": "<dashboard_page_id>", "name": "Overview", "block_type": "meeting_intel", "config": {"metrics": ["total_meetings", "this_week", "action_items_open"]} } ``` **Meetings page:** ```json { "request_type": "ops", "action": "create_block", "page_id": "<meetings_page_id>", "name": "Meeting Feed", "block_type": "feed", "config": {"sortBy": "date", "sortOrder": "desc"} } ``` **Calendar page:** ```json { "request_type": "ops", "action": "create_block", "page_id": "<calendar_page_id>", "name": "Calendar Events", "block_type": "calendar", "config": {} } ``` Save each `block_id`. --- ## Step 4: Seed Overview Record Create one overview record that holds aggregate KPIs. Update this whenever meetings are added. ```json { "request_type": "ops", "action": "add_data", "app_id": "<app_id>", "block_id": "<overview_block_id>", "item_type": "record", "data": { "type": "overview", "total_meetings": 0, "this_week": 0, "action_items_open": 0, "avg_duration": 0, "external_meeting_pct": 0, "top_contacts": [], "top_topics": [], "busiest_day": null, "last_updated": "2026-01-01T00:00:00Z" } } ``` --- ## Step 5: Add a Meeting Record Each meeting is stored as a separate ops_data record: ```json { "request_type": "ops", "action": "add_data", "app_id": "<app_id>", "block_id": "<meeting_feed_block_id>", "item_type": "record", "data": { "type": "meeting", "title": "Sales Call with Acme Corp", "date": "2026-02-25T15:00:00Z", "duration_minutes": 45, "duration_display": "45m", "attendees": ["John from Acme", "You"], "summary": "Discussed enterprise plan. They want custom onboarding...", "action_items": [ {"task": "Send proposal by Friday", "assignee": "You", "done": false}, {"task": "Schedule follow-up demo", "assignee": "John", "done": false} ], "key_decisions": ["They'll pilot with 10 seats"], "ai_insights": "45 min meeting with 2 attendees (1 external)", "meeting_type": "sales", "sentiment": "positive", "has_external_participants": true, "external_domains": ["acme.com"], "source": "manual", "source_url": null, "fathom_url": null, "share_url": null, "recording_id": null } } ``` --- ## Step 6: Query Meetings **List all meetings:** ```json { "request_type": "ops", "action": "list_data", "app_id": "<app_id>", "block_id": "<meeting_feed_block_id>" } ``` **Search by attendee** (filter client-side from list results): Filter where `data.attendees` array includes the target name. **Get upcoming calendar events:** ```json { "request_type": "ops", "action": "list_data", "app_id": "<app_id>", "block_id": "<calendar_block_id>" } ``` --- ## Step 7: Connect Fathom Webhook (Automatic) If using Fathom AI: 1. In Fathom settings, set the webhook URL to: `https://<your-supabase-ref>.supabase.co/functions/v1/report-webhook` 2. The `report-webhook` edge function: - Receives the Fathom payload (title, transcript, action_items, recording_id, etc.) - Stores raw data in `raw_reports` table - Transforms & inserts into `ops_data` as a meeting record (background task) - Deduplicates by `recording_id` 3. Fathom payload fields used: - `title` โ†’ meeting title - `recording_start_time` / `recording_end_time` โ†’ duration - `calendar_invitees` โ†’ attendees + external domain detection - `default_summary.markdown_formatted` โ†’ summary - `action_items` โ†’ action items with playback URLs - `url` โ†’ fathom_url - `share_url` โ†’ shareable link - `recording_id` โ†’ dedup key --- ## Step 8: Connect Google Calendar (Optional) 1. Create a Make.com scenario that fetches Google Calendar events 2. Store the Make.com API token in Supabase secrets as `MAKE_API_TOKEN` 3. The `calendar-sync` edge function pulls events into the Calendar block 4. Each event becomes a `data.type: "calendar_event"` record Calendar event shape: ```json { "type": "calendar_event", "title": "1:1 with CEO", "start": "2026-02-26T14:00:00Z", "end": "2026-02-26T14:30:00Z", "attendees": ["CEO Name"], "location": "Zoom", "notes": "Prep: Review Q1 numbers" } ``` --- ## Step 9: Feature Pipelines The Meeting Intelligence dashboard has a "Send To..." dropdown on each meeting card. This queues the meeting for processing by one of three feature pipelines: | Pipeline | Block Type | What It Does | |----------|-----------|--------------| | Action Items | feed | Extracts all action items, creates standalone tracked items | | Proposals | feed | Generates a client proposal from meeting context | | Lead Magnets | feed | Converts meeting insights into content pieces | Each pipeline item tracks status: `queued` โ†’ `processing` โ†’ `needs_input` โ†’ `complete` The Meeting Intel automation picks up queued items, processes them, and posts results back. --- ## Meeting Types (13 categories) The frontend auto-classifies and color-codes meetings: | Type | Color | Description | |------|-------|-------------| | 1-on-1 | #60a5fa | Two-person meetings | | external | #a78bfa | Has non-company attendees | | sales | #34d399 | Sales calls and demos | | onboarding | #67e8f9 | New client/employee onboarding | | content | #f472b6 | Content planning sessions | | review | #fbbf24 | Code reviews, performance reviews | | team | #fb923c | Internal team meetings | | workshop | #f87171 | Training or workshop sessions | | standup | #818cf8 | Daily standups | | planning | #2dd4bf | Sprint or project planning | | all-hands | #e879f9 | Company-wide meetings | | interview | #a3e635 | Hiring interviews | | group | #94a3b8 | Multi-person general meetings | --- ## Agent Workflows **Morning prep:** 1. List today's calendar events 2. For each event, search past meetings with same attendees 3. Generate a prep brief with context from previous conversations **Post-meeting update:** 1. Wait for Fathom webhook (auto-handled) 2. Update overview KPIs (total count, action items) 3. Alert owner if there are high-priority action items **Weekly digest:** 1. List all meetings from the past 7 days 2. Summarize key decisions and open action items 3. Identify contacts you haven't met with recently

๐Ÿพ Lovable Prompt Lives in LiteKit

The Lovable prompt to build the Meeting Intelligence UI is included in the ClawBuddy LiteKit prompt as TAB 6. It builds as part of the full ClawBuddy app โ€” same design system, same glass-morphic theme. This page focuses on the backend setup and API reference.

🛠️ Starter vs Production

This prompt creates a V1 scaffold. Production requires wiring real data sources, QA passes, error handling, retry logic, and safety gates. Treat the output as a working prototype โ€” not a ship-ready system.