Skip to content

Latest commit

Β 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

TechFit Analyzer

AI-powered job candidate skill matching platform. Analyze your technology stack against job requirements and get personalized career recommendations powered by Google Generative AI.

🎯 Project Overview

TechFit Analyzer is a full-stack application designed to help job seekers understand how well their technical skills match job postings. The platform provides intelligent analysis through:

  • Backend: NestJS REST API with Google Gemini AI integration
  • Frontend: Chrome extension providing user-friendly interface for skill management and job analysis
  • Architecture: Microservices-ready with containerized deployment

Key Features

✨ AI-Powered Analysis - Uses Google Gemini 2.5-flash for intelligent skill matching
πŸ” One-Click Job Parsing - Extract job requirements directly from webpages
πŸ’Ύ Profile Management - Store and manage your technology skills
πŸ“Š Detailed Insights - Get match percentage, found skills, missing skills, and personalized advice
🐳 Docker Ready - Complete containerized setup with Docker Compose
πŸš€ Production Ready - Type-safe TypeScript, comprehensive testing, proper error handling

πŸ“‹ Table of Contents

πŸ“ Project Structure

main/
β”œβ”€β”€ backend/                          # NestJS backend service
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ ai/                      # AI module with job analysis
β”‚   β”‚   β”œβ”€β”€ app.module.ts            # Root module
β”‚   β”‚   └── main.ts                  # Entry point
β”‚   β”œβ”€β”€ package.json
β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”œβ”€β”€ README.md                    # Backend documentation
β”‚   └── ...
β”œβ”€β”€ techfit-analyzer/                 # Chrome extension frontend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/              # React components
β”‚   β”‚   β”œβ”€β”€ hooks/                   # Custom React hooks
β”‚   β”‚   └── content.ts               # Content script
β”‚   β”œβ”€β”€ manifest.json                # Chrome extension manifest
β”‚   β”œβ”€β”€ vite.config.ts               # Vite configuration
β”‚   β”œβ”€β”€ package.json
β”‚   β”œβ”€β”€ README.md                    # Frontend documentation
β”‚   └── ...
β”œβ”€β”€ docker-compose.yaml              # Container orchestration
β”œβ”€β”€ README.md                        # This file
└── .gitignore

πŸ› οΈ Technology Stack

Backend

Technology Version Purpose
NestJS ^11.0.1 Framework
TypeScript ~6.0 Language
Google Generative AI ^0.24.1 AI Model Integration
Jest ^30.0.0 Testing
PostgreSQL Latest Database (optional)
Docker Latest Containerization

Frontend

Technology Version Purpose
React ^19.2.5 UI Library
TypeScript ~6.0 Language
Vite ^8.0.9 Build Tool
Tailwind CSS ^3.4.17 Styling
Radix UI ^1.1.13 Component Primitives
Axios ^1.15.2 HTTP Client
CRXJS ^2.4.0 Chrome Extension Build

πŸ“¦ Prerequisites

System Requirements

  • Node.js: v18.0.0 or higher
  • npm or pnpm: v8.0.0 or higher (pnpm recommended)
  • Chrome Browser: v88 or higher (for extension)
  • Docker: v20.0.0 or higher (for containerized deployment)
  • Docker Compose: v1.29.0 or higher

API Requirements

πŸš€ Quick Start

Option 1: Docker Compose (Recommended)

The easiest way to run the entire application:

# Navigate to main directory
cd main

# Create backend .env file
cp backend/.env.example backend/.env
# Edit backend/.env and add your GEMINI_API_KEY

# Start all services
docker-compose up -d

# Backend will be available at http://localhost:3000

To stop services:

docker-compose down

Option 2: Local Development

1. Backend Setup

cd backend

# Install dependencies
pnpm install

# Create .env file
cp .env.example .env
# Edit .env and add your GEMINI_API_KEY and PORT

# Start development server
pnpm run start:dev

# Backend runs at http://localhost:3000

2. Frontend Setup (in new terminal)

cd techfit-analyzer

# Install dependencies
pnpm install

# Start development server
pnpm run dev

# Extension builds to dist/

3. Load Extension in Chrome

  1. Open chrome://extensions/
  2. Enable Developer mode (top right)
  3. Click Load unpacked
  4. Select the techfit-analyzer/dist/ folder
  5. Extension is now ready to use

πŸ’» Development Setup

Backend Development

cd backend

# Install dependencies
pnpm install

# Start in watch mode
pnpm run start:dev

# Run tests
pnpm run test

# Run E2E tests
pnpm run test:e2e

# Lint and format code
pnpm run lint
pnpm run format

# Build for production
pnpm run build

Backend Documentation: See backend/README.md for detailed backend setup and API documentation.

Frontend Development

cd techfit-analyzer

# Install dependencies
pnpm install

# Start development server
pnpm run dev

# Build for production
pnpm run build

# Lint code
pnpm run lint

Frontend Documentation: See techfit-analyzer/README.md for detailed frontend setup and usage guide.

Environment Configuration

Backend (.env)

Create backend/.env:

# Server
PORT=3000

# Google AI
GEMINI_API_KEY=your_key_here

Frontend

The frontend connects to the backend at http://localhost:3000 by default. To change this, edit src/components/Analyzer.tsx.

🐳 Production Deployment

Docker Build

Build Docker image:

docker build -f backend/Dockerfile -t techfit-analyzer-backend .

Docker Compose Deployment

  1. Prepare .env file in backend directory
  2. Run:
    docker-compose up -d

Manual Deployment

  1. Backend:

    cd backend
    pnpm run build
    pnpm run start:prod
  2. Frontend:

    cd techfit-analyzer
    pnpm run build
    # Upload dist/ folder to Chrome Web Store or distribute as .crx file

πŸ“‘ API Reference

Base URL

http://localhost:3000

Main Endpoint

Analyze Job Match

Endpoint: POST /ai/analyse-job

Request:

{
  "text": "Senior React developer needed with 5+ years experience...",
  "userStack": ["JavaScript", "React", "Node.js", "PostgreSQL"]
}

Response:

{
  "match_percentage": 85,
  "found_skills": ["JavaScript", "React", "Node.js"],
  "missing_skills": ["Python", "AWS"],
  "advice": "Focus on AWS and Python to increase match percentage."
}

Full API Documentation: See backend/README.md for complete API reference.

πŸ—οΈ Architecture

System Design

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    User's Browser                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Chrome Extension (techfit-analyzer)                   β”‚
β”‚  β”œβ”€β”€ Profile Manager (React Component)                β”‚
β”‚  β”œβ”€β”€ Job Analyzer (React Component)                   β”‚
β”‚  β”œβ”€β”€ Content Script (Page Parsing)                    β”‚
β”‚  └── Chrome Storage API (Data Persistence)            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚ HTTP/REST
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Backend API (http://localhost:3000)           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  NestJS Application                                    β”‚
β”‚  β”œβ”€β”€ AI Module (Job Analysis)                        β”‚
β”‚  β”œβ”€β”€ Controllers (HTTP Endpoints)                    β”‚
β”‚  β”œβ”€β”€ Services (Business Logic)                       β”‚
β”‚  └── DTOs (Request Validation)                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚ API Call
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚        Google Generative AI (Gemini 2.5-flash)        β”‚
β”‚        Performs Intelligent Skill Matching             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow

  1. User opens extension β†’ Loads Profile tab
  2. User enters skills β†’ Stored in Chrome storage
  3. User navigates to job posting β†’ Content script parses page
  4. User clicks "Parse from page" β†’ Sends message to content script
  5. Content script extracts job text β†’ Sends to extension popup
  6. User clicks "Analyze" β†’ Extension sends request to backend
  7. Backend receives request β†’ Calls Google Generative AI
  8. AI returns analysis β†’ Backend formats and returns to extension
  9. Extension displays results β†’ User sees match details

πŸ§ͺ Testing

Backend Tests

cd backend

# Run all tests
pnpm run test

# Watch mode
pnpm run test:watch

# Coverage report
pnpm run test:cov

# E2E tests
pnpm run test:e2e

Frontend Tests

Frontend currently uses ESLint for code quality:

cd techfit-analyzer

# Run linter
pnpm run lint

πŸ“š Documentation

Detailed documentation for each component:

πŸ”§ Configuration

Backend Configuration

All backend configuration is in backend/.env:

  • PORT: Server port (default: 3000)
  • GEMINI_API_KEY: Google API key for AI features

Frontend Configuration

Frontend configuration in techfit-analyzer/:

  • Backend URL: src/components/Analyzer.tsx
  • Chrome permissions: manifest.json
  • Build settings: vite.config.ts

πŸ› Troubleshooting

Backend Issues

Problem Solution
Port 3000 already in use Change PORT in .env or kill process: lsof -ti:3000 | xargs kill -9
API key error Verify GEMINI_API_KEY in .env
Dependencies error Delete node_modules and pnpm-lock.yaml, reinstall
Connection refused Ensure backend is running on correct port

Extension Issues

Problem Solution
Extension won't load Enable Developer mode, rebuild dist/, reload extension
Parse fails Ensure you're on a job posting page with description text
Backend unreachable Verify backend running at http://localhost:3000, check CORS
Profile not saving Clear extension data, check Chrome permissions

Docker Issues

Problem Solution
Build fails Verify Docker installed, check Dockerfile, rebuild: docker-compose build --no-cache
Container won't start Check logs: docker-compose logs backend
Port conflict Change port in docker-compose.yaml

🚒 Deployment Checklist

Before Production

  • Set strong GEMINI_API_KEY
  • Configure production environment variables
  • Run all tests and linters
  • Build both backend and frontend
  • Test with Docker Compose
  • Document API endpoints
  • Set up monitoring and logging

Production Steps

  1. Build Docker image
  2. Push to registry (Docker Hub, AWS ECR, etc.)
  3. Deploy to hosting platform
  4. Configure domain and SSL
  5. Set up CI/CD pipeline
  6. Monitor application health

🀝 Contributing

Code Style

  • TypeScript: Strict mode enabled
  • Formatting: Prettier (run pnpm run format)
  • Linting: ESLint (run pnpm run lint)

Before Committing

# Backend
cd backend
pnpm run format
pnpm run lint
pnpm run test

# Frontend
cd techfit-analyzer
pnpm run lint

Commit Message Format

type(scope): subject

body

footer

Types: feat, fix, docs, style, refactor, test, chore

πŸ“– Project Roadmap

Current Features

  • βœ… Backend API with Gemini AI
  • βœ… Chrome extension frontend
  • βœ… Job parsing from webpages
  • βœ… Skill matching analysis

Planned Features

  • πŸ”„ Multiple language support
  • πŸ”„ Database integration for persistence
  • πŸ”„ User authentication
  • πŸ”„ Historical analysis tracking
  • πŸ”„ Skill recommendation engine
  • πŸ”„ Salary prediction
  • πŸ”„ Career path suggestions

πŸ“ž Support & Contact

For issues, questions, or contributions:

  1. Check the troubleshooting sections
  2. Review detailed documentation:
  3. Contact the development team

πŸ“ License

This project is proprietary and confidential.


Quick Reference

Essential Commands

# Full setup with Docker
docker-compose up -d

# Local development setup
cd backend && pnpm install && pnpm run start:dev
cd ../techfit-analyzer && pnpm install && pnpm run dev

# Load extension in Chrome
# 1. chrome://extensions/
# 2. Enable Developer mode
# 3. Load unpacked -> select techfit-analyzer/dist/

# Build for production
cd backend && pnpm run build
cd ../techfit-analyzer && pnpm run build

# Run tests
cd backend && pnpm run test
cd backend && pnpm run test:e2e

# Code quality
pnpm run lint
pnpm run format

Important Files

  • Backend entry: backend/src/main.ts
  • Frontend entry: techfit-analyzer/src/main.tsx
  • Backend API: backend/src/ai/
  • Frontend components: techfit-analyzer/src/components/
  • Extension manifest: techfit-analyzer/manifest.json
  • Docker config: docker-compose.yaml

Last Updated: April 2026
Version: 1.0.0
Status: Production Ready

For the most up-to-date information, refer to the backend README and frontend README.

About

AI-driven job candidate skill matching service. Compares tech stacks with job requirements and provides detailed match analysis using Google Generative AI.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages