Skip to content

A freelancing platform connecting freelancers and clients for tech services. Quolance leverages machine learning to enhance profiles, evaluate proposals, and enforce rules. An LLM-powered chatbot provides FAQs, tips, and guidance to improve user journeys. Quolance aims to promote trust and transparency to help both freelancers and clients.

License

Notifications You must be signed in to change notification settings

abdelh17/Quolance

Repository files navigation

Quolance

Release Demos

Release 1
Release 2

Important files

File Purpose
quolance-ui/src/api/auth-api.ts This code provides an authentication guard that manages user login status, redirects, and handles login/logout actions.
quolance-ui/src/components/role-guard.ts This component provides a role-based access guard that renders child content only if the user's role matches one of the allowed roles.
quolance-api/src/main/java/com/quolance/quolance_api/util/SecurityUtil.java This file is used to recover the authenticated user, in the controllers.
quolance-api/src/main/.../services/business_workflow/impl/FreelancerWorkflowServiceImpl.java Contains the core logic of the application from the freelancer POV
quolance-api/src/main/.../services/business_workflow/impl/ApplicationProcessWorkflowImpl.java Core logic for application processing

Important tests

Test Purpose
getAllProjectsReturnsVisibleProjects() Ensures only visible projects are returned, even closed ones.
updateNotPendingProjectDoesNotUpdateProject() Ensures a project can only be modified in pending state
create_Success() Makes sure new users are able to create a new account, considering all requirements are met
Error Registration Flow This test ensures users receive clear error messages for invalid inputs during registration.
Approve Pending Project Flow This test ensures admins can successfully approve pending projects, enabling freelancers to access them.

Description

This project presents a cutting-edge freelancing platform that connects freelancers and clients who need tech services. Freelancers can create profiles, submit proposals, and communicate with clients, while clients can post projects, review bids, and engage with freelancers. Machine learning models enhance the platform and user experience by improving freelancer profiles, evaluating proposal quality, and enforcing platform rules. An LLM-based chatbot offers more value to users who can find answers to frequently asked questions, as well as tips on how to improve their own journey through Quolance. With a focus on transparency, trust, and skill development, Quolance aims to set a new standard in the Canadian freelancing industry.

Team members

Name Student ID GitHub ID Email
Abdelkader Habel 40209153 abdelh17 [email protected]
Adel Bouchatta 40175598 Itek01 [email protected]
Anes Khadiri 40159080 KA-devl [email protected]
Chems-Eddine Saidi 40192094 ChemsCode [email protected]
Francesco Ferrato 26642152 franf91 [email protected]
Ismail Feham 40213442 FehamIsmail [email protected]
Abdelmalek Anes 40229242 NotMalek [email protected]
Oussama Cherifi 40212275 OussamaCherifi [email protected]
Sathurthikan Saththyvel 40213455 SSathu [email protected]
Zakaria El Manar El Bouanani 40190432 Zakaria0907 [email protected]
Fadi Nimer 40183225 Lukateki [email protected]

Diversity Statement

Quolance is designed to be inclusive and accessible to everyone, regardless of their background, race, gender, age or abilities. We firmly believe that diversity makes our platform stronger and helps us create better solutions for a wide range of users. By embracing and showing that different perspectives and experiences are encouraged, we can ensure that Quolance serves a variety of needs and remains fair to all individuals.

Our system will be user-friendly and accessible to everyone that might want to use the services of Quolance, aiming to break down barriers that might exclude certain groups.

Ultimately, our goal is to build a platform that promotes equality, respect, and positive impact while fostering a community where all users feel valued and supported.

Developer Guide

To get started, follow these steps:

  1. Clone the repository:
    git clone https://github.com/abdelh17/Quolance.git

Frontend Setup

  1. Navigate to the UI directory:

    cd quolance-ui
  2. Install dependencies:

    npm install
  3. Add .env.local file under the quolance-ui directory. It should contain the following:

    NEXT_PUBLIC_BASE_URL=http://localhost:8080
    
  4. Run the frontend:

    npm run dev

Backend Setup

To ease local development, services and dependencies—such as the PostgreSQL database and SMTP server for email—are containerized and automatically set up using the quolance script. You just need docker to be installed and ready!

Prerequisites

Before running the script, ensure the following:

  1. Docker
    Install Docker and ensure it’s running. Download Docker here.

  2. .env File
    Obtain the latest .env file from a teammate and place it in the root of the project at Quolance/.env.
    Alternatively, you can create your own .env file with the following template (replace the values as needed):

    # Database Configuration
    POSTGRES_DB=YOUR_DB_NAME
    POSTGRES_HOST_PORT=YOUR_HOST_PORT
    POSTGRES_CONTAINER_PORT=YOUR_DB_PORT
    LOCAL_DATASOURCE_URL=YOUR_JDBC_URL
    
    # Mail Configuration
    MAILPIT_SMTP_PORT=YOUR_SMTP_PORT
    MAILPIT_UI_PORT=YOUR_SMTP_UI_PORT
    MAILPIT_USER=YOUR_SMTP_USERNAME
    MAILPIT_PASSWORD=YOUR_SMTP_PASSWORD
    
    # Cloudinary Configuration
    CLOUDINARY_CLOUD_NAME=YOUR_CLOUDINARY_CLOUD_NAME
    CLOUDINARY_API_KEY=YOUR_CLOUDINARY_API_KEY
    CLOUDINARY_API_SECRET=YOUR_CLOUDINARY_API_SECRET
    CLOUDINARY_API_ENV_VAR=YOUR_CLOUDINARY_URL
    
    # OAuth2 Configuration
    GITHUB_CLIENT_ID=YOUR_GITHUB_CLIENT_ID
    GITHUB_CLIENT_SECRET=YOUR_GITHUB_CLIENT_SECRET
    GOOGLE_CLIENT_ID=YOUR_GOOGLE_CLIENT_ID
    GOOGLE_CLIENT_SECRET=YOUR_GOOGLE_CLIENT_SECRET
    
    # Admin Configuration
    ADMIN_EMAIL=YOUR_ADMIN_EMAIL
    ADMIN_PASSWORD=YOUR_ADMIN_PASSWORD
    
    # Logging Configuration
    LOG_FILE=YOUR_LOG_FILE_PATH
    
    # JPA Configuration
    DB_DDL_AUTO=YOUR_DB_DDL_AUTO
    

Running the Backend Setup Script

To set up the backend environment, run the following command from the root directory:

  • Windows:
    ./quolance-scripts/quolance.sh
  • Mac/Linux:
    sh ./quolance-scripts/quolance.sh

Script Options

Once you run the script, you’ll see a menu with the following options: image

  1. Create and Start Containers
    Choose option 1 and press Enter to start the containers. After starting, you should see your containers running...

    In the Docker Desktop app: image

    Or by running docker ps in your terminal: image

  2. Stop Containers
    Use option 2 to stop the containers without removing them (ideal if you want to keep your database).

  3. Destroy Containers
    Select option 3 to completely stop and remove the containers, resetting everything.

  4. Exit
    Option 4 exits the script.


Building and Running the Application

Once the containers are running, on your terminal navigate to the quolance-api directory to build and run the backend:

cd quolance-api
./mvnw clean install
./mvnw spring-boot:run -D"spring-boot.run.profiles"=local

Using profile to create a default admin user while building the springboot App

Admin credentials

You can add a profile at your springboot configuration to create an admin user with these credentials

   [email protected]
   ADMIN_PASSWORD=admin

Running with the Profile

  • Option 1: Running the backend with this command ./mvnw spring-boot:run -Dspring-boot.run.profiles=local
  • Option 2: Add the local profile to your intellij config image

Wikis table of contents

About

A freelancing platform connecting freelancers and clients for tech services. Quolance leverages machine learning to enhance profiles, evaluate proposals, and enforce rules. An LLM-powered chatbot provides FAQs, tips, and guidance to improve user journeys. Quolance aims to promote trust and transparency to help both freelancers and clients.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages