๐ Built with the MERN stack โ because communication should be real-time, simple, and powerful.
PulseTalk is a full-stack real-time communication platform. Chat instantly, call face-to-face, get friend notifications, and even translate messages into 13+ languages โ all in one place.
- โจ Features
- ๐ ๏ธ Tech Stack
- ๐ Project Structure
- ๐ Getting Started
- ๐ Translation Feature
- ๐ Notification System
- ๐ Deployment
- ๐ค Contributing
- ๐จโ๐ป Developer
- ๐ License
- ๐ Secure signup and login with JWT and bcrypt
- ๐ฅ Send, accept, and manage friend requests
- ๐ Real-time bell icon with unread notification count
- ๐ฌ Instant 1-on-1 messaging via Stream Chat
- ๐ Face-to-face video calling via Stream Video
- ๐ Translate messages into 13+ languages instantly
- ๐จ Multiple UI themes via DaisyUI
- ๐ฑ Fully responsive on mobile and desktop
- ๐ฅ Group video calls
- ๐ File and image sharing in chat
- โ Message seen / delivered status
- ๐ End-to-end encryption
- ๐๏ธ Push notifications
- ๐ณ Dockerized deployment
๐ก New to some of these? Here is what each one does in plain English.
- โ๏ธ React.js โ builds all the UI components and pages you see on screen
- ๐ TanStack Query โ fetches data from backend smartly with caching and auto-refetching
- ๐จ Tailwind CSS + DaisyUI โ makes everything look beautiful without writing much CSS
- ๐ฌ Stream Chat React โ ready-made chat UI components like message list and input box
- ๐ผ๏ธ Lucide React โ clean icon library used throughout the app
- ๐งญ React Router โ handles navigation between pages like Home, Chat, and Notifications
- ๐ข Node.js โ runs JavaScript on the server
- ๐ Express.js โ creates all the API routes the frontend talks to
- ๐ MongoDB + Mongoose โ stores all data including users, friend requests, and notifications
- ๐ JWT + bcrypt โ keeps accounts secure by handling login tokens and password hashing
- ๐ก Stream SDK โ powers real-time chat and video calling
PulseTalk/
โ
โโโ ๐ backend/
โ โโโ src/
โ โโโ ๐ controller/
โ โ โโโ auth.controller.js # ๐ Signup, login, logout logic
โ โ โโโ user.controller.js # ๐ฅ Friends and friend request logic
โ โ โโโ notification.controller.js # ๐ Get, count, and mark notifications
โ โ
โ โโโ ๐ models/
โ โ โโโ user.js # ๐ค User data shape in MongoDB
โ โ โโโ FriendRequest.js # ๐ค Friend request data shape
โ โ โโโ Notification.js # ๐ Notification data shape
โ โ
โ โโโ ๐ routes/
โ โ โโโ auth.route.js # /api/auth/*
โ โ โโโ user.route.js # /api/users/*
โ โ โโโ chat.route.js # /api/chat/*
โ โ โโโ notification.route.js # /api/notifications/*
โ โ
โ โโโ ๐ middleware/
โ โ โโโ auth.middleware.js # ๐ก๏ธ Checks if user is logged in
โ โ
โ โโโ ๐ lib/
โ โโโ db.js # ๐ MongoDB connection setup
โ โโโ stream.js # ๐ก Stream Chat client setup
โ
โโโ ๐ frontend/
โ โโโ src/
โ โโโ ๐ pages/
โ โ โโโ HomePage.jsx # ๐ Friend discovery page
โ โ โโโ ChatPage.jsx # ๐ฌ Main chat interface
โ โ โโโ NotificationPage.jsx # ๐ Friend requests and alerts
โ โ โโโ LoginPage.jsx # ๐ Login form
โ โ โโโ SignUpPage.jsx # ๐ Signup form
โ โ
โ โโโ ๐ components/
โ โ โโโ Navbar.jsx # ๐ Top navigation bar with bell icon
โ โ โโโ ChatHeader.jsx # ๐ฌ Chat top bar with home and call buttons
โ โ โโโ CustomMessage.jsx # ๐ Message bubble with translation support
โ โ โโโ LanguageSelector.jsx # ๐ Floating language picker button
โ โ โโโ CallButton.jsx # ๐ Video call trigger button
โ โ โโโ ThemeSelector.jsx # ๐จ UI theme switcher
โ โ
โ โโโ ๐ hooks/
โ โ โโโ useAuthUser.js # ๐ค Gets the current logged in user
โ โ โโโ useNotifications.js # ๐ Handles unread count and mark as read
โ โ โโโ useTranslation.js # ๐ All translation logic with caching
โ โ
โ โโโ ๐ context/
โ โ โโโ TranslationContext.jsx # ๐ Shares language preference across app
โ โ
โ โโโ ๐ lib/
โ โโโ api.js # ๐ก All API call functions in one place
โ โโโ axios.js # โ๏ธ Axios instance with base URL configured
โ
โโโ ๐ README.md
โฑ๏ธ Follow these steps and you will have PulseTalk running in under 10 minutes.
Make sure you have these installed on your machine:
- ๐ข Node.js v18 or higher โ https://nodejs.org
- ๐ MongoDB or a free MongoDB Atlas account โ https://cloud.mongodb.com
- ๐ฆ npm comes included with Node.js
git clone https://github.com/your-username/pulsetalk.git
cd pulsetalkcd backend
npm installCreate a file named .env inside the backend/ folder and add:
PORT=5001
MONGODB_URI=your_mongodb_connection_string
JWT_SECRET_KEY=any_long_random_string_here
STREAM_API_KEY=your_stream_api_key
STREAM_API_SECRET=your_stream_api_secret
NODE_ENV=development๐ก Get your free Stream API keys at https://getstream.io โ takes 2 minutes to sign up.
Start the backend server:
nodemon server.jsYou should see this in the terminal:
๐ Server is running on port 5001
โ
Good to go! MongoDB connected successfully
cd ../frontend
npm installCreate a file named .env inside the frontend/ folder and add:
VITE_STREAM_API_KEY=your_stream_api_key_here
โ ๏ธ Only the API Key goes here. Never put the API Secret in the frontend! The VITE_ prefix is required by Vite to expose the variable to the browser.
Start the frontend:
npm run dev๐ Visit http://localhost:5173 and PulseTalk is live!
PulseTalk has a built-in real-time message translator powered by the free MyMemory API. No API key required โ works out of the box!
1. ๐ฌ Open any chat conversation
2. ๐ Click the floating language button in the bottom right corner
3. ๐๏ธ Select your preferred language from the dropdown
4. โจ All visible messages instantly translate
5. ๐จ New incoming messages auto-translate as well
6. ๐ฌ๐ง Select English to turn translation off
- ๐ญ Lazy loading โ only translates messages currently visible on screen
- ๐พ Caching โ never calls the API for the same message twice
- ๐ Auto-reset โ switching language clears old translations cleanly
- ๐ก๏ธ Fallback โ if translation fails, original message is shown instead
- โ Abort on switch โ cancels in-flight API calls when language changes quickly
๐ฎ๐ณ Hindi ๐ช๐ธ Spanish ๐ซ๐ท French ๐ฉ๐ช German
๐จ๐ณ Chinese ๐ธ๐ฆ Arabic ๐ง๐ท Portuguese ๐ท๐บ Russian
๐ฏ๐ต Japanese ๐ฐ๐ท Korean ๐ฎ๐น Italian ๐ง๐ฉ Bengali
๐ต๐ฐ Urdu
Here is exactly how the notification system works step by step:
๐ค User A sends a friend request
โ
๐พ Backend saves a Notification in MongoDB
โ
๐ User B's bell icon polls for unread count every 10 seconds
โ
๐ด Bell badge updates automatically showing the unread count
โ
๐ User B opens the Notification page
โ
โ
All notifications marked as read โ count resets to zero
โ
๐ Notifications persist after refresh because they live in the database
| Part | Platform | Status |
|---|---|---|
| ๐ฅ๏ธ Frontend | Vercel or Netlify | โณ Coming Soon |
| โ๏ธ Backend | Render or Railway | โณ Coming Soon |
| ๐ Database | MongoDB Atlas | โ Ready |
Contributions are always welcome! Here is how to get started:
# Step 1 โ Fork the project on GitHub
# Step 2 โ Create your feature branch
git checkout -b feature/your-feature-name
# Step 3 โ Make your changes and commit
git commit -m "โจ Add your feature description here"
# Step 4 โ Push to your branch
git push origin feature/your-feature-name
# Step 5 โ Open a Pull Request on GitHubPrashant Kumar
MERN Stack Developer | DSA Enthusiast | Future FAANG Engineer
- ๐ง Email โ prashantk.stu@gmail.com
- ๐ผ LinkedIn โ https://www.linkedin.com/in/prashant-kumar-b82a07380/
- ๐ Portfolio โ Coming Soon
This project is licensed under the MIT License. See the LICENSE file for full details.
โญ If you found this project helpful, please give it a star on GitHub โ it means a lot!
๐ฌ Built with โค๏ธ by Prashant โ because communication should be real-time, simple, and powerful.