Skip to content

kuntal1461/Resume-Builder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

122 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Job Recommendation System πŸš€

An AI-driven job recommendation platform.
Users log in, upload a resume, and an LLM generates 7–8 tailored questions. Resume data + answers are scored:

  • Score < 60 β†’ show popup warning, user may retry.
  • Score β‰₯ 60 β†’ system fetches jobs (e.g., from LinkedIn) and recommends them via LangChain reranking.

⚑ Quick Start in 1 Minute (with Docker)

git clone https://github.com/your-org/job-recommendation-system.git
cd job-recommendation-system
cp .env.example .env   # edit values
docker compose up -d   # build & start

Access Points:


πŸ› οΈ Development Workflow

Running Development Scripts

We provide automated development scripts that handle Docker services, code quality checks, and testing:

For Linux/macOS:

# Using npm script (recommended)
npm run devrun

# Or directly
./devrun.sh

For Windows:

devrun.cmd

What the Dev Scripts Do

The devrun scripts automate your entire development workflow:

  1. 🐳 Start Docker Services - Brings up all containers (backend, frontend, databases, etc.)
  2. πŸ” Run Quality Checks:
    • Python (Backend):
      • ruff - Fast Python linter
      • black --check - Code formatting verification
      • pytest - Run all tests
    • Node.js (Frontend):
      • eslint - JavaScript/TypeScript linting
      • prettier --check - Code formatting verification
      • next lint - Next.js specific linting
      • jest - Run all frontend tests
  3. πŸ“Š Generate Summary - Shows which checks passed/failed
  4. πŸ›‘ Clean Shutdown - Automatically stops Docker services when done

Exit Codes

  • 0 - All checks passed βœ…
  • 1 - One or more checks failed ❌

Prerequisites

Before running the dev scripts, ensure you have:

  • Docker & Docker Compose installed
  • Node.js & npm installed (for npm script)
  • Executable permissions (Linux/macOS):
    chmod +x devrun.sh

Development Best Practices

  1. Run before committing:

    npm run devrun  # Ensures code quality before pushing
  2. Fix issues automatically (where possible):

    # Python formatting
    docker compose exec backend black .
    
    # Node formatting
    docker compose exec frontend npx prettier --write .
  3. Run specific checks:

    # Just Python tests
    docker compose exec backend pytest
    
    # Just frontend linting
    docker compose exec frontend npx eslint .

Troubleshooting Dev Scripts

Script exits immediately:

  • Check Docker is running: docker --version
  • Verify Docker Compose: docker compose version

Permission denied (Linux/macOS):

chmod +x devrun.sh

Checks failing:

  • Review the specific error messages in the output
  • Run formatters to auto-fix: black . or prettier --write .
  • Check test logs for failing tests

Services won't start:

# Clean restart
docker compose down -v
docker compose up -d

🌱 Environment Modes

The entire stack now reads a single SERVER_ENV flag (local, staging, production) so you can branch logic with simple helpers:

  • Backend (common/server_environment.py) exposes get_server_environment() which returns booleans like is_local, is_staging, is_prod. Both FastAPI apps (Job API + Resume Reader) import this helper so any service can branch on the same flags.
  • Frontend (job-recommendation-system/front-end/lib/server/environment.ts) mirrors the same contract so API routes and pages can ask for isLocal, isStaging, etc.
  • Any other frontend (e.g., a future Resume Reader UI) can import from frontend-common/environment directly:
import { resolveServerEnvironment } from "../../frontend-common/environment";

const serverEnv = resolveServerEnvironment();
if (serverEnv.isLocal) {
  // local-only logic
}

Supporting variables (all live in .env / deployment secrets):

Variable Purpose Example
SERVER_ENV Active environment slug local, staging, production
API_BASE_URL Where the frontend talks to the backend http://localhost:8000
FRONTEND_ORIGIN Primary UI origin allowed by CORS http://localhost:3000
CORS_EXTRA_ORIGINS Optional comma list of additional origins https://staging.example.com

When SERVER_ENV=local, sensible defaults are applied (localhost ports). For staging/prod just set the URLs explicitlyβ€”both backend and frontend modules will stay in sync.


πŸ“‚ Repository Structure

.
β”œβ”€β”€ job-recommendation-framework/      # Framework: AI & LangChain
β”‚   └── framework/
β”‚
β”œβ”€β”€ job-recommendation-system/         # Main system
β”‚   β”œβ”€β”€ core/                          # business logic & entities
β”‚   β”œβ”€β”€ web/                           # FastAPI API layer
β”‚   β”œβ”€β”€ frontend/                      # React/NxT.js UI
β”‚   └── data/sql/                      # DB migrations (DDL/DML)
β”‚       β”œβ”€β”€ Major_01_00_00/            # schema
β”‚       └── Major_02_00_00/            # future DDL
β”‚
β”œβ”€β”€ docker/                            # Docker configs
β”‚   β”œβ”€β”€ Dockerfile.api
β”‚   β”œβ”€β”€ entrypoint.api.sh
β”‚   └── db-seed.sh
β”‚
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ .env.example
β”œβ”€β”€ .dockerignore
β”œβ”€β”€ Makefile                           # dev shortcuts
└── README.md

⚑ Quick Command Reference

Task Command Description
Run all checks npm run devrun Start services, run all quality checks, generate report
Start services docker compose up -d Start all containers in background
Stop services docker compose down Stop all containers
View logs docker compose logs -f Follow logs from all services
Service logs docker compose logs -f backend Follow logs from specific service
Format Python docker compose exec backend black . Auto-format Python code
Format Node docker compose exec frontend npx prettier --write . Auto-format frontend code
Python tests docker compose exec backend pytest Run backend tests
Frontend tests docker compose exec frontend npx jest Run frontend tests
Rebuild docker compose build --no-cache Clean rebuild all containers
Database reset docker compose down -v && docker compose up -d Reset database and restart

🧭 High-Level Flow

Frontend (React/NxT.js) β†’ login, resume upload, Q&A, jobs view
API (FastAPI) β†’ /resume, /qa/*, /score, /jobs/recommend
Core β†’ parsing, scoring, job recommendation
Framework β†’ LangChain parsing assist, QGen, scoring, reranking
Job Source β†’ LinkedIn scraper / adapter

Final Score = 0.6 Γ— ResumeScore + 0.4 Γ— QAScore

  • < 60 β†’ retry
  • β‰₯ 60 β†’ job recommendations
image

πŸ”Œ Module Responsibilities

🧠 job-recommendation-framework

  • LLM-based resume parsing, question generation, answer scoring, job reranking.
  • Independent package β€” plug & play with system.

βš™οΈ job-recommendation-system

  • Core resume parser (non-LLM fallback).
  • Scoring logic (resume + answers).
  • Job fetching (LinkedIn scraper/integrator).
  • API layer (/api/v1/resumesystem/*).
  • React frontend (Login, Resume upload, Q&A, Jobs view).

βš™οΈ Tech Stack

Backend: Python 3.9.6, FastAPI (or Flask)
Frontend: Nxt.Js + Tailwind
AI: LangChain + LLMs
DBs: PostgreSQL/MySQL, FAISS/PGVector, Redis/Elastic
Scraping: LinkedIn (with compliance checks)
Infra: Docker optional, .env configs for secrets


πŸ§ͺ Scoring Logic

Final Score = 0.6 Γ— Resume Score + 0.4 Γ— Q&A Score

Threshold:

  • < 60 β†’ popup: "Your score is below 60"
  • β‰₯ 60 β†’ LinkedIn scraping + job recommendations

🧡 Sequence Diagram (Q&A Round)

sequenceDiagram
  autonumber
  participant FE as Frontend
  participant API as Web API
  participant CORE as Core
  participant FW as Framework
  participant DB as DB

  FE->>API: POST /resume (file)
  API->>CORE: parse_and_normalize(uri)
  CORE->>FW: LLM.extract_entities(text)
  FW-->>CORE: entities
  CORE->>DB: save profile
  API-->>FE: profileId

  FE->>API: GET /qa/start
  API->>CORE: generate_questions(profile)
  CORE->>FW: LLM.qgen(profile)
  FW-->>CORE: 7-8 questions
  CORE-->>API: questions
  API-->>FE: show questions

  loop For each answer
    FE->>API: POST /qa/answer
    API->>CORE: score_answer
    CORE->>FW: LLM.score(q,a,profile)
    FW-->>CORE: score
    CORE->>DB: save partial score
  end

  FE->>API: GET /score
  API->>CORE: compute_score
  CORE-->>API: score
  API-->>FE: final score + decision
Loading

🀝 Contributing

We welcome contributions! Please see our CONTRIBUTING.md for details.

Development Guidelines

  1. Fork the repository
  2. Create a feature branch
  3. Follow coding standards
  4. Write tests for new features
  5. Run quality checks - Use npm run devrun to ensure all checks pass
  6. Submit pull request

Code Style

  • Python: PEP 8 compliance (enforced by ruff and black)
  • JavaScript: ESLint with standard config
  • SQL: Proper indexing and constraints
  • Docker: Multi-stage builds for optimization

πŸ’‘ Tip: Run npm run devrun before committing to catch issues early!


πŸ“Š Monitoring & Logging

Health Checks

# API health
curl http://localhost:8000/health

# Database health
docker compose exec mysql mysqladmin ping

# Service status
docker compose ps

Log Management

# View all logs
docker compose logs -f

# Service-specific logs
docker compose logs -f api
docker compose logs -f mysql

# Log levels (set in .env)
LOG_LEVEL=INFO  # DEBUG, INFO, WARNING, ERROR

πŸ› Troubleshooting

Common Issues

Port conflicts:

# Check port usage
netstat -tulpn | grep :8000

# Change ports in docker-compose.yml

Database connection issues:

# Check MySQL status
docker compose ps mysql

# Reset database
make reset
make up

Build failures:

# Clean build
docker compose build --no-cache

# Check Docker daemon
docker info

πŸ“ž Support


πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


Happy job hunting! 🎯

⭐ Star us on GitHub

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors