A full-stack web application for AI-powered meeting assistance using the MERN stack, with real-time transcription, intelligent meeting summaries and monthly knowledge base views powered by modern speech-to-text and language models.
- 🎙️ Real-time Transcription: Transcribe meetings in real-time using Deepgram.
- 📝 AI-Powered Summaries: Automatically generate concise summaries and meeting minutes.
- 📚 Knowledge Base: Store past meetings in MongoDB Atlas and search them using Atlas Vector Search for semantic recall.
- 📅 Monthly View: Showing all meetings from a selected month with detailed analytics.
- 🌍 Multi-language Support: Support multi-language transcription and cultural context adaptation.
- React (with Vite)
- React Router
- Socket.IO Client
- Tailwind CSS
- Axios
- React Hot Toast
- Node.js + Express
- Socket.IO (WebSocket handling)
- MongoDB + Mongoose
- MongoDB Atlas Vector Search
- Deepgram SDK (Speech-to-text)
- OpenAI API (GPT for summarization and task extraction)
- Nodemailer (Email invitations)
- JWT Authentication
- Node.js (v18 or higher)
- MongoDB Atlas account (with Vector Search enabled)
- Deepgram API key
- OpenAI API key
- Email service credentials (SMTP for email invites)
- Navigate to the backend directory:
cd backend- Install dependencies:
npm install- Create a
.envfile in thebackenddirectory:
PORT=5001
NODE_ENV=development
FRONTEND_URL=http://localhost:5173
MONGODB_URI=your_mongodb_atlas_connection_string
JWT_SECRET=your_jwt_secret_here
DEEPGRAM_API_KEY=your_deepgram_api_key
OPENAI_API_KEY=your_openai_api_key
EMAIL_USER=your_gmail@gmail.com
EMAIL_PASSWORD=your_16_char_app_password1. MONGODB_URI=your_mongodb_atlas_connection_string
Create a free MongoDB Atlas cluster, create a database user, then click Connect → Drivers → copy the mongodb+srv:// connection string and paste it here. Replace <password> with your DB user password.
2. JWT_SECRET=your_jwt_secret_here
Any strong random string, e.g. generated via an online UUID generator or openssl rand -hex 32.
3. DEEPGRAM_API_KEY=your_deepgram_api_key
Create a Deepgram account → go to the API Keys section → click Create API Key → copy the key and paste it here.
4. OPENAI_API_KEY=your_openai_api_key
Go to https://platform.openai.com → sign in / sign up → open the API Keys page → click Create new secret key → copy the key once and paste it here.
5. EMAIL_PASSWORD=your_16_char_app_password
→ Enable 2FA: Google Account → Security → 2-Step Verification
→ App Passwords → Mail → "MeetMind" → Generate
→ Copy 16-char password (remove spaces)
→ Set EMAIL_PASSWORD=abcdefghijklmnop in .env
NOTE: This project uses your own OpenAI account so if the free or paid quota is exhausted, in that case you can either:
i. Create a new OpenAI account, generate a fresh API key, and update OPENAI_API_KEY in .env, OR
ii. Add credit / increase quota in your existing OpenAI account.
- Start the backend server:
npm start- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install- Create a
.envfile in thefrontenddirectory:
VITE_API_URL=http://localhost:5001/api
VITE_SOCKET_URL=http://localhost:5001
DEEPGRAM_API_KEY=your_deepgram_api_key- Start the frontend development server:
npm run dev- git clone https://github.com/akansha-02/MeetMind.git
- cd MeetMind/backend && npm install
- cd MeetMind/frontend && npm install
- create backend/.env and frontend/.env ->npm start (backend) | npm run dev (frontend) ->open http://localhost:5173
AI features (transcription, summaries, knowledge base search) require valid Deepgram and OpenAI keys configured in backend/.env as described above.
- Start both backend and frontend servers
- Open your browser and navigate to
http://localhost:5173 - Register a new account or login
- Create a new meeting
- Start recording or upload an audio file
- View real-time transcription
- Complete the meeting to generate AI summaries
- View monthly knowledge base → Filter meetings by month
- Search the knowledge base for context
POST /api/auth/register- Register a new userPOST /api/auth/login- Login userGET /api/auth/me- Get current user (protected)
GET /api/meetings- Get all meetings (protected)GET /api/meetings/:id- Get single meeting (protected)POST /api/meetings- Create meeting (protected)PUT /api/meetings/:id- Update meeting (protected)DELETE /api/meetings/:id- Delete meeting (protected)POST /api/meetings/:id/complete- Complete meeting and generate AI content (protected)POST /api/meetings/:id/process- Process meeting with AI (protected)POST /api/meetings/:id/invite- Send email invites (protected)GET /api/meetings/monthly/:year/:month- Monthly meetings view (protected)
POST /api/transcripts/upload- Upload and transcribe audio file (protected)GET /api/transcripts/:meetingId- Get transcript for meeting (protected)
POST /api/knowledge-base/search- Search knowledge base (protected)GET /api/knowledge-base/monthly/:year/:month- Monthly knowledge base view
join-meeting- Join a meeting roomstart-transcription- Start live transcriptionstop-transcription- Stop live transcriptionaudio-data- Send audio data chunks
joined-meeting- Confirmation of joining meetingtranscription-started- Transcription has startedtranscription-stopped- Transcription has stoppedtranscript-interim- Interim transcription resultstranscript-final- Final transcription resultstranscription-error- Transcription error occurred
MeetMind/
├── backend/
│ ├── src/
│ │ ├── config/ # Configuration files
│ │ ├── controllers/ # Route controllers
│ │ ├── models/ # Mongoose models
│ │ ├── routes/ # Express routes
│ │ ├── services/ # Business logic services
│ │ ├── middleware/ # Express middleware
│ │ ├── socket/ # Socket.IO handlers
│ │ ├── utils/ # Utility functions
│ │ └── server.js # Server entry point
│ └── package.json
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── services/ # API and Socket services
│ │ ├── contexts/ # React contexts
│ │ ├── utils/ # Utility functions
│ │ ├── App.jsx # Main app component
│ │ └── main.jsx # Entry point
│ └── package.json
└── README.md
- Backend runs on
http://localhost:5001 - Frontend runs on
http://localhost:5173
- Backend not starting or login/register failing:
- Ensure
MONGODB_URIandJWT_SECRETare set inbackend/.env. - AI keys (
OPENAI_API_KEY,DEEPGRAM_API_KEY, etc.) are optional; without them, AI features are disabled but auth works. - Check the backend health:
GET http://localhost:5001/api/health. - If port 5001 is in use, free it on Windows:
Get-NetTCPConnection -LocalPort 5001 | Select-Object OwningProcess Stop-Process -Id <PID> -Force
- Ensure
- Frontend cannot reach backend:
- Set
VITE_API_URLinfrontend/.envtohttp://localhost:5001/api. - Verify CORS origin matches
FRONTEND_URLin backend.env.
- Set
ISC
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.