Greenwich Village

Loading the illustrated world…

The illustrated world needs JavaScript. This introduction stays available if it cannot load.

Neema Amini

Meetings

Private internal tool

Dark green web app showing a case card for "Tarrow Logistics v. Quenby Freight." Below a two-sentence summary are four attendee chips, then a billing table giving each of four people 0.40 hours: three marked "in FreshBooks," one "to approve." An "Approve and send" button follows, then three next steps: one already in Asana, one ready to send, and one AI-suggested step waiting to be accepted.
One case from a recorded team meeting: the summary, who was in the room, each person's time and where it stands, and the next steps.

All screenshots show fictional sample data. The people, clients, cases, meetings and transcript are invented.

I built Plaud Capture for my law firm. We record our meetings on Plaud recorders. Every 15 minutes, a program on an office Mac picks up new recordings and uses an AI model to split each conversation by case. For each case it writes a short summary, lists the next steps, and drafts a time entry for each person who was there.

Those show up in a web app the attorneys check like an inbox. The rule I built around: it doesn't guess quietly. If it can't tell which case was being discussed, or hears a name it can't match to someone at the firm, it asks, and that time waits until someone answers. Approved time goes to FreshBooks, and follow-ups can be sent to Asana with a click.

Built with

  • Language: TypeScript 5.9, Node.js (≥ 20), npm workspaces
  • Web app: Next.js 16.3, React 19.2, Tailwind CSS 4.3, hosted on Vercel
  • Database, sign-in, file storage: Supabase (Postgres with row-level security; `supabase-js` 2.112, `@supabase/ssr` 0.12), Google Workspace sign-in
  • AI: Anthropic Claude via `@anthropic-ai/sdk` 0.120 to split transcripts by case and draft summaries, next steps and billing lines, with a simpler rule-based parser as the fallback
  • Recordings: Plaud CLI (`@plaud-ai/cli` 0.3.11), polled by a scheduled job (launchd) on a Mac
  • Integrations: FreshBooks API (time entries), Asana API (tasks)
  • Testing: Vitest 3.2; database tests run against PGlite (Postgres compiled to WebAssembly)