Real-Time Messaging, Instant Connections
Powered by cutting-edge technologies:
Visit the π LINK π
- 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