VideoStreamer is a full-stack web application for real-time video meetings, collaborative YouTube watch parties, and secure file sharing. It features Google OAuth authentication, WebRTC-based video calls, live chat, and a modern, responsive UI.
- Google OAuth Login
- Virtual Meetings (WebRTC, video/audio, chat, screen share)
- Watch Party (synchronized YouTube viewing)
- File Transfer (peer-to-peer, chunked, secure)
- Live Chat (in meetings)
- Responsive UI (Material UI, Tailwind)
- User Profiles
flowchart TD
A[User] -->|Login with Google| B(Frontend /login.jsx)
B -->|Redirect| C[http://localhost:4000/api/auth/google]
C -->|OAuth Flow| D[Backend /api/auth/google]
D -->|Google OAuth| E[Google Servers]
E -->|Callback| F[Backend /api/auth/google/callback]
F -->|Set Session, Redirect| G[Frontend]
A -.->|WebRTC, File, Chat| H[Socket.IO Server]
H -->|Video/Audio| I[Other User]
A -->|UI| J[Main Page]
J -->|Navigate| K[Meeting, WatchParty, FileShare]
subgraph Backend
D
F
H
end
subgraph Frontend
B
G
J
K
end
erDiagram
USER ||--o{ MEETING : participates
USER ||--o{ WATCHPARTY : joins
USER ||--o{ FILETRANSFER : sends
USER ||--o{ FILETRANSFER : receives
MEETING ||--o{ CHAT : has
MEETING ||--o{ STREAM : has
USER {
string googleId
string displayName
string email
string photo
}
MEETING {
string roomId
string hostId
string[] participantIds
}
WATCHPARTY {
string partyId
string hostId
string[] memberIds
string videoUrl
}
FILETRANSFER {
string transferId
string senderId
string receiverId
string fileName
int fileSize
}
CHAT {
string messageId
string senderId
string text
date sentAt
}
STREAM {
string streamId
string meetingId
string type
}
flowchart LR
subgraph Frontend
A[Login Page]
B[Main Page]
C[Meeting Page]
D[Watch Party Page]
E[File Share Page]
F[Chat Panel]
end
subgraph Backend
G[Express API]
H[Auth Route]
I[Stream Route]
J[Socket.IO Server]
K[MongoDB]
end
A-->|Google OAuth|H
B-->|API Calls|G
C-->|WebRTC/Socket|J
D-->|Socket|J
E-->|Socket|J
F-->|Socket|J
G-->|DB|K
H-->|DB|K
I-->|Socket|J
J-->|DB|K
- Node.js 18+
- MongoDB 6+
- Redis (for session store)
git clone <repo-url>
cd videostreamer/streamernpm install
cd backend && npm installCreate a .env file in backend/:
SESSION_SECRET=your_session_secret
uri=mongodb://localhost:27017/yourdbname
googleId=your_google_client_id
googleSecret=your_google_client_secret
- Backend:
cd backend node index.js - Frontend:
cd .. npm start
- Visit http://localhost:3000
- Login with Google
- Start or join a meeting, watch party, or file share
GET /api/auth/googleβ Start Google OAuthGET /api/auth/google/callbackβ OAuth callbackGET /api/auth/logoutβ LogoutGET /api/auth/current_userβ Get current user
room-join,otheroom-joinβ Join roomsuser-call,incoming-call,call-acceptedβ WebRTC signalingchat-messageβ Send/receive chatcall-endedβ End callsend-chunk,receive-chunkβ File transfer
/β Main landing page/loginβ Google login/meetinglobbyβ Meeting lobby/meetingβ Video meeting/watchpartyβ Watch party/fileshareβ File sharing
Pull requests welcome! For major changes, open an issue first to discuss what you would like to change.