This is the parent project for the Freelancer Market, a microservices-based application simulating a freelance marketplace. This repository contains all the services and shared libraries required to run the application.
This project uses Git submodules to manage dependencies. To ensure all modules are cloned correctly, use the --recurse-submodules flag:
git clone --recurse-submodules https://github.com/rahmasir/fm-hubIf you have already cloned the repository without this flag, you can initialize the submodules by running:
git submodule update --init --recursiveThe application follows a distributed microservice architecture. Each service is a self-contained Spring Boot application with its own responsibilities and database schema.
fm-user-service: Handles user registration, authentication (JWT), and profile management.fm-project-service: Manages projects, skills, and applications from freelancers.fm-notification-service: A background worker for sending notifications via RabbitMQ.fm-gateway-service: The single entry point (API Gateway) for all client requests.fm-shared-lib: A common Java library containing shared DTOs and enums.
- Java 21
- Maven
- Docker and Docker Compose
- A Unix-like shell for running
makecommands (Git Bash or WSL on Windows).
To build all modules and install them into your local Maven repository, run the following command from this root directory:
make buildYou can run the application in three modes:
This mode is best for active development and debugging.
- Start Infrastructure: Run the required background services (PostgreSQL, Redis, RabbitMQ):
make up-dev
- Run Services from IDE: Start each microservice (e.g.,
FmUserServiceApplication) directly from your IDE.
This mode is for running and testing the fm-user-service in complete isolation.
- Build and Run: Use a single command to build and start only the user service and its dependencies:
make up-user-only
- Access the Service: The User Service API will be available at
http://localhost:8081.
This mode builds and runs the entire application stack in Docker, simulating a production environment.
- Build and Run: Use a single command to build Docker images for all services and start the containers:
make up-prod
- Access the Application: The API Gateway will be available at
http://localhost:8080.
To stop the full stack, run:
make down-prod