← back to blog
building xeve

Auto-Extract Tasks from Meeting Notes — Assign, Track, Complete

5 min read

Meeting notes are where tasks go to die. Someone writes "Kevin to update the API docs" in the action items, and a week later nobody remembers it existed. We built task extraction to fix this.

How It Works

When xeve syncs meeting summaries from your meeting analyzer, it now does three additional things:

  1. Parses each action item using pattern matching — "Name to ...", "Name will ...", "Name - ..." all get extracted into a clean task with the assignee name separated from the task description.
  2. Resolves names to org members by matching first names against your team directory. If "Aadra" appears in an action item and there is exactly one Aadra in your org, the task auto-assigns. If two people share that name, it flags the task as ambiguous for an admin to resolve.
  3. Stores attendees from the meeting, marking external participants (different email domain) so you know who is in your org and who is a client or vendor.

The entire process is idempotent. Re-syncing the same meeting does not create duplicate tasks — it updates existing ones via a unique constraint on the meeting + action item text.

The Tasks Page

Every organization now has a dedicated Tasks page at /org/[slug]/tasks. Admins see all tasks across the org. Regular members see only tasks assigned to them — their personal action item queue from every meeting they were part of.

The page shows four stats at the top: total tasks, open, completed, and completion rate. Below that, a filterable task board lets you filter by status (open, completed, dismissed) and by assignee.

Tasks are grouped by meeting date, so you can see which meeting generated which tasks. Each task shows the assignee with a status badge:

  • Green — completed
  • Yellow — ambiguous assignment (name matched multiple people)
  • Blue — external participant (outside your org domain)
  • Gray — unassigned (no name pattern detected)

Completing Tasks

Every task has an interactive checkbox. Click it to toggle between open and completed. This works on both the Tasks page and inline on the Meetings page where action items now show as interactive checkboxes instead of static bullet points.

The update happens client-side via Supabase with row-level security. Assignees can complete their own tasks. Admins can complete or reassign any task. The RLS policy enforces this at the database level — not just the UI.

Member-Scoped Views

Regular org members (non-admins) now see Meetings and Tasks in their sidebar. But their view is scoped:

  • Meetings page shows only meetings where they were an attendee — matched by their user ID or email in the attendees list.
  • Tasks page shows only tasks assigned to them.

Admins continue to see everything. This means every team member has a personal view of their commitments without seeing the entire org's task load.

Technical Details

The implementation adds two new tables (meeting_tasks and meeting_attendees) plus two new columns on meeting_summaries (title and attendees). The edge function handles all extraction server-side during sync — no client-side parsing needed.

Name resolution uses a simple but effective approach: exact first-name match against org member display names. One match = auto-assign. Zero matches = check attendee emails by name prefix. Multiple matches = flag as ambiguous. This covers 90%+ of real meeting action items where people use first names.

Written by Kevin — builder of xeve

Track your apps, coding, music, and health — all in one place.

try xeve free