← Back to Projects

Meeting Notes Agent

LLM-powered meeting summarization with deterministic rendering and audit trails

Role
Solo
Focus
Structured extraction, Schema validation, Traceability
Testing
Golden-case eval, Invariant assertions, Regression suite
Key Patterns
LLM, Reliability, Fastify, Zod
LLMReliabilityFastifyZod

What it does

  • Ingests meeting transcripts (or audio via STT) and produces structured summaries
  • Outputs agenda items, action items, decisions, and key quotes in canonical format
  • Validates all outputs via Zod before they reach consumers
  • Renders deterministically for consistent downstream use

Architecture

┌──────────────────┐     ┌───────────────────┐     ┌──────────────────┐
│  Transcript /    │────►│  Extraction       │────►│  Schema          │
│  Audio (STT)     │     │  Pipeline (LLM)   │     │  Validation      │
└──────────────────┘     └───────────────────┘     │  (Zod)           │
         │                         │               └─────────┬────────┘
         │                         │                         │
         ▼                         ▼                         ▼
┌──────────────────┐     ┌───────────────────┐    ┌──────────────────┐
│  Trace /         │     │  Deterministic    │    │  JSON / Web      │
│  Audit Log       │     │  Renderer         │    │  Output          │
└──────────────────┘     └─────────┬─────────┘    └──────────────────┘
                                  │
                                  ▼

Reliability & Guardrails

  • Zod schema validation catches malformed LLM outputs before they reach consumers
  • Eval harness runs golden-case and invariant checks (e.g., all action items have owners, no empty sections) on every change
  • Trace artifacts support audit and debugging

Key Engineering Decisions

  • Zod for schema validation instead of manual parsingCatches malformed LLM outputs at parse time; single source of truth for types and runtime checks.
  • Deterministic renderer before JSON outputDownstream consumers get stable formatting; avoids drift from prompt changes or model variance.
  • Trace artifacts stored per extraction runAudit trail for compliance; enables debugging without re-running the LLM.

Failure Modes Handled

  • LLM returns invalid JSON or missing required fields — caught by Zod parse
  • Hallucinated action-item owners — invariant check fails in eval harness
  • Empty sections when transcript is sparse — default fallbacks + invariant for non-empty
  • Model downgrade introduces new failure modes — golden cases catch regressions

How to demo in 2 minutes

  1. Clone the repo and install deps: npm install
  2. Set OPENAI_API_KEY in .env
  3. Run the dev server: npm run dev
  4. POST a sample transcript to /api/extract or use the web UI
  5. Inspect the structured output and trace artifacts in the response

Links