Problem and my role
After meetings, action items had to be written up, assigned, and chased by hand. I designed and built a system that does it automatically: it records meetings, summarises them, extracts action items, assigns owners, and sends reminders.
Workflow
- A meeting ends and a verified webhook notifies the service.
- The service acknowledges the request quickly and puts the work on a queue, so the AI step never slows the request path.
- A worker takes the transcript, and an LLM extracts the action items and their owners.
- Each extracted task goes to its owner in a chat message to accept or reject.
- Tasks are saved to a central task database and sent to people as direct messages, with reminders based on urgency.
Stack: Python and FastAPI on GCP, with serverless containers, a managed message queue, and a document database.
Controls
- Webhooks are verified before anything is processed.
- Each meeting is processed once, enforced by an atomic lock in the database.
- Retries are capped, and progress is checkpointed.
Testing
Over 100 unit tests run in CI, with external services mocked, covering business logic and third-party failure cases.
For the AI step, I labelled real transcripts by hand to build a golden dataset, calibrated an LLM judge against my labels, and used back-translation: each extracted task is turned back into a plain statement and compared with the transcript, which catches tasks that were invented or distorted.
When it fails
| What can go wrong | Control | What happens |
|---|---|---|
| Duplicate webhook | Atomic lock | The meeting is processed once |
| A third-party service fails | Capped retries | Retries stop at the cap and the failure is logged |
| The service crashes mid-run | Checkpointing | The run resumes instead of restarting |
| A task is missed or invented | Evaluation against labelled data | Measured before changes ship |
| Something breaks and needs diagnosing | Structured logs and monitoring metrics | Shows what failed and where |
Limits
LLM extraction can miss or misassign tasks, which is why I measured it against labelled data instead of trusting it. It also depends on the quality of the transcript.
Result
Manual meeting follow-up was removed: tasks are created, assigned, and reminded automatically, backed by over 100 automated tests.