Back to Projects

MeetLog

2026|Lead Architect & Full-Stack Developer|Completed|Full-StackAI/ML
Next.js 16React 19ExpressTypeScriptDrizzle ORMPostgreSQLBetter AuthBullMQAssemblyAIGemini AITailwind CSS v4
MeetLog screenshot 1
MeetLog screenshot 2
MeetLog screenshot 3
MeetLog screenshot 4
MeetLog screenshot 5
MeetLog screenshot 6
MeetLog screenshot 7
MeetLog screenshot 8
MeetLog screenshot 9
MeetLog screenshot 10
MeetLog screenshot 11
MeetLog screenshot 12

// overview

MeetLog turns long, messy meetings into a structured artefact you can actually act on. By uploading an audio file or pasting a raw transcript, the system transcribes the audio, extracts decisions, action items, open questions, blockers, and a summary using Google Gemini, and allows you to push the result to Notion or Slack.

// key features

  • AI Extraction & TranscriptionTranscribes audio using AssemblyAI and extracts decisions, action items, open questions, blockers, and summaries using Google Gemini (with Vertex AI support).
  • Notion & Slack IntegrationsConnect once to push any completed meeting directly to a Notion database with one click, or send formatted summaries and action items to Slack via webhooks.
  • PDF Exports & Share LinksDownload a styled, single-file PDF of any meeting or generate opt-in public URLs to securely share meeting summaries.
  • Action Item TrackingInteractive action items with owners and deadlines that surface in red when overdue, plus single-click completion tracking.
  • Full Transcript SearchIn-page transcript search with prev/next match navigation.
  • Dashboard & AnalyticsDedicated Dashboard, Action Items, and Analytics pages with TanStack-Query-driven caching, offline-friendly behaviour, and Recharts.

// architecture

The application operates as a TypeScript monorepo containing a Next.js 16 App Router frontend and an Express backend powered by Drizzle ORM and PostgreSQL. A BullMQ background worker (backed by Upstash Redis) handles long-running audio transcriptions via AssemblyAI and LLM extraction tasks asynchronously.

// tech decisions

A decoupled monorepo approach allowed independent scaling of the backend API and Next.js frontend. TanStack Query and Zustand were chosen for robust server state management and client state handling. BullMQ was essential for reliably queueing AssemblyAI webhooks and Gemini extraction tasks without holding the HTTP response, while Cloudinary serves as the primary audio storage.

// role

Lead Architect & Full-Stack Developer