Skip to content

Latest commit

 

History

63 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GigWorld Logo

🌍 GigWorld

Your One-Stop Destination for Freelancers

React Node.js MongoDB Python License: MIT


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.

📑 Table of Contents


✨ Features

  • 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.

🛠️ Tech Stack

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

🏗️ System Architecture

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
Loading

🚀 Getting Started

Follow these instructions to set up the project locally for development and testing.

Prerequisites

Ensure you have the following installed:

Installation

  1. Clone the repository:

    git clone https://github.com/dev261004/GigWorld.git
    cd GigWorld
  2. Backend Setup:

    cd backend
    npm install

    Create a .env file in the backend/ directory (see Environment Variables).

    npm run dev
  3. Frontend Setup:

    cd ../frontend
    npm install

    Create a .env file in the frontend/ directory with VITE_API_URL=http://localhost:5000/api/v1.

    npm run dev
  4. Scraper Setup:

    cd ../scraper
    pip install -r requirements.txt

    Create a .env file with MONGODB_URI.

    python freelancer.py  # To run a specific scraper manually

Environment Variables

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=development

📚 API Documentation

Here 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.


🤝 Contributing

Contributions make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📄 License

This project is distributed under the MIT License. See the LICENSE file for more information.

Built with ❤️ by Dev Agrawal

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages