oss project
meeting-note-taker
Self-hosted Fireflies.ai - upload audio, get transcripts, summaries, and action items.
- Turborepo
- React 18
- TypeScript
- Vite
- Tailwind CSS
- Shadcn UI
- TanStack Query
- Socket.io
- Express
- BullMQ
- Drizzle ORM
- Supabase
- OpenAI Whisper
- Google Gemini
- Redis
- Docker
- Turborepo monorepo full-stack app that transcribes uploaded meeting audio with OpenAI Whisper (Google Gemini fallback), summarizes content, and extracts action items.
- Real-time WebSocket progress streaming via Socket.io, Google OAuth, BullMQ job queue with Redis, Drizzle ORM against Supabase Postgres.
- Full-stack TypeScript end-to-end: React 18 + Vite + Tailwind + Shadcn on the front; Express + BullMQ + Drizzle + Socket.io on the back; Supabase auth/storage; Docker for local dev.
Architecture
apps/
web/ React 18 + Vite + Tailwind + Shadcn UI + TanStack Query
api/ Express + BullMQ workers + Socket.io + Drizzle ORM
packages/
shared/ Zod schemas + types
infra/
supabase/ Auth + Postgres + Storage
docker/ Compose stack for local dev
Flow:
- User uploads audio → API persists to Supabase Storage, enqueues a transcription job in BullMQ.
- Worker pulls the job, runs Whisper (with Gemini fallback for long-form), streams progress events over Socket.io.
- On completion, summarization + action-item extraction runs against the transcript.
- UI lights up in real time — no polling, no page refresh.
Built primarily as a personal Whisper testbed - and because paying per-minute for meeting transcription felt wrong.