{"id":28717950,"url":"https://github.com/seifsheikhelarab/taskwave","last_synced_at":"2026-04-09T22:54:11.156Z","repository":{"id":298193499,"uuid":"995462277","full_name":"seifsheikhelarab/Taskwave","owner":"seifsheikhelarab","description":"Team Project Management Application made using Node.js","archived":false,"fork":false,"pushed_at":"2025-06-09T21:55:43.000Z","size":158,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-09T22:30:34.052Z","etag":null,"topics":["ejs","expressjs","mongodb","nodejs","rest-api"],"latest_commit_sha":null,"homepage":"","language":"EJS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seifsheikhelarab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2025-06-03T14:13:53.000Z","updated_at":"2025-06-09T21:57:39.000Z","dependencies_parsed_at":"2025-06-09T22:40:51.329Z","dependency_job_id":null,"html_url":"https://github.com/seifsheikhelarab/Taskwave","commit_stats":null,"previous_names":["seifsheikhelarab/taskwave"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/seifsheikhelarab/Taskwave","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seifsheikhelarab%2FTaskwave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seifsheikhelarab%2FTaskwave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seifsheikhelarab%2FTaskwave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seifsheikhelarab%2FTaskwave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seifsheikhelarab","download_url":"https://codeload.github.com/seifsheikhelarab/Taskwave/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seifsheikhelarab%2FTaskwave/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259919460,"owners_count":22932073,"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","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":["ejs","expressjs","mongodb","nodejs","rest-api"],"created_at":"2025-06-15T04:08:41.943Z","updated_at":"2026-04-09T22:54:11.144Z","avatar_url":"https://github.com/seifsheikhelarab.png","language":"EJS","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"/public/img/logo.jpeg\" alt=\"TaskWave Logo\" width=\"200\"/\u003e\n\u003c/p\u003e\n\n**TaskWave** is a full-stack, team-based project and task management system. It helps teams manage projects, assign tasks, track progress, and collaborate effectively — all with a focus on best practices, clean structure, and real-world simulation.\n\n---\n\n## 📌 Project Overview\n\nTaskWave is built to simulate a professional collaboration platform. It includes:\n\n- Secure user authentication (including Google OAuth)\n- Role-based access control (Admin, Member, Guest)\n- Task boards and project tracking\n- User invites and notifications\n- RESTful APIs and Swagger docs\n- Email-based password reset and notification system\n\nIdeal for practicing and showcasing full-stack backend development skills using modern technologies.\n\n---\n\n## 🔧 Tech Stack\n\n### Backend\n- **Node.js** + **Express.js** + **Typescript**\n- **MongoDB Atlas** + **Mongoose**\n\n### Authentication \u0026 Security\n- **Passport.js** – Google OAuth2.0\n- **bcrypt** – Password hashing\n- **express-session** + **connect-mongo** – Session management\n- **express-rate-limit** + **rate-limit-mongo** – Brute-force protection\n- **dotenv** – Environment variable management\n- **express-validator** – Server-side validation\n- **method-override** – Support for PUT/PATCH in forms\n\n### Views \u0026 User Interface\n- **EJS** – Templating engine\n- **axios** – Fetching Google profile pictures\n- **HTML+CSS+Bootstrap** - Styling the interface\n\n### Utilities\n- **multer** – Profile picture uploads\n- **nodemailer** – Email notifications and password resets\n- **pino** + **pino-pretty** – Logging\n\n### API Docs \u0026 Testing\n- **swagger-jsdoc** + **swagger-ui-express** – API documentation\n- *(Planned)* **Jest** + **Supertest** – Unit/integration testing\n\n---\n\n## ✨ Features\n\n### 🧑‍💼 Authentication \u0026 Authorization\n- Email/password login with hashed storage\n- Google OAuth 2.0\n- Password reset via email\n- Role-based access (Admin, Member, Guest)\n- Session-based login with persistent cookies\n\n### 🗂️ Project \u0026 Task Management\n- Create and manage multiple projects\n- Add tasks with priority levels\n- Assign tasks to team members\n- Invite other users to collaborate\n\n### 📤 Profile \u0026 Media\n- Upload profile pictures via **Multer**\n- Fetch Google profile photos using **Axios**\n- Edit personal profile info\n\n### 🔐 Security \u0026 Best Practices\n- Environment configs via `.env`\n- Input validation and sanitation\n- Session management and protection\n- Rate limiting to prevent abuse\n\n### 📧 Notifications\n- Project invites via email\n- Task updates via **NodeMailer**\n\n### 📘 API \u0026 Docs\n- RESTful API with meaningful HTTP status codes\n- JSON responses for all API routes\n- Swagger docs hosted at `/api-docs`\n- Plans for public API exposure\n\n---\n\n## 🛠️ Setup Instructions\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/seifsheikhelarab/Taskwave.git\ncd Taskwave\n````\n\n### 2. Install Dependencies\n\n```bash\nnpm install\n```\n\n### 3. Configure Environment Variables\n\nCreate a `.env` file in the root directory with:\n\n```\n# Server Configuration\nPORT = 3000\nNODE_ENV = development\n\n#Session Secret and MongoURI\nSESSION_SECRET = secret\nMONGO_URI = mongodb://localhost:27017/taskwave\n\n# Email Configuration\nSMTP_HOST = host.com\nSMTP_PORT = 587\nSMTP_SECURE = false\nSMTP_USER = user@host.com\nSMTP_PASS = password\nSMTP_FROM = user@host.com\nAPP_URL = http://localhost:3000\n\n# Google OAuth Configuration\nGOOGLE_CLIENT_ID = googleid\nGOOGLE_CLIENT_SECRET = googlesecret\nGOOGLE_REDIRECT_URI = http://localhost:3000/auth/google/callback\n\n```\n\n### 4. Run the App\n\n```bash\nnpm run dev\n```\n\n### 5. Open in Browser\n\nVisit [http://localhost:3000](http://localhost:3000)\n\n---\n\n## 📁 Folder Structure\n\n```\npublic/\n├── avatars/\n├── css/\n├── img/\n└── js/\n\nviews/\n\nsrc/\n├── config/\n├── controllers/\n├── middleware/\n├── models/\n├── routes/\n├── services/\n├── utils/\n├── .env.example\n└── app.ts\n\npackage.json\nREADME.md\ntsconfig.json\n```\n\n---\n\n## 🔮 Roadmap\n\n* [ ] Unit \u0026 integration testing with Jest + Supertest\n* [ ] Deployment to Render or Railway\n* [ ] Public API with token-based access\n* [ ] Dark/light theme toggle\n\n---\n\n## 🧑‍💻 Contributing\n\nContributions are welcome!\nFeel free to fork, submit issues, or create PRs to improve the project.\n\n---\n\n## 📄 License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n---\n\n## 💬 Acknowledgments\n\nBig thanks to the open-source community and the maintainers of the amazing tools powering this project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseifsheikhelarab%2Ftaskwave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseifsheikhelarab%2Ftaskwave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseifsheikhelarab%2Ftaskwave/lists"}