{"id":18144837,"url":"https://github.com/ahmadyousif89/linkup","last_synced_at":"2025-10-28T01:32:43.192Z","repository":{"id":257968129,"uuid":"868087793","full_name":"AhmadYousif89/linkup","owner":"AhmadYousif89","description":"A realtime chat application | Alx graduation project","archived":false,"fork":false,"pushed_at":"2024-10-23T12:28:19.000Z","size":1485,"stargazers_count":0,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-10T14:38:27.072Z","etag":null,"topics":["expressjs","mongodb","reactjs","redis","socket-io","tailwindcss"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AhmadYousif89.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-05T12:53:16.000Z","updated_at":"2024-10-23T12:28:23.000Z","dependencies_parsed_at":"2024-10-22T04:58:46.168Z","dependency_job_id":null,"html_url":"https://github.com/AhmadYousif89/linkup","commit_stats":null,"previous_names":["ahmadyousif89/linkup"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AhmadYousif89/linkup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmadYousif89%2Flinkup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmadYousif89%2Flinkup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmadYousif89%2Flinkup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmadYousif89%2Flinkup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AhmadYousif89","download_url":"https://codeload.github.com/AhmadYousif89/linkup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AhmadYousif89%2Flinkup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281371746,"owners_count":26489526,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-27T02:00:05.855Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["expressjs","mongodb","reactjs","redis","socket-io","tailwindcss"],"created_at":"2024-11-01T20:06:25.892Z","updated_at":"2025-10-28T01:32:42.843Z","avatar_url":"https://github.com/AhmadYousif89.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# LinkUp Realtime Chat Application\r\n\r\n![hero image](/assets/hero.png)\r\n\r\nLinkUp is a real-time chat application that allows users to create chat rooms and communicate with others in real-time. Users can create accounts, log in, create and join chat groups, and share messages and media. The application is built using **MongoDB**, **Express**, **React**, **Node.js**, and **Socket.io**.\r\n\r\n### Authors\r\n\r\n\u003cspan style=\"color: white;\"\u003e**Malik Hussein**\u003c/span\u003e\r\n[![LinkedIn](https://img.icons8.com/color/16/000000/linkedin-circled.png)](https://www.linkedin.com/in/malikhussein/)\r\n[![GitHub](https://img.icons8.com/color/16/000000/github.png)](https://github.com/Medjai229)\u003cbr/\u003e\r\n\r\n**\u003cspan style=\"color: white;\"\u003e**Mohamed Marzouk**\u003c/span\u003e**\r\n[![LinkedIn](https://img.icons8.com/color/16/000000/linkedin-circled.png)](https://www.linkedin.com/in/mohamed-marzouk-38aa75286/)\r\n[![GitHub](https://img.icons8.com/color/16/000000/github.png)](https://github.com/MMarzoo)\u003cbr/\u003e\r\n\r\n\u003cspan style=\"color: white;\"\u003e**Mahmoud Mohey Eldin**\u003c/span\u003e\r\n[![LinkedIn](https://img.icons8.com/color/16/000000/linkedin-circled.png)](https://www.linkedin.com/in/moodyeg/)\r\n[![GitHub](https://img.icons8.com/color/16/000000/github.png)](https://github.com/MoodyEG)\u003cbr/\u003e\r\n\r\n\u003cspan style=\"color: white;\"\u003e**Ahmad Yousif**\u003c/span\u003e\r\n[![LinkedIn](https://img.icons8.com/color/16/000000/linkedin-circled.png)](https://www.linkedin.com/in/dev-ahmadyousif/)\r\n[![GitHub](https://img.icons8.com/color/16/000000/github.png)](https://github.com/AhmadYousif89)\u003cbr/\u003e\r\n\r\n## The presentation\r\n\r\n[**LinkUp Presentation**](https://docs.google.com/presentation/d/1TitFRNG5WmF0RtF-CoTW61k3OW5bwW5Pr2SIBrvStHY/edit?usp=sharing)\u003cbr/\u003e\r\n\r\n## Video Demo\r\n\r\n[**LinkUp Demo**](https://drive.google.com/file/d/1ab143Nn5-YL-07s-GyXRnoaYx0rVUnb6/view?usp=sharing)\u003cbr/\u003e\r\n\r\n## Features\r\n\r\n- **User Authentication**: Create an account with email/password or social login.\r\n- **Real-time Messaging**: Chat with friends in real-time using WebSockets.\r\n- **Chat Groups**: Create and join chat rooms to communicate with groups.\r\n- **Responsive Design**: Optimized for both desktop and mobile devices.\r\n\r\n## Installation\r\n\r\n### Prerequisites\r\n\r\nEnsure that you have the following installed on your local machine:\r\n\r\n- [Node.js](https://nodejs.org/) (v12.x or above)\r\n- [MongoDB](https://www.mongodb.com/) (set up a local or cloud MongoDB instance)\r\n\r\n### Steps to Run Locally\r\n\r\n1.  Clone the repository:\r\n\r\n    ```bash\r\n    git clone https://github.com/AhmadYousif89/linkup.git\r\n    cd linkup\r\n    ```\r\n\r\n2.  Install dependencies:\r\n\r\n    ```bash\r\n    npm install\r\n    ```\r\n\r\n3.  Set up environment variables:\r\n\r\n    Create a `.env` file in backend directory and add the following variables:\r\n\r\n    ```plaintext\r\n    PORT=5000\r\n    MONGO_URI=mongodb://localhost:27017/linkup\r\n    JWT_SECRET=\u003cyour-secret-key\u003e\r\n    ```\r\n\r\n    Create a `.env` file in client directory and add the following variables:\r\n\r\n    ```plaintext\r\n    VITE_CLERK_PUBLISHABLE_KEY=\u003cyour-publishable-key\u003e\r\n    VITE_SERVER_API=http://localhost:5000/api\r\n    ```\r\n\r\n4.  Start the application:\r\n\r\n    Start the backend server from backend directory:\r\n\r\n    ```bash\r\n    npm start\r\n    ```\r\n\r\n    Start the frontend server from client directory:\r\n\r\n    ```bash\r\n    npm run dev\r\n    ```\r\n\r\n5.  Navigate to `http://localhost:5173` in your browser to start using the application.\r\n\r\n## Future Features\r\n\r\n- **Friend System**: Add friends and see their online status.\r\n- **Multi-media Files Sharing**: Share images, videos, and other files.\r\n- **Voice Calling**: Make voice calls with friends in real-time.\r\n- **Video Calling**: Make video calls with friends in real-time.\r\n- **Screen Sharing**: Share your screen with friends in real-time.\r\n- **Push Notifications**: Get notified when friends send new messages.\r\n- **Dark Mode**: Switch to a dark theme for better readability.\r\n\r\n## Technologies\r\n\r\nThis project leverages modern technologies to deliver real-time communication:\r\n\r\n- **Frontend**: [React](https://reactjs.org/) with state management and dynamic UI.\r\n- **Styling**: [Tailwind CSS](https://tailwindcss.com/) for responsive and modern UI design.\r\n- **Backend**: [Node.js](https://nodejs.org/) + [Express](https://expressjs.com/) for RESTful APIs and routing.\r\n- **Database**: [MongoDB](https://www.mongodb.com/) for storing user data, chats, and rooms.\r\n- **Real-time Communication**: [Socket.io](https://socket.io/) for WebSocket-based real-time messaging.\r\n- **Security**: [JWT](https://jwt.io/) + [Clerk](https://clerk.dev/) for secure authentication and authorization.\r\n- **Testing**: [Postman](https://www.postman.com/) for API testing\r\n\r\n## Usage\r\n\r\n1. **Sign up/Login**: Create an account or log in with existing credentials.\r\n2. **Create/Join Chat Groups**: Create a new chat groups or join an existing one.\r\n3. **Send Messages**: Chat in real-time with friends or group members. Share images, files, and other media.\r\n\r\n## API Documentation\r\n\r\n- **User Endpoints**:\r\n\r\n  1.  `POST /api/user/clerk`\u003cbr/\u003e\r\n      **Function**: Sign-up or Sign-in a user with clerk.\u003cbr/\u003e\r\n      **Request Body**: { id, email, fullName, image }\u003cbr/\u003e\r\n\r\n  2.  `GET /api/user?search=Joe`\u003cbr/\u003e\r\n      **Function**: Search for user using query\u003cbr/\u003e\r\n      **Request Query**: { query.search }\u003cbr/\u003e\r\n\r\n- **Chat Endpoints**:\r\n\r\n  1.  `POST /api/chat/`\u003cbr/\u003e\r\n      **Function**: Views chat with a certain user, requires userId.\u003cbr/\u003e\r\n      **Request Body**: { userId }\u003cbr/\u003e\r\n\r\n  2.  `GET /api/chat/`\u003cbr/\u003e\r\n      **Function**: Search for private chats for the user.\u003cbr/\u003e\r\n\r\n  3.  `GET /api/chat/group`\u003cbr/\u003e\r\n      **Function**: Search for group chats for the user.\u003cbr/\u003e\r\n\r\n  4.  `POST /api/chat/group`\u003cbr/\u003e\r\n      **Function**: Create a new group chat, requires name of the group and user IDs (minimum 3 including the current user).\u003cbr/\u003e\r\n      **Request Body**: { users, name }\u003cbr/\u003e\r\n\r\n  5.  `PUT /api/chat/rename`\u003cbr/\u003e\r\n      **Function**: Rename group chat, requires chatId and chatName.\u003cbr/\u003e\r\n      **Request Body**: { chatId, chatName }\u003cbr/\u003e\r\n\r\n  6.  `PUT /api/chat/groupadd`\u003cbr/\u003e\r\n      **Function**: Add a user to the group, requires chatId and userId (must be in the group).\u003cbr/\u003e\r\n      **Request Body**: { chatId, userId }\u003cbr/\u003e\r\n\r\n  7.  `PUT /api/chat/groupremove`\u003cbr/\u003e\r\n      **Function**: Remove a user from the group, requires chatId, userId, and must be groupAdmin.\u003cbr/\u003e\r\n      **Request Body**: { chatId, userId }\u003cbr/\u003e\r\n\r\n  8.  `DELETE /api/chat/groupdelete`\u003cbr/\u003e\r\n      **Function**: Delete a group, requires chatId and must be groupAdmin.\u003cbr/\u003e\r\n      **Request Body**: { chatId }\u003cbr/\u003e\r\n\r\n  9.  `PUT /api/chat/groupquit`\u003cbr/\u003e\r\n      **Function**: Quit a group, requires chatId.\u003cbr/\u003e\r\n      **Request Body**: { chatId }\u003cbr/\u003e\r\n\r\n  10. `PUT /api/chat/close`\u003cbr/\u003e\r\n      **Function**: Close a chat for a certain user, requires chatId.\u003cbr/\u003e\r\n      **Request Body**: { chatId }\u003cbr/\u003e\r\n\r\n- **Message Endpoints**:\r\n\r\n  1.  `POST /api/message/`\u003cbr/\u003e\r\n      **Function**: Send a message to a user, requires content and chatId.\u003cbr/\u003e\r\n      **Request Body**: { content, chatId }\u003cbr/\u003e\r\n\r\n  2.  `GET /api/message/:chatId`\u003cbr/\u003e\r\n      **Function**:Get all messages in a chat, requires chatId.\u003cbr/\u003e\r\n      **Request Param**: { chatId }\u003cbr/\u003e\r\n\r\n## Contributing\r\n\r\nContributions are welcome! Here's how you can get involved:\r\n\r\n1. Fork the repository.\r\n2. Create a new feature branch (`git checkout -b feature/your-feature`).\r\n3. Commit your changes (`git commit -m 'Add some feature'`).\r\n4. Push to the branch (`git push origin feature/your-feature`).\r\n5. Open a pull request.\r\n\r\nPlease make sure your code follows the project's [code style guidelines](#).\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmadyousif89%2Flinkup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahmadyousif89%2Flinkup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahmadyousif89%2Flinkup/lists"}