Enterprise-grade freelance marketplace platform built with microservices architecture, featuring real-time chat, payment processing, and comprehensive monitoring.
# Clone the repository
git clone https://github.com/DevGbolade/job-platform-API.git
cd job-platform-API
# Bootstrap everything (install dependencies + start services)
make bootstrap
# Or start individual components
make infrastructure # Start databases, RabbitMQ, Elasticsearch
make services # Start all microservices
make monitoring # Start monitoring stack- Overview
- Architecture
- Features
- Shared Packages
- Prerequisites
- Installation
- Development
- Deployment
- Documentation
- Contributing
- License
Jobber is a full-featured freelance marketplace platform that connects clients with skilled professionals. Built using a microservices architecture with Node.js, TypeScript, and modern DevOps practices.
- π Secure Authentication - JWT-based auth with email verification
- πΌ Gig Marketplace - Create, search, and manage service listings
- π¬ Real-time Chat - WebSocket-based messaging between users
- π³ Payment Processing - Integrated Stripe payment system
- β Review System - Ratings and reviews for sellers and gigs
- π Full Observability - ELK stack, APM, Prometheus, Grafana
- π Cloud Native - Kubernetes-ready with Docker containers
- π Event-Driven - Asynchronous communication via RabbitMQ
| Service | Port | Stack | Database | Description |
|---|---|---|---|---|
| Gateway | 4000 | Express, Socket.IO | Redis | API Gateway & WebSocket hub |
| Auth | 4002 | Express, Sequelize | MySQL | User authentication |
| Users | 4003 | Express, Mongoose | MongoDB | Buyer/Seller profiles |
| Gig | 4004 | Express, Mongoose | MongoDB | Service listings |
| Chat | 4005 | Socket.IO, Mongoose | MongoDB | Real-time messaging |
| Order | 4006 | Express, Stripe | MongoDB | Order management |
| Review | 4007 | Express, pg | PostgreSQL | Ratings & reviews |
| Notification | 4001 | Nodemailer, AMQP | - | Email notifications |
Backend: Node.js 18+, TypeScript 5.2, Express.js
Databases: MySQL 8.0, MongoDB, PostgreSQL, Redis
Message Queue: RabbitMQ (AMQP)
Search & Logging: Elasticsearch 8.12, Kibana
Monitoring: APM Server, Metricbeat, Heartbeat, Prometheus, Grafana
Payments: Stripe
File Storage: Cloudinary
Containers: Docker, Docker Compose
Orchestration: Kubernetes (AWS EKS)
- Browse and search for services
- Real-time chat with sellers
- Secure payment processing
- Order tracking and management
- Leave reviews and ratings
- Create and manage gig listings
- Receive and manage orders
- Real-time notifications
- Earnings tracking
- Profile and portfolio management
- Advanced search with Elasticsearch
- Real-time WebSocket communication
- Event-driven architecture
- Comprehensive logging and monitoring
- Auto-scaling capabilities
- CI/CD pipeline ready
This monorepo uses npm workspaces to manage shared code across all microservices:
Provides type-safe interfaces and utilities used across all services:
- Interfaces:
IAuth,IBuyer,ISeller,IGig,IOrder,IReview,IChat - Utilities: Logger, error handlers, validation helpers
- Middleware: Authentication, request verification
// Used in all services
import { IAuth, winstonLogger, BadRequestError } from '@devgbolade/jpa-npm';Handles all email communications via RabbitMQ:
- Email verification
- Password reset
- Order notifications
- System alerts
π Complete Guide: See SHARED-PACKAGES.md for detailed setup instructions.
- Docker Desktop 24.0+ (Download)
- Node.js 18.x LTS (Download)
- npm 9.x or yarn 1.22.x
- Git 2.40+
- Make (pre-installed on macOS/Linux)
- Stripe Account (Sign up)
- Cloudinary Account (Sign up)
- SMTP Provider (Gmail, SendGrid, or Ethereal for dev)
- Development: 4 CPU cores, 8GB RAM, 20GB storage
- Production: 16+ CPU cores, 32GB+ RAM, 100GB+ storage
git clone https://github.com/DevGbolade/job-platform-API.git
cd job-platform-APImake check-depsmake installThis installs npm packages for all 8 microservices.
Create .env files for each service:
# Example for gateway service
cd 1-gateway-service
cp .env.example .env
# Edit .env with your configurationSee Environment Variables for complete configuration.
make infrastructureThis starts:
- Redis (cache & sessions)
- MongoDB (document store)
- MySQL (auth database)
- PostgreSQL (reviews database)
- RabbitMQ (message queue)
- Elasticsearch (search & logging)
make setup-kibana
# Follow the instructions to update docker-compose.yaml
cd volumes && docker compose up -d kibanamake servicesmake healthAll services should return β status.
# Start everything
make start
# View all logs
make logs
# View specific service logs
make logs-service SERVICE=gateway
# Check service status
make status
# Health check all services
make health
# Stop all services
make stop
# Restart everything
make restartFor active development with live logs:
# Start all services in tmux
make dev
# Attach to tmux session
make dev-logs
# Navigate between windows: Ctrl+b then 0-7
# Detach: Ctrl+b then d
# Stop all dev services
make dev-stopmake db-connect-mysql # MySQL CLI
make db-connect-mongo # MongoDB Shell
make db-connect-postgres # PostgreSQL CLI
make db-connect-redis # Redis CLI# Run all tests
make test
# Test specific service
make test-service SERVICE=gatewaymake db-backupBackups saved to ./backups/
# Start in production mode
make prod
# Scale a service
make scale SERVICE=gateway REPLICAS=3See Kubernetes Setup Guide for complete instructions.
cd jobber-k8s
# Create EKS cluster
./eks-setup.sh
# Configure kubectl
aws eks update-kubeconfig --region eu-central-1 --name jobberapp
# Deploy infrastructure
kubectl apply -f AWS/jobber-elastic/ -n production
kubectl apply -f AWS/jobber-queue/ -n production
# Deploy microservices
kubectl apply -f AWS/3-auth/ -n production
kubectl apply -f AWS/4-users/ -n production
# ... (continue for all services)
# Configure ingress
kubectl apply -f AWS/jobber-ingress/ -n productionJenkins automation scripts are available in 10-jenkins-automation/.
Comprehensive documentation available in /docs:
-
Functional Requirements Document
- 50+ functional requirements
- 30+ non-functional requirements
- User stories and acceptance criteria
-
- Detailed architecture diagrams
- Service specifications
- Database schemas
- Deployment strategies
-
API Reference & Service Communication
- 100+ endpoint specifications
- Request/response examples
- Service-to-service patterns
- WebSocket events
-
- Step-by-step setup instructions
- Troubleshooting guide
- Monitoring configuration
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript best practices
- Write tests for new features
- Update documentation as needed
- Follow conventional commit messages
- Ensure all tests pass before submitting PR
Elasticsearch not starting:
# Increase Docker memory to 8GB minimum
# Docker Desktop β Preferences β Resources β MemoryPort conflicts:
# Find and kill process using port
lsof -ti:4000 | xargs kill -9Service connectivity issues:
# Check Docker network
docker network inspect elastic
# Restart specific service
make restart-service SERVICE=gatewaySee Troubleshooting Guide for more solutions.
- Kibana: http://localhost:5601 (elastic/admin1234)
- RabbitMQ Management: http://localhost:15672 (jobber/jobberpass)
- Grafana: http://localhost:3001 (admin/admin)
- API Gateway: http://localhost:4000
- Application performance (APM)
- Infrastructure health (Metricbeat)
- Service uptime (Heartbeat)
- Centralized logs (ELK Stack)
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Express.js
- Powered by Docker
- Deployed on AWS EKS
- Monitored with Elastic Stack
- Documentation: docs/
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- GraphQL API Gateway
- Mobile app (React Native)
- Video call integration
- AI-powered gig recommendations
- Multi-language support
- Advanced analytics dashboard
Made with β€οΈ by DevGbolade
β Star this repo if you find it helpful!