{"id":30619008,"url":"https://github.com/sharmaharshit2000/wexa-smart-helpdesk","last_synced_at":"2026-04-17T06:32:01.620Z","repository":{"id":311928416,"uuid":"1045595518","full_name":"sharmaHarshit2000/wexa-smart-helpdesk","owner":"sharmaHarshit2000","description":"A full-stack helpdesk application with React frontend, Node.js/Express backend, MongoDB database, and Dockerized deployment. Supports user authentication, ticket management, knowledge base articles, and triage services.","archived":false,"fork":false,"pushed_at":"2025-08-27T13:54:49.000Z","size":1097,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-27T22:54:13.565Z","etag":null,"topics":["docer-compose","mern-stack","render","vercel"],"latest_commit_sha":null,"homepage":"https://wexa-smart-helpdesk-omega.vercel.app","language":"JavaScript","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/sharmaHarshit2000.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,"zenodo":null}},"created_at":"2025-08-27T12:29:49.000Z","updated_at":"2025-08-27T14:06:30.000Z","dependencies_parsed_at":"2025-08-27T22:55:16.148Z","dependency_job_id":"1db05f73-9695-4873-893a-4e69ebda8869","html_url":"https://github.com/sharmaHarshit2000/wexa-smart-helpdesk","commit_stats":null,"previous_names":["sharmaharshit2000/wexa-smart-helpdesk"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/sharmaHarshit2000/wexa-smart-helpdesk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharmaHarshit2000%2Fwexa-smart-helpdesk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharmaHarshit2000%2Fwexa-smart-helpdesk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharmaHarshit2000%2Fwexa-smart-helpdesk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharmaHarshit2000%2Fwexa-smart-helpdesk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sharmaHarshit2000","download_url":"https://codeload.github.com/sharmaHarshit2000/wexa-smart-helpdesk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharmaHarshit2000%2Fwexa-smart-helpdesk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272847386,"owners_count":25003183,"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-08-30T02:00:09.474Z","response_time":77,"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":["docer-compose","mern-stack","render","vercel"],"created_at":"2025-08-30T12:16:28.907Z","updated_at":"2025-10-18T03:02:03.762Z","avatar_url":"https://github.com/sharmaHarshit2000.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wexa Smart Helpdesk\n\n[GitHub Repository](https://github.com/sharmaHarshit2000/wexa-smart-helpdesk) | [Frontend (Vercel)](https://wexa-smart-helpdesk-omega.vercel.app/) | [Backend (Render)](https://wexa-smart-helpdesk-ruu6.onrender.com)\n\nA full-stack helpdesk application with React frontend, Node.js/Express backend, MongoDB database, and Dockerized deployment. Supports user authentication, ticket management, knowledge base articles, and triage services.\n\n---\n\n## Table of Contents\n\n- [Project Overview](#project-overview)  \n- [Features](#features)  \n- [Tech Stack](#tech-stack)  \n- [Project Setup](#project-setup)  \n- [Environment Variables](#environment-variables)  \n- [Seeding Data](#seeding-data)  \n- [Running Locally](#running-locally)  \n- [Testing](#testing)  \n- [Docker Deployment](#docker-deployment)  \n- [API Endpoints](#api-endpoints)  \n- [Frontend SPA Routing](#frontend-spa-routing)  \n- [Screenshots](#screenshots)  \n- [License](#license)  \n\n---\n\n## Project Overview\n\nWexa Smart Helpdesk is designed to help organizations manage customer support tickets efficiently. It provides:\n\n- User roles: Admin, Support Agent, Regular User  \n- Knowledge base management  \n- Ticket creation and triage  \n- JWT-based authentication  \n\n---\n\n## Features\n\n- User registration and login  \n- Role-based access control  \n- Create, view, and manage tickets  \n- Knowledge base articles  \n- Automatic ticket triage (stub mode available)  \n- Dockerized backend and frontend for easy deployment  \n\n---\n\n## Tech Stack\n\n- **Frontend:** React, Vite, TailwindCSS  \n- **Backend:** Node.js, Express.js, MongoDB, Mongoose  \n- **Authentication:** JWT  \n- **Testing:** Jest, Supertest  \n- **Deployment:** Docker, Nginx, Render, Vercel  \n\n---\n\n## Project Setup\n\nClone the repository:\n\n```bash\ngit clone https://github.com/sharmaHarshit2000/wexa-smart-helpdesk.git\ncd wexa-smart-helpdesk\n```\n\n### Backend Setup\n```bash\ncd backend\nnpm install\n```\n\n### Frontend Setup\n```bash\ncd ../frontend\nnpm install\n```\n\n---\n\n## Environment Variables\n\nCreate a `.env` file at the root of your project:\n\n```dotenv\n# Backend\nPORT=3001\nMONGO_URI=\u003cyour-mongodb-uri\u003e\nMONGO_URI_TEST=\u003cyour-test-mongodb-uri\u003e\nJWT_SECRET=\u003cyour-secret-key\u003e\nJWT_EXPIRES_IN=7d\nAUTO_CLOSE_ENABLED=true\nCONFIDENCE_THRESHOLD=0.78\nSTUB_MODE=true\n\n# Frontend\nVITE_API_BASE_URL=http://localhost:3001/api\n```\n\n---\n\n## Seeding Data\n\nSeed initial users, articles, and config:\n\n```bash\ncd backend\nnode seed.js\n```\n\nDefault users:\n\n- Admin: `admin@example.com` / `password123`  \n- Agent: `agent@example.com` / `password123`  \n- User: `user@example.com` / `password123`  \n\n---\n\n## Running Locally\n\n### Backend\n```bash\ncd backend\nnpm run dev\n```\n\n### Frontend\n```bash\ncd frontend\nnpm run dev\n```\n\nVisit: [http://localhost:5173](http://localhost:5173)\n\n---\n\n## Testing\n\nRun backend tests:\n\n```bash\ncd backend\nnpm test\n```\n\n---\n\n## Docker Deployment\n\n### Frontend Dockerfile\n\n```dockerfile\n# Build stage\nFROM node:20-alpine AS build\nWORKDIR /app\nCOPY package*.json ./\nRUN npm install\nCOPY . .\nRUN npm run build\n\n# Production stage\nFROM nginx:alpine\nCOPY --from=build /app/dist /usr/share/nginx/html\nCOPY nginx.conf /etc/nginx/nginx.conf\nEXPOSE 80\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\n```\n\n### Nginx Config (`nginx.conf`)\n\n```nginx\nserver {\n    listen 80;\n    server_name localhost;\n\n    root /usr/share/nginx/html;\n    index index.html;\n\n    location / {\n        try_files $uri /index.html;\n    }\n\n    location /api/ {\n        proxy_pass http://backend:3001/;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_cache_bypass $http_upgrade;\n    }\n}\n```\n\n### Running with Docker Compose\n\n```bash\ndocker-compose up --build\n```\n\n---\n\n## API Endpoints\n\n### Auth\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| /api/auth/register | POST | Register a new user |\n| /api/auth/login | POST | Login an existing user |\n| /api/auth/me | GET | Get logged-in user info |\n\n### Tickets\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| /api/tickets | GET | Get all tickets |\n| /api/tickets | POST | Create new ticket |\n| /api/tickets/:id | GET | Get ticket by ID |\n| /api/tickets/:id | PUT | Update ticket by ID |\n| /api/tickets/:id | DELETE | Delete ticket by ID |\n\n### Knowledge Base\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| /api/articles | GET | Get all articles |\n| /api/articles | POST | Create article |\n| /api/articles/:id | GET | Get article by ID |\n| /api/articles/:id | PUT | Update article by ID |\n| /api/articles/:id | DELETE | Delete article by ID |\n\n---\n\n## Frontend SPA Routing\n\nTo avoid 404 Not Found on page reload for React Router paths:\n\nEnsure `nginx.conf` has:\n\n```nginx\nlocation / {\n    try_files $uri /index.html;\n}\n```\n\nAll routes will fallback to `index.html`, preserving SPA routing.\n\n---\n\n## Screenshots\n\nAdd screenshots inside `/screenshots` folder for:\n\n### Home Page\n![Home Page](screenshots/home.png)\n\n### Login / Signup\n![Login Page](screenshots/login.png)\n![Signup Page](screenshots/signup.png)\n\n### Ticket List / Detail\n![Ticket List](screenshots/ticket-list.png)\n![Ticket Detail](screenshots/ticket-detail.png)\n\n---\n\n## License\n\nMIT License","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsharmaharshit2000%2Fwexa-smart-helpdesk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsharmaharshit2000%2Fwexa-smart-helpdesk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsharmaharshit2000%2Fwexa-smart-helpdesk/lists"}