- Overview
- Key Features
- Tech Stack
- Project Structure
- Getting Started
- Usage
- API Endpoints
- Real-Time Events
- Deployment
- Contributing
- License
Quick-Chat is a full-stack real-time chat application that enables instant messaging with features like:
- 🔐 Secure user authentication
- ⚡ Real-time message delivery
- 👥 User profiles and status
- 📱 Responsive design for all devices
- 🔄 Message history persistence
- 🔊 Notification system
Built with modern web technologies to deliver a seamless chatting experience.
- Instant message delivery with Socket.io
- Typing indicators
- Online/offline status
- Read receipts
- Clean, modern interface
- Responsive design
- Dark/light mode
- Emoji support
- Message search
- JWT authentication
- Password encryption
- Protected routes
- Session management
- Message history
- User profiles
- Notification system
- Image/file sharing (via Cloudinary)
- React with Vite
- Socket.io-client for real-time updates
- Context API for state management
- Axios for HTTP requests
- Tailwind CSS for styling
- React Icons for beautiful icons
- Node.js with Express
- Socket.io for WebSocket communication
- MongoDB with Mongoose
- JWT for authentication
- Bcrypt for password hashing
- Cloudinary for media storage
- Vercel for frontend hosting
- Render for backend hosting
- GitHub Actions for CI/CD
quick-chat/
├── client/ # Frontend application
│ ├── public/ # Static assets
│ ├── src/
│ │ ├── assets/ # Images, icons
│ │ ├── components/ # Reusable components
│ │ │ ├── ChatContainer.jsx
│ │ │ ├── Sidebar.jsx
│ │ │ └── RightSidebar.jsx
│ │ ├── context/ # Global state
│ │ │ ├── AuthContext.jsx
│ │ │ └── ChatContext.jsx
│ │ ├── lib/ # Utilities
│ │ │ └── utils.js
│ │ ├── pages/ # Route pages
│ │ │ ├── HomePage.jsx
│ │ │ ├── LoginPage.jsx
│ │ │ └── ProfilePage.jsx
│ │ └── ... # Other config files
│
├── server/ # Backend application
│ ├── controllers/ # Business logic
│ │ ├── messageController.js
│ │ └── userController.js
│ ├── lib/ # Utilities
│ │ ├── cloudinary.js
│ │ ├── db.js
│ │ └── utils.js
│ ├── middleware/ # Auth middleware
│ │ └── auth.js
│ ├── models/ # Database models
│ │ ├── Messages.js
│ │ └── User.js
│ ├── routes/ # API routes
│ │ ├── messageRoutes.js
│ │ └── userRoutes.js
│ └── ... # Other server files- Node.js (v18+)
- npm (v9+)
- MongoDB Atlas account or local MongoDB
- Cloudinary account (for media storage)
- Clone the repository:
git clone https://github.com/elyse502/quick-chat.git
cd quick-chat- Install dependencies for both client and server:
# Install client dependencies
cd client && npm install
# Install server dependencies
cd ../server && npm install- Set up environment variables:
Create
.envfiles in bothclientandserverdirectories with required credentials.
Server (.env)
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret_key
CLOUDINARY_CLOUD_NAME=your_cloudinary_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
PORT=5000Client (.env)
VITE_API_BASE_URL=http://localhost:5000
VITE_SOCKET_URL=http://localhost:5000- Start the development servers:
# In one terminal (server)
cd server && npm run dev
# In another terminal (client)
cd client && npm run dev- Register/Login: Create an account or log in
- Find Contacts: Search for other users
- Start Chatting: Select a contact and begin messaging
- Real-Time Updates: See messages appear instantly
- Profile Management: Update your profile picture and status
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register | Register new user |
| POST | /api/auth/login | Login user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/users | Get all users |
| GET | /api/users/:id | Get specific user |
| PUT | /api/users/:id | Update user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/messages/:chatId | Get chat messages |
| POST | /api/messages | Send new message |
new-user- When a user connectssend-message- When sending a messagetyping- When user is typingstop-typing- When user stops typing
receive-message- When receiving a messageuser-connected- When another user connectsuser-typing- When another user is typing
Deploy to Render, Vercel, or other Node.js hosting services with MongoDB connection.
- Fork the repository
- 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 MIT License. See LICENSE for more information.
For any questions or support, please contact:
- NIYIBIZI Elysée👨🏿💻 | Github | Linkedin | Twitter.
- Email: elyseniyibizi502@gmail.com
Quick-Chat - Where conversations happen in real-time! 🚀✨
Made with ❤️ by Elysée NIYIBIZI