Premium video conferencing application built with modern web technologies, providing a seamless meeting experience for users across devices.
- User Authentication - Secure registration and login system with JWT
- Real-time Video Meetings - High-quality video and audio communication
- Screen Sharing - Share your screen with meeting participants
- In-Meeting Chat - Text communication during video calls
- Meeting Recording - Record meetings with automatic upload to server
- AI-Powered Transcription - Automated transcript generation using OpenAI Whisper
- Meeting History - View all past meetings with recordings and transcripts
- Responsive Design - Works on desktop and mobile devices
- Meeting Security - Only authorized users can join meetings
- Meeting Feedback - Collect user feedback after meetings
- React 19 with TypeScript
- Redux Toolkit for state management
- React Router v7 for navigation
- Socket.io client for real-time communication
- WebRTC for peer-to-peer video streaming
- TailwindCSS v4 for styling
- Material UI v6 components
- Vite v6 for build tooling
- Node.js 20 LTS
- Express.js v4
- MongoDB with Mongoose v8
- Socket.io v4 for WebSocket connections
- JWT for authentication
- bcrypt for password hashing
- FFmpeg for audio/video processing
- OpenAI API for transcription
- Docker with multi-stage builds
- Docker Compose for local development
- Kubernetes (K8s) manifests for production
- AWS ECR for container registry
- Nginx for frontend serving
VIDEO_MEET/
βββ Frontend/ # React frontend application
β βββ src/
β β βββ app/ # Redux store & hooks
β β βββ components/ # Reusable UI components
β β βββ contexts/ # React context providers
β β βββ features/ # Redux slices (media, meeting, participants)
β β βββ pages/ # Application pages
β β βββ routes/ # Routing configuration
β β βββ services/ # Socket service
β β βββ types/ # TypeScript type definitions
β β βββ scripts/ # Utility scripts
β β βββ styles/ # CSS stylesheets
β β βββ utils/ # Helper functions
β βββ Dockerfile # Multi-stage production build
β βββ nginx.conf # Nginx configuration for SPA
βββ Backend/ # Node.js backend application
β βββ src/
β β βββ controllers/ # Request handlers & socket manager
β β βββ models/ # Database models
β β βββ routes/ # API routes
β β βββ services/ # Business logic & transcription
β β βββ middlewares/ # Express middlewares
β β βββ Db/ # Database connection
β βββ uploads/ # Recording & transcript storage
β β βββ recordings/ # Video recordings
β β βββ transcripts/ # Generated transcripts
β βββ Dockerfile # Production-ready container
βββ k8s/ # Kubernetes manifests
β βββ backend-deployment.yaml
β βββ backend-service.yaml
β βββ frontend-deployment.yaml
β βββ frontend-service.yaml
βββ docker-compose.yml # Local development setup
βββ RECORDING_FEATURE.md # Recording feature documentation
- Node.js (v20.x or higher)
- MongoDB (v6.x or higher) or MongoDB Atlas
- npm or yarn
- Docker & Docker Compose (for containerized deployment)
- kubectl (for Kubernetes deployment)
-
Navigate to the backend directory:
cd Backend -
Install dependencies:
npm install
-
Create a
.envfile in the Backend directory:PORT=3000 MONGO_URL=mongodb://localhost:27017/videomeet JWT_SECRET=your_jwt_secret OPENAI_API_KEY=your_openai_api_key # Optional, for transcription
-
Start the server:
npm start
-
Navigate to the frontend directory:
cd Frontend -
Install dependencies:
npm install
-
Create a
.envfile in the Frontend directory:VITE_BASE_URL=http://localhost:3000 VITE_SERVER_URL=http://localhost:3000
-
Start the development server:
npm run dev
-
Create a
.envfile in the root directory:MONGO_URL=mongodb+srv://your-mongodb-atlas-uri JWT_SECRET=your-super-secret-jwt-key OPENAI_API_KEY=your_openai_api_key VITE_BASE_URL=http://localhost:3001 VITE_SERVER_URL=http://localhost:3001
-
Run with Docker Compose:
docker-compose up --build
-
Access the application:
- Frontend: http://localhost
- Backend API: http://localhost:3001
-
Create secrets and configmaps:
# Create backend secrets kubectl create secret generic backend-secrets \ --from-literal=MONGO_URL="your-mongodb-uri" \ --from-literal=JWT_SECRET="your-jwt-secret" # Create ECR pull secret (for AWS ECR) kubectl create secret docker-registry ecr-secret \ --docker-server=851725228571.dkr.ecr.ap-south-1.amazonaws.com \ --docker-username=AWS \ --docker-password=$(aws ecr get-login-password --region ap-south-1)
-
Apply Kubernetes manifests:
kubectl apply -f k8s/
-
Check deployment status:
kubectl get pods kubectl get svc
- Register/Login: Create an account or login with existing credentials
- Create a Meeting:
- Click on "New meeting" button from the home page
- Share the generated meeting link with others
- Join a Meeting:
- Enter the meeting code or link in the input field
- Click "Join" button
- During the Meeting:
- Toggle video/audio using the control buttons
- Share your screen with the screen sharing button
- Use the chat feature to send messages to participants
- Record the meeting using the recording button (host only)
- End the meeting using the red button
- View Meeting History:
- Navigate to the history page from the navbar
- Download recordings and transcripts
- View transcript previews
The application supports meeting recording with AI-powered transcription:
- Start/Stop Recording: Host can control recording during meetings
- Automatic Upload: Recordings are uploaded to the server automatically
- AI Transcription: Generates transcripts using OpenAI Whisper API
- Download Options: Download recordings (WebM/MP4) and transcripts (TXT/VTT)
- History Integration: View all recordings in the meeting history page
See RECORDING_FEATURE.md for detailed documentation.
- JWT authentication for secure API access
- Encrypted password storage with bcrypt
- WebRTC encrypted peer-to-peer connections
- Meeting access validation
- Blacklisted token handling for secure logouts
- Kubernetes secrets for sensitive data
- Non-root container execution
POST /users/register- Register a new userPOST /users/login- Login existing userGET /users/profile- Get user profilePOST /users/logout- Logout userGET /users/history- Get user's meeting historyPOST /users/history- Add meeting to history
POST /meetings/create- Create a new meetingPOST /meetings/join- Join an existing meetingPOST /meetings/leave- Leave a meetingPOST /meetings/end- End a meetingGET /meetings/:meetingId- Get meeting detailsPUT /meetings/:meetingId- Update meeting statusPOST /meetings/:meetingId/recording- Upload recordingGET /meetings/:meetingId/recording- Download recordingPOST /meetings/:meetingId/transcript- Generate transcriptGET /meetings/:meetingId/transcript- Get transcript
The application uses multi-stage Docker builds for optimized production images:
- Frontend:
nginx:alpine(~25MB) - Serves static React build - Backend:
node:20-alpine(~150MB) - Node.js with FFmpeg for transcription
| Resource | Type | Description |
|---|---|---|
| video-meet-backend | Deployment | Backend API server |
| video-meet-frontend | Deployment | Nginx serving React app |
| video-meet-backend | Service (ClusterIP) | Internal backend service |
| video-meet-frontend | Service (LoadBalancer) | External frontend access |
This project is licensed under the MIT License.
- Ananta Chandra Das - Fullstack Developer
We welcome contributions to the VideoMeet project! Here's how you can collaborate:
- Fork the repository
- Clone your fork:
git clone https://github.com/yourusername/VIDEO_MEET.git - Add the original repository as upstream:
git remote add upstream https://github.com/Ananta025/VIDEO_MEET.git - Create a new branch for your feature:
git checkout -b feature/your-feature-name
- Make your changes following the code style guidelines
- Keep your branch updated with upstream:
git pull upstream main - Write tests for your changes when applicable
- Ensure all tests pass before submitting
- Follow the existing coding style in the project
- Use meaningful variable and function names
- Write comments for complex logic
- Follow TypeScript best practices on frontend
- Follow ES6+ standards for backend JavaScript
- Update the README.md with details of changes if applicable
- Push to your fork:
git push origin feature/your-feature-name - Open a pull request against the main branch
- Clearly describe your changes and link any related issues
- Wait for code review and address feedback
- Use the issue tracker to report bugs or suggest features
- Check existing issues before opening a new one
- Provide detailed information when reporting bugs:
- Expected behavior
- Actual behavior
- Steps to reproduce
- Screenshots if applicable
Made with β€οΈ by Ananta
