convoX is a real-time chat application built with the MERN stack (MongoDB, Express, React, Node.js) and Tailwind CSS. It allows users to communicate seamlessly in real-time through an intuitive interface, designed for a smooth experience across both web and mobile devices.
- Sign up and Log in: Secure user authentication to create new accounts and access chats.
- User Settings: Update user profile pictures.
- Log out: Log out securely for enhanced privacy control.
- Instant Messaging: Send and receive messages in real-time without delays.
- Online Status: View which users are currently online.
- Message Timestamps: Timestamps are added to each message for clarity.
- Persistent Chat History: All chat data is saved and available when users log back in.
- Multiple Chat Rooms: Join or create group chat rooms for real-time discussions.
- Private Messaging: Send direct messages for private conversations.
- Message Notifications: Receive notifications for new, unseen messages.
- Offline Activity Notifications: Get notified about actions that happened while you were offline, such as being added to or removed from a group, or when someone sends a message in your personal or group chats.
- Alert for Removals: Receive notifications when you are removed from contacts or kicked out of a group.
- File Sharing: Share 📁 files, 🖼 images, and 📝 text messages within chats.
- Message Reply: Reply to specific messages, including text, images, and files.
- Media Viewing: View sent images and files directly in the chat.
- Group Management: Change group names and 📸 group pictures.
- Message Deletion: Delete messages with a "This message was deleted" indicator.
- Delete Chats: Remove entire chat histories between you and other users.
- Remove Contacts: Remove someone from your contact list.
- Group Admin Controls: 👑 Admins can remove users, add participants, or delete the group.
- Mobile & Desktop: The application is fully responsive, providing a smooth user experience on both desktop and mobile devices.
- Frontend: React (with Vite) for building a dynamic and interactive UI.
- Backend: Node.js & Express for handling server-side logic.
- Database: MongoDB & Mongoose for managing chat and user data.
- Real-time Communication: Socket.io for enabling real-time messaging.
- Styling: Tailwind CSS for a sleek, responsive design.
- Deployment: Hosted on Render and Vercel for fast, scalable deployment.
The development process began with identifying core features like real-time messaging, chat rooms, and user authentication. The backend was built using Node.js, Express, and MongoDB to manage user data, chat messages, and authentication securely. Real-time messaging functionality was implemented using Socket.io, ensuring smooth communication between users.
The frontend was developed using React and Tailwind CSS to create a clean, responsive, and user-friendly interface. Key challenges included implementing efficient real-time communication and managing global state across different components, which was essential for ensuring a seamless chat experience. A special focus was placed on making the app scalable and user-friendly on both desktop and mobile.
While convoX functions well, it's far from perfect. As with any chat application, there are always features and improvements that can enhance the user experience. Some known areas that could be improved or added include:
- Occasional delay in real-time updates, especially when dealing with large media files.
- More advanced notification options, like custom sounds or muting specific conversations.
- Features such as voice messages, video chats, and richer media sharing are not yet implemented but could significantly improve the user experience.
Contributions are always welcome! If you have suggestions or would like to help make convoX better, feel free to open an issue or submit a pull request on the repository. Your feedback and support are appreciated in making this project even better.
- client: A sample environment file is located in the
client
folder. It includes placeholders for environment variables used by the React application. - server: A sample environment file is located in the
server
folder. It includes placeholders for environment variables used by the Node.js/Express application.
Please make sure to replace the placeholders in these .env.sample
files with your actual values in the .env
files to run the application successfully.
- Navigate to the
client
directory. - Create a
.env
file from the.env.sample
file provided. - Replace the placeholders in the
.env
file with your actual values. - Install the required dependencies by running:
npm install
- Start the development server by running
npm run dev
- Navigate to the
server
directory. - Create a
.env
file from the.env.sample
file provided. - Replace the placeholders in the
.env
file with your actual values. - Install the required dependencies by running:
npm install
- Start the development server by running
npm run start:dev