GupShup is a modern, anonymous video chat platform that connects you with random strangers from around the globe. Inspired by platforms like Omegle, it provides a seamless and engaging way to have spontaneous conversations, share stories, and make new connections in a safe and respectful environment.
The project is built with a modern tech stack, featuring a Next.js frontend and a Node.js/Express backend, all written in TypeScript and containerized with Docker for easy deployment.
- Anonymous Video & Text Chat: Instantly connect with strangers for video and text conversations.
- Random Pairing: Get matched with a new person from anywhere in the world with a single click.
- User Authentication: Secure sign-up, login, and Google OAuth for a personalized experience.
- User Profiles: Manage your account, update your username, and upload a custom avatar.
- Upvote System: Show appreciation for great conversations by upvoting users.
- Real-time Reactions: Express yourself with quick emoji reactions during a chat.
- Media Controls: Easily toggle your camera and microphone.
- Keyboard Shortcuts: Navigate conversations efficiently (
Spacefor next,Vfor video,Mfor mic). - Privacy Focused: No personal data is shared by default. Video and audio tracks are disabled at the start of each chat.
- Community Guidelines: Clear rules and policies to ensure a safe and respectful community.
This project is a monorepo containing the frontend and backend services.
| Service | Technologies |
|---|---|
| Frontend | Next.js, React, TypeScript, Tailwind CSS, Socket.IO Client, WebRTC |
| Backend | Node.js, Express, TypeScript, MongoDB, Redis, Socket.IO, JWT, Passport.js |
| DevOps | Docker, AWS |
To get a local copy up and running, follow these simple steps.
-
Clone the repository
git clone https://github.com/PrathamX595/GupShup.git cd GupShup -
Set up Backend (
gupshup-backend)- Navigate to the backend directory:
cd gupshup-backend - Create a
.envfile from the example and fill in your configuration:cp .env.example .env
- Install dependencies:
npm install
- Navigate to the backend directory:
-
Set up Frontend (
gupshup)- Navigate to the frontend directory:
cd ../gupshup - Create a
.env.localfile and add the backend URL:NEXT_PUBLIC_BACKEND_URL=http://localhost:5000 - Install dependencies:
npm install
- Navigate to the frontend directory:
-
Start the Backend Server
- In the
gupshup-backenddirectory:npm run dev
- The backend will be running on
http://localhost:5000(or your configured port).
- In the
-
Start the Frontend Development Server
- In the
gupshupdirectory:npm run dev
- Open http://localhost:3000 in your browser.
- In the
You can also run the entire stack using Docker.
-
Build the Docker images:
# In the root directory docker build -t gupshup-frontend -f ./gupshup/Dockerfile ./gupshup docker build -t gupshup-backend -f ./gupshup-backend/Dockerfile ./gupshup-backend -
Run the containers: You'll need to create a Docker network and run your database (MongoDB/Redis) containers first, then run the application containers. A
docker-compose.ymlfile would simplify this process.
To run this project, you will need to add the following environment variables to your .env files.
PORT=5000
MONGO_URI=your_mongodb_connection_string
CORS_ORIGIN=http://localhost:3000
ACCESS_TOKEN_SECRET=your_access_token_secret
REFRESH_TOKEN_SECRET=your_refresh_token_secret
ACCESS_TOKEN_EXPIRY=1d
REFRESH_TOKEN_EXPIRY=10d
# Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_CALLBACK_URL=/api/auth/google/callback
# URLs
BASE_URL=http://localhost:5000
FRONTEND_URL=http://localhost:3000
# Nodemailer (for email verification)
MAIL_USER=your_gmail_address
MAIL_APP_PASS=your_gmail_app_password
# Redis
REDIS_URL=redis://your_redis_host:6379
REDIS_PASSWORD=your_redis_password
REDIS_ROOM_SET=available_rooms
NEXT_PUBLIC_BACKEND_URL=http://localhost:5000
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the Apache 2.0 License. See LICENSE for more information.
Pratham - @Pratham_595 - sethpratham67@gmail.com
Project Link: https://github.com/PrathamX595/GupShup
