Enterprise-grade Applicant Tracking System built with microservices architecture, deployed on Kubernetes (K3s).
- candidate-service: Candidate profile management
- job-service: Job posting management
- application-service: Application workflow management
- email-service: Email integration and automation
- parser-service: Resume parsing and extraction
- matching-service: AI-powered candidate-job matching
- workflow-service: Workflow automation and orchestration
- admin-ui: Admin dashboard for recruiters
- public-portal: Public job board and candidate portal
- PostgreSQL: Primary data store
- Schema:
ats - Connection: Shared PostgreSQL instance in K8s cluster
- IP:
91.98.159.56 - Platform: K3s (Lightweight Kubernetes)
- Namespaces:
ats-backend: Backend microservicesats-frontend: Frontend applications
| Service | Type | Port | URL |
|---|---|---|---|
| admin-ui | NodePort | 30082 | http://91.98.159.56:30082 |
| public-portal | NodePort | 30081 | http://91.98.159.56:30081 |
| All backend services | ClusterIP | 80 | Internal only |
Host: postgres.databases.svc.cluster.local:5432
Database: flowmaster
Schema: ats
Username: flowmaster
Password: [configured in K8s secrets]
- Docker & Docker Buildx
- Python 3.11+
- Node.js 18+
- K3s cluster access
# Build all services for linux/amd64
./rebuild-and-deploy.sh# Apply all configurations
kubectl apply -f k8s/00-namespaces.yaml
kubectl apply -f k8s/# Backend services
cd services/<service-name>
pip install -r requirements.txt
uvicorn main:app --reload --port 8080
# Frontend applications
cd frontends/<app-name>
npm install
npm run dev- β application-service: Running
β οΈ candidate-service: Partial (1 pod CrashLoopBackOff - missing email-validator)β οΈ email-service: Partial (1 pod CrashLoopBackOff - missing email-validator)- β job-service: Running
- β matching-service: Running
- β parser-service: Running
- β workflow-service: Running
- β admin-ui: Running (24h+ uptime)
- β public-portal: Running (30h+ uptime)
- Missing
email-validatordependency in candidate-service and email-service - Some pods in CrashLoopBackOff state
.
βββ services/ # Backend microservices
β βββ candidate-service/
β βββ job-service/
β βββ application-service/
β βββ email-service/
β βββ parser-service/
β βββ matching-service/
β βββ workflow-service/
βββ frontends/ # Frontend applications
β βββ admin-ui/
β βββ public-portal/
βββ k8s/ # Kubernetes manifests
β βββ 00-namespaces.yaml
β βββ *-service.yaml
β βββ admin-ui.yaml
β βββ public-portal.yaml
βββ migrations/ # Database migrations
β βββ 001_initial_schema.sql
βββ scripts/ # Utility scripts
βββ tests/ # Test suites
βββ rebuild-and-deploy.sh # Build and deployment script
βββ deploy-frontends.sh # Frontend deployment script
ats.candidates: Candidate profilesats.resumes: Resume files and parsed dataats.jobs: Job postingsats.applications: Application submissionsats.reviews: Application reviewsats.email_log: Email communicationsats.match_scores: AI matching scores
- Automatic timestamp updates via triggers
- GIN indexes for skills array searching
- Foreign key constraints with cascade deletes
- JSONB fields for flexible metadata
- All services use ClusterIP (internal only)
- Only frontend applications exposed via NodePort
- Database credentials managed via K8s secrets
- CORS configured per service
Each service provides:
/health: Health check endpoint/ready: Readiness probe endpoint/docs: Interactive API documentation (FastAPI)
- Create feature branch
- Make changes
- Test locally
- Build and push images
- Deploy to K3s
- Verify deployment
Proprietary - All Rights Reserved