GigWorld is a comprehensive job aggregation platform tailored for freelancers seeking work opportunities. This project scrapes freelancing job listings from multiple popular websites and presents them in a unified, user-friendly interface. It also enables companies to post job openings directly, creating a hybrid marketplace where freelancers can browse both aggregated and direct opportunities.
- ✨ Features
- 🛠️ Tech Stack
- 🏗️ System Architecture
- 🚀 Getting Started
- 📚 API Documentation
- 🤝 Contributing
- 📄 License
- Multi-source Job Aggregation: Automatically scrapes and deduplicates listings from 8+ major platforms (Upwork, Freelancer, Remote.ok, etc.).
- Direct Job Posting: Companies can register and post jobs directly to the platform.
- Unified Freelancer Dashboard: Browse, filter, and apply for jobs all in one place.
- Job Lifecycle Tracking: Automatically tracks job status (new → active → expired) to keep listings fresh.
- Real-time Updates: Get live notifications and updates via Socket.io.
- Robust Authentication: Secure JWT-based authentication and Google OAuth 2.0 integration.
Frontend:
- React.js 18 (Vite)
- Tailwind CSS 3.4
- React Router v6
- Axios & Boxicons
Backend:
- Node.js & Express.js
- MongoDB & Mongoose ORM
- Socket.io (Real-time)
- JWT & bcrypt (Auth)
- Nodemailer & Multer
Scraper:
- Python 3
- BeautifulSoup4 & Requests
- PyMongo
- Scheduled Workers
The system operates in a hybrid micro-architecture where background Python scripts perform scheduled scraping from external sources, populating the central MongoDB database. The Node.js Express backend serves this data via REST API to the React frontend while handling real-time features and direct user interactions.
graph LR
A[Python Scrapers] -->|Upsert Data| B[(MongoDB)]
C[Express Backend] <-->|Read/Write| B
D[React Frontend] <-->|REST / Socket.io| C
E[External Platforms] -->|Scraped by| A
Follow these instructions to set up the project locally for development and testing.
Ensure you have the following installed:
-
Clone the repository:
git clone https://github.com/dev261004/GigWorld.git cd GigWorld -
Backend Setup:
cd backend npm installCreate a
.envfile in thebackend/directory (see Environment Variables).npm run dev
-
Frontend Setup:
cd ../frontend npm installCreate a
.envfile in thefrontend/directory withVITE_API_URL=http://localhost:5000/api/v1.npm run dev
-
Scraper Setup:
cd ../scraper pip install -r requirements.txtCreate a
.envfile withMONGODB_URI.python freelancer.py # To run a specific scraper manually
You will need the following environment variables in your backend/.env file:
MONGODB_URI=mongodb://localhost:27017/gigworld
JWT_SECRET=your_jwt_secret
JWT_EXPIRY=7d
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
PORT=5000
NODE_ENV=developmentHere is a quick overview of the core REST endpoints available in the backend API.
| Endpoint | Method | Description | Auth Required |
|---|---|---|---|
/api/v1/users/register |
POST |
Register a new user (Freelancer/Company) | No |
/api/v1/users/login |
POST |
Authenticate user and get JWT | No |
/api/v1/jobs |
GET |
Get a paginated list of all active jobs | No |
/api/v1/jobs |
POST |
Create a new job post | Yes (Company) |
/api/v1/jobs/:jobId/apply |
POST |
Apply for a specific job | Yes (Freelancer) |
/api/v1/users/profile |
GET |
Get current user's profile | Yes |
For full Request/Response schemas, refer to the Detailed API Docs.
Contributions make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- 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
This project is distributed under the MIT License. See the LICENSE file for more information.
