Skip to content

Latest commit

Β 

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MeetFlow

A full-stack real-time video conferencing platform inspired by Google Meet and Zoom, built using the MERN Stack, Socket.IO, and WebRTC.

MeetFlow enables users to create, join, and schedule meetings, communicate through real-time chat, share screens, and collaborate seamlessly through peer-to-peer video conferencing.


🌐 Live Demo

πŸ”— Live Application: https://meetflow-49z7.onrender.com


Folder Structure

MeetFlow/
β”œβ”€β”€ .gitignore
β”œβ”€β”€ README.md
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ package-lock.json
β”‚   β”œβ”€β”€ package.json
β”‚   └── src/
β”‚       β”œβ”€β”€ config/
β”‚       β”‚   β”œβ”€β”€ cloudinary.js
β”‚       β”‚   β”œβ”€β”€ db.js
β”‚       β”‚   └── firebase-admin.js
β”‚       β”œβ”€β”€ controllers/
β”‚       β”‚   β”œβ”€β”€ auth.controller.js
β”‚       β”‚   └── meeting.controller.js
β”‚       β”œβ”€β”€ lib/
β”‚       β”‚   β”œβ”€β”€ arcjet.js
β”‚       β”‚   β”œβ”€β”€ env.js
β”‚       β”‚   β”œβ”€β”€ generateMeetingCode.js
β”‚       β”‚   β”œβ”€β”€ mailer.js
β”‚       β”‚   └── utils.js
β”‚       β”œβ”€β”€ middleware/
β”‚       β”‚   β”œβ”€β”€ arcjet.middleware.js
β”‚       β”‚   └── auth.middleware.js
β”‚       β”œβ”€β”€ models/
β”‚       β”‚   β”œβ”€β”€ Meeting.js
β”‚       β”‚   └── User.js
β”‚       β”œβ”€β”€ routes/
β”‚       β”‚   β”œβ”€β”€ auth.routes.js
β”‚       β”‚   └── meeting.routes.js
β”‚       β”œβ”€β”€ server.js
β”‚       └── socket/
β”‚           β”œβ”€β”€ roomManager.js
β”‚           └── socket.js
└── frontend/
    β”œβ”€β”€ .gitignore
    β”œβ”€β”€ README.md
    β”œβ”€β”€ eslint.config.js
    β”œβ”€β”€ index.html
    β”œβ”€β”€ package-lock.json
    β”œβ”€β”€ package.json
    β”œβ”€β”€ postcss.config.js
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ App.jsx
    β”‚   β”œβ”€β”€ assets/
    β”‚   β”‚   β”œβ”€β”€ MeetFlow Logo.png
    β”‚   β”‚   └── upcomming1.png
    β”‚   β”œβ”€β”€ components/
    β”‚   β”‚   β”œβ”€β”€ Navbar.jsx
    β”‚   β”‚   β”œβ”€β”€ ProtectedRoute.jsx
    β”‚   β”‚   β”œβ”€β”€ Sidebar.jsx
    β”‚   β”‚   └── dashboard/
    β”‚   β”‚       β”œβ”€β”€ JoinMeetingModal.jsx
    β”‚   β”‚       β”œβ”€β”€ ScheduleMeetingModal.jsx
    β”‚   β”‚       └── ShareMeetingModal.jsx
    β”‚   β”œβ”€β”€ index.css
    β”‚   β”œβ”€β”€ lib/
    β”‚   β”‚   β”œβ”€β”€ axios.js
    β”‚   β”‚   β”œβ”€β”€ firebase.js
    β”‚   β”‚   └── socket.js
    β”‚   β”œβ”€β”€ main.jsx
    β”‚   β”œβ”€β”€ pages/
    β”‚   β”‚   β”œβ”€β”€ DashboardPage.jsx
    β”‚   β”‚   β”œβ”€β”€ HistoryPage.jsx
    β”‚   β”‚   β”œβ”€β”€ LoginPage.jsx
    β”‚   β”‚   β”œβ”€β”€ MeetingRoomPage.jsx
    β”‚   β”‚   β”œβ”€β”€ PersonalRoomPage.jsx
    β”‚   β”‚   β”œβ”€β”€ ProfilePage.jsx
    β”‚   β”‚   β”œβ”€β”€ SignupPage.jsx
    β”‚   β”‚   β”œβ”€β”€ UpcomingPage.jsx
    β”‚   β”‚   └── VerifyEmailPage.jsx
    β”‚   └── store/
    β”‚       β”œβ”€β”€ useAuthStore.js
    β”‚       └── useMeetingStore.js
    β”œβ”€β”€ tailwind.config.js
    └── vite.config.js

✨ Features

πŸ” Authentication & Security

  • JWT Authentication
  • Google Sign-In via Firebase Authentication
  • Secure HTTP-only Cookies
  • Email Verification
  • Protected Routes
  • Arcjet Bot Protection & Rate Limiting
  • Password Hashing using bcrypt

πŸ“… Meeting Management

  • Create Instant Meetings
  • Join Meetings via Meeting Code
  • Schedule Future Meetings
  • Upcoming Meetings Dashboard
  • Meeting History Tracking
  • Personal Meeting Rooms

⚑ Real-Time Collaboration

  • Live Participant Updates
  • Real-Time Chat
  • Join/Leave Notifications
  • Socket.IO Room Management

πŸŽ₯ Video Conferencing

  • Peer-to-Peer Video Calling
  • Audio Calling
  • Multi-Participant Support
  • Camera Toggle
  • Microphone Toggle
  • Leave Meeting Controls

πŸ–₯️ Screen Sharing

  • Share Entire Screen
  • Share Application Window
  • Real-Time Screen Streaming

πŸ› οΈ Tech Stack

Frontend

  • React.js
  • Vite
  • Tailwind CSS
  • Zustand
  • Axios
  • React Router DOM
  • Socket.IO Client
  • Firebase Authentication (Google Sign-In)

Backend

  • Node.js
  • Express.js
  • MongoDB
  • Mongoose
  • Firebase Admin SDK
  • Arcjet
  • Socket.IO

Realtime & Communication

  • WebRTC
  • Socket.IO
  • STUN Servers

Deployment

  • Render
  • MongoDB Atlas
  • GitHub

High-Level Architecture Overview :

high-level-architecture-desgin

Request / Data Flow :

request-data-flow

Backend Architecture :

backend_architecture

Frontend Architecture :

frontend_architecture

WebRTC Signaling Flow (via Socket.IO) :

image

Deployment Architecture :

image

Authentication Routes

All endpoints in this section are prefixed with /api/auth.

Method Endpoint Middleware Controller Description
POST /login Arcjet login Authenticates a user and sets a JWT cookie.
POST /signup Arcjet signup Registers a new user and sets a JWT cookie.
POST /logout Arcjet logout Clears the user's JWT cookie.
POST /google Arcjet google Verifies a Firebase ID token and sets a JWT cookie.
GET /me Arcjet β†’ protectRoute userProfile Retrieves the authenticated user's profile details.
PUT /update-profile Arcjet β†’ protectRoute updateProfile Updates the authenticated user's profile.
GET /verify-email/:token Arcjet verifyEmail Verifies the user's email address via a token link.
POST /resend-verification Arcjet β†’ protectRoute resendVerificationEmail Resends the email verification link.

Meeting Routes

All endpoints in this section are prefixed with /api/meetings.

Method Endpoint Middleware Controller Description
POST /create protectRoute createInstantMeeting Starts an instant meeting.
POST /join protectRoute joinMeeting Joins a meeting using a unique meeting code.
POST /schedule protectRoute scheduleMeeting Schedules a meeting for a future date and time.
GET /upcoming protectRoute getUpcomingMeetings Lists all scheduled upcoming meetings.
GET /history protectRoute getHistoryMeetings Lists all past and ended meetings.
PATCH /:meetingId/end protectRoute endMeeting Ends an active meeting (restricted to the host only).
GET /personal-room protectRoute getPersonalRoom Retrieves details about the user's personal meeting room.
POST /personal-room/join protectRoute joinPersonalRoom Joins a personal meeting room.

Socket.IO Event Reference

The real-time events used for managing meeting rooms, chat messages, and WebRTC peer-to-step connections.

Event Direction Payload Purpose
join-room Client β†’ Server { meetingCode, userId, fullName } Joins a meeting room.
leave-room Client β†’ Server { meetingCode, userId } Leaves a meeting room.
send-message Client β†’ Server { meetingCode, userId, fullName, message } Sends a chat message to the room.
user-joined-alert Server β†’ Client { fullName } Notifies the room that a new user has entered.
user-left-alert Server β†’ Client { fullName } Notifies the room that a user has departed.
new-peer-joined Server β†’ Client { socketId, userId, fullName } Triggers a WebRTC offer to the newly joined peer.
peer-left Server β†’ Client { socketId } Closes the WebRTC connection to a disconnected peer.
participants-updated Server β†’ Client [{ userId, fullName, socketId }] Sends a full roster update of active participants.
receive-message Server β†’ Client { userId, fullName, message, timestamp } Broadcasts an incoming chat message to all room members.
webrtc-offer Bidirectional { targetSocketId/senderSocketId, offer } Relays the Session Description Protocol (SDP) offer.
webrtc-answer Bidirectional { targetSocketId/senderSocketId, answer } Relays the Session Description Protocol (SDP) answer.
webrtc-ice-candidate Bidirectional { targetSocketId/senderSocketId, candidate } Relays Interactive Connectivity Establishment (ICE) candidates.

βš™οΈ Environment Variables

Backend (.env)

PORT=5000
NODE_ENV=development

MONGO_URI=your_mongodb_uri

JWT_SECRET=your_jwt_secret

CLIENT_URL=http://localhost:5173

ARCJET_KEY=your_arcjet_key
ARCJET_ENV=development

CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret

# Gmail SMTP
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_password

# Firebase
FIREBASE_PROJECT_ID=your_firebase_project_id

πŸš€ Getting Started

Prerequisites

  • Node.js (v18 or higher)
  • MongoDB Atlas account
  • Firebase project with Google Sign-In enabled
  • Cloudinary account

Clone Repository

git clone https://github.com/yourusername/MeetFlow.git

cd MeetFlow

Backend Setup

cd backend

npm install

# Create a .env file and fill in the environment variables listed above

npm run dev

Frontend Setup

cd frontend

npm install

npm run dev

⭐ Support

If you found this project helpful, please consider giving it a star ⭐ on GitHub.

About

A full-stack real-time video conferencing platform inspired by Google Meet and Zoom, built using the MERN Stack, Socket.IO, and WebRTC.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages