MeetingMind is an open-source, fully-automated AI Meeting Assistant. It acts as your personal invisible notetaker: automatically joining your Google Meets using a headless bot, recording the session, generating word-level transcripts with speaker diarization, and giving you an interactive "Spotify-like" dashboard to playback and query your meetings using AI.
Think of it as an open-source alternative to Fathom, Fireflies.ai, or Otter.ai.
- 🤖 Automated Bot Worker: A headless Puppeteer-based worker that silently joins your Google Meets when invited via the Chrome Extension.
- 🎙️ High-Fidelity Recording: Direct audio/video stream capturing uploaded securely and reliably to AWS S3.
- 📝 Blazing Fast Transcripts: Powered by Deepgram AI, delivering highly accurate speaker-diarized text with exact word-level timestamping.
- 🎵 Synced Video Playback UI: A premium dashboard featuring a custom video player. Click any word in the transcript to jump the video to that exact moment.
- 💬 Context-Aware AI Chat: Ask questions, generate summaries, or pull action items from your meeting transcript directly inside the dashboard using Gemini/OpenAI.
- 🔗 1-Click Chrome Extension: A custom extension injected into your Google Meet UI allows you to invite the bot with a single button press.
MeetingMind is composed of four distinct microservices, communicating via PostgreSQL and Redis for robust distributed queuing.
/frontend(Next.js 14, React, Tailwind CSS): The beautiful, premium user dashboard. Features the complex synced video player, shareable links, and AI Chat UI./backend(Node.js, Express, Drizzle ORM): The central nervous system. Manages authentication, database operations, securely signs URLs for AWS S3 fetching, and hosts the REST API./bot-worker(Node.js, Puppeteer): The heavy lifter. A scalable consumer that reads from a Redis queue. It opens Google Chrome headlessly, joins the Meet, records the DOM/Canvas, processes the.webmfile, and talks to Deepgram for transcripts./meetingmind-extension(Manifest v3, Vanilla JS): A lightweight browser extension that reads your active Google Meet URL and sends a payload to the backend to add a job to the Redis queue.
- Node.js: v18 or higher
- PostgreSQL: A running instance (local or cloud like Supabase/Neon).
- Redis: A running instance for BullMQ queues (local or cloud like Upstash).
- AWS S3: An S3 bucket with proper IAM write credentials configured.
- Deepgram API Key: For transcription.
- Google OAuth Credentials: For the user Sign-In system.
Navigate to the /backend folder.
cd backend
npm installCreate a .env file in the /backend directory:
PORT=5000
DATABASE_URL="postgresql://user:pass@localhost:5432/meetingmind"
FRONTEND_URL="http://localhost:3000"
JWT_SECRET="your_secret_string"
AWS_ACCESS_KEY_ID="your_aws_key"
AWS_SECRET_ACCESS_KEY="your_aws_secret"
AWS_REGION="us-east-1"
AWS_BUCKET_NAME="your-bucket-name"
REDIS_HOST="127.0.0.1"
REDIS_PORT=6379
GOOGLE_CLIENT_ID="your_google_id.apps.googleusercontent.com"Push the database schema using Drizzle and start the server:
npx drizzle-kit push --config=drizzle.config.js
npm run devNavigate to the /frontend folder.
cd frontend
npm installCreate a .env.local file in the /frontend directory:
NEXT_PUBLIC_API_URL="http://localhost:5000"
NEXT_PUBLIC_GOOGLE_CLIENT_ID="your_google_id.apps.googleusercontent.com"Start the Next.js application:
npm run devThe dashboard is now running on http://localhost:3000.
Navigate to the /bot-worker folder.
cd bot-worker
npm installCreate a .env file in the /bot-worker directory:
DATABASE_URL="postgresql://user:pass@localhost:5432/meetingmind"
AWS_ACCESS_KEY_ID="your_aws_key"
AWS_SECRET_ACCESS_KEY="your_aws_secret"
AWS_REGION="us-east-1"
AWS_BUCKET_NAME="your-bucket-name"
REDIS_HOST="127.0.0.1"
REDIS_PORT=6379
DEEPGRAM_API_KEY="your_deepgram_key"
GEMINI_API_KEY="your_gemini_key"Start the headless bot worker:
npm run devTo easily invite the bot to your meetings:
- Open Google Chrome and navigate to
chrome://extensions/. - Turn on Developer mode in the top right corner.
- Click Load unpacked in the top left.
- Select the
/meetingmind-extensionfolder. - Make sure the
config.jsfile inside the extension points to your local backend (http://localhost:5000).
Deploying the frontend (Vercel) and backend (Render/Heroku) is standard. However, deploying the Bot Worker requires specific dependencies because it runs a full headless Chrome browser instance via Puppeteer.
If you are deploying the bot worker to a Linux VPS (like DigitalOcean, AWS EC2, or Hetzner), you must install the necessary OS-level dependencies for Chrome.
- SSH into your server.
- Install Node.js, Redis, and clone the repository.
- Install the required Chrome dependencies:
sudo apt-get update
sudo apt-get install -yq \
gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \
libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 \
libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 \
libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 \
libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \
libxtst6 ca-certificates fonts-liberation libnss3 lsb-release \
xdg-utils wget- Navigate to
/bot-worker, runnpm install, populate your.envfile, and start the process using a manager likepm2:
npm install -g pm2
pm2 start src/index.js --name "meetingmind-bot"Alternatively, you can Dockerize the bot worker using a base image that already contains Puppeteer dependencies (e.g., ghcr.io/puppeteer/puppeteer:latest).
Contributions are welcome! If you find a bug, want to add styling updates, or want to expand the AI integration (e.g., adding Anthropic support), feel free to open a Pull Request.
This project is open-source and available under the MIT License.