Skip to content

japperJ/copilot-cv-analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Job Match Analysis (click to view full-size)

Job Match Analysis (click to view full-size)

CV Analyzer - AI-Powered Resume Improvement Tool

A Next.js web application that uses the GitHub Copilot SDK to analyze CVs/resumes and provide comprehensive AI-powered suggestions for improvement.

πŸš€ Want to get started quickly? See QUICKSTART.md for a 5-minute setup guide.

What Can You Do?

Feature Description Status
πŸ“„ Upload CV Drag-and-drop PDF upload with client-side processing βœ… Ready
🎯 Industry Analysis Tailored feedback for 5 industries βœ… Ready
πŸ’Ό Job Matching Compare CV against specific job postings βœ… NEW!
πŸ“Š Match Score 0-100% compatibility score with visual gauge βœ… NEW!
βœ… Skill Matching See which skills you have vs. need βœ… NEW!
πŸ’‘ Recommendations Get specific actions to improve βœ… Ready
πŸ”„ Dual Analysis Toggle between general and job-specific views βœ… NEW!
πŸ”’ Privacy-First All processing happens locally βœ… Ready

Features

  • πŸ“„ PDF Upload: Drag-and-drop or click to upload PDF CVs
  • 🎯 Industry-Specific Analysis: Tailored feedback for Technology, Marketing, Finance, Executive, or General roles
  • πŸ’Ό Job Description Matching (NEW!):
    • πŸ“ Paste text or upload PDF/TXT job descriptions
    • πŸ“Š Get match score (0-100%) with color-coded assessment
    • βœ… See skills you have that match the job
    • ❌ Identify missing skills and requirements
    • πŸ’ͺ View your strength areas for the role
    • ⚠️ Identify gap areas needing improvement
    • πŸ’‘ Get specific recommendations to improve match
    • πŸ”„ Toggle between general analysis and job match view
  • πŸ€– AI Analysis: Powered by GitHub Copilot SDK (GPT-4.1)
  • πŸ“Š Comprehensive Feedback: Analysis across 7 key categories:
    • Structure & Organization
    • Content Quality
    • Formatting & Layout
    • ATS Optimization
    • Keywords & Skills
    • Achievements & Impact
    • Industry-Specific Tips
  • 🎯 Prioritized Suggestions: Issues categorized as critical, important, or optional
  • πŸ”’ Privacy-First: PDF processing happens client-side (no server uploads)
  • ⚑ Modern Stack: Next.js 14, TypeScript, Tailwind CSS

Security & Privacy

This application is designed for local desktop use only and implements several security measures:

  • πŸ”’ Client-side PDF processing - Your PDF never leaves your computer
  • πŸ”’ No data storage - Everything processes in memory only
  • πŸ”’ Input validation - File size limits and text length restrictions
  • πŸ”’ Clean dependencies - 0 vulnerabilities (npm audit)
  • πŸ”’ localhost-only - No external network access by default

Privacy Notice: While PDF processing is local, extracted CV text is sent to GitHub Copilot API for analysis. See PRIVACY.md for details.

Security Assessment: See SECURITY.md for comprehensive security analysis.

Prerequisites

Before you begin, ensure you have:

  1. Node.js 18+ installed
  2. GitHub Copilot CLI installed and authenticated
  3. GitHub Copilot subscription (required for API access)

Installation

  1. Clone the repository:
git clone <repository-url>
cd copilot-cv-analyzer
  1. Install dependencies:
npm install
  1. Important: Copy PDF.js worker file:
# Windows (PowerShell)
Copy-Item -Path "node_modules\pdfjs-dist\build\pdf.worker.min.mjs" -Destination "public\pdf.worker.min.mjs"

# macOS/Linux (bash)
cp node_modules/pdfjs-dist/build/pdf.worker.min.mjs public/pdf.worker.min.mjs
  1. Set up environment variables (optional):
# The Copilot SDK uses CLI authentication automatically
# No additional env vars needed unless using custom configuration

Running the Application

Development Mode

npm run dev

Open http://localhost:3000 in your browser.

Production Build

npm run build
npm start

Using the Job Match Feature

Quick Start

  1. Select your industry (e.g., "Technology & Software")
  2. Add job description (optional but recommended):
    • Click "Paste Text" and paste the job posting
    • OR click "Upload File" and select a PDF/TXT file
  3. Upload your CV as usual
  4. Wait for analysis (25-40 seconds for dual analysis)
  5. View results:
    • Match score displayed prominently
    • Skills breakdown (matched vs. missing)
    • Strength and gap areas
    • Tailored recommendations

Understanding Your Match Score

Score Display:

  • Circular gauge showing 0-100%
  • Color-coded: Green (75+), Yellow (60-74), Red (<60)
  • Label: Excellent/Strong/Good/Moderate/Weak/Poor Match

What the Score Means:

90-100% - Excellent Match
β”œβ”€ You exceed most job requirements
β”œβ”€ Strong candidate for the role
└─ Minor adjustments may still help

75-89% - Strong Match  
β”œβ”€ You meet most requirements
β”œβ”€ Good fit for the position
└─ Address any missing skills

60-74% - Good Match
β”œβ”€ You meet many key requirements
β”œβ”€ Some gaps to address
└─ Competitive with improvements

45-59% - Moderate Match
β”œβ”€ Significant gaps exist
β”œβ”€ Potential if willing to learn
└─ Major improvements needed

30-44% - Weak Match
β”œβ”€ Many missing qualifications
β”œβ”€ May not be suitable
└─ Consider other opportunities

0-29% - Poor Match
β”œβ”€ Not aligned with requirements
└─ Different career path recommended

Interpreting Results

βœ“ Matched Skills (Green)

  • Skills you have that the job requires
  • Technologies you know that they need
  • Certifications that match
  • Experience that aligns
  • Action: Highlight these prominently in your CV

βœ— Missing Skills (Red)

  • Required skills not found in your CV
  • Technologies the job needs
  • Qualifications you lack
  • Experience gaps
  • Action: Learn these or explain equivalents

πŸ’ͺ Strength Areas (Impact: High/Medium/Low)

  • Where you excel beyond requirements
  • Unique advantages you bring
  • Standout qualifications
  • Action: Emphasize in cover letter

⚠️ Gap Areas (Severity: Critical/Important/Minor)

  • Where you fall short
  • Skills to develop
  • Experience to gain
  • Action: Address in application or learn quickly

πŸ’‘ Recommendations

  • Specific actions to improve match
  • Prioritized (Critical β†’ Important β†’ Optional)
  • Tailored to the job description
  • Action: Follow these to strengthen application

Tips for Best Results

Preparing Job Descriptions:

  • Use the full job posting text
  • Include requirements, responsibilities, and qualifications
  • Keep company background but remove fluff
  • Paste exactly as posted (preserves keywords)

Optimizing Your CV:

  1. Run analysis without job description first
  2. Fix critical general issues
  3. Then analyze with job description
  4. Address job-specific gaps
  5. Re-analyze to see score improvement

Using Multiple Job Descriptions:

  • Analyze against different jobs separately
  • Compare match scores
  • Identify patterns in missing skills
  • Focus on skills appearing in multiple jobs

Common Scenarios

High Score (75%+) but Not Getting Interviews:

  • Your CV may not be ATS-friendly (check general analysis)
  • Keywords might not be prominent enough
  • Consider reformatting to highlight matched skills

Low Score (<60%) but You Think You're Qualified:

  • Your CV may not reflect your actual skills
  • Keywords might be missing or different
  • Add more detail to relevant experience
  • Use terminology from the job description

Missing Skills You Actually Have:

  • Add them to your CV's skills section
  • Mention them in experience descriptions
  • Use exact keywords from job posting
  • Re-analyze to verify

Real-World Example

Scenario: Applying for "Senior React Developer" role

Before Optimization (Match Score: 58%)

  • Missing: TypeScript, AWS, Docker, CI/CD
  • Strengths: React, JavaScript experience
  • Recommendations: Add missing technologies, quantify achievements

Actions Taken:

  1. Added TypeScript projects to experience
  2. Mentioned AWS deployment in previous role
  3. Added Docker to skills section
  4. Quantified impact: "Reduced load time by 40%"

After Optimization (Match Score: 82%)

  • Missing: Only Kubernetes (minor)
  • Strengths: React, TypeScript, AWS, Docker, proven impact
  • Result: Interview secured! πŸŽ‰

Key Takeaway: The tool helps identify exactly what hiring managers are looking for in YOUR specific target role.

How It Works

Basic CV Analysis

  1. Select Industry: Choose your target industry (Technology, Marketing, Finance, Executive, or General)
  2. Upload CV: Upload your PDF CV via drag-and-drop or file picker
  3. Extract: PDF.js extracts text content client-side (privacy-first)
  4. Analyze: Text is sent to API with selected industry
  5. AI Processing: Industry-specific analyzer provides tailored feedback
  6. Results: View comprehensive suggestions across 7 categories

Job Description Matching (Optional)

  1. Add Job Description: Paste text or upload PDF/TXT file of the job posting
  2. Dual Analysis: System performs both general CV analysis AND job-specific matching
  3. Match Score: Get a 0-100% compatibility score based on:
    • Skills alignment
    • Experience match
    • Keyword presence
    • Requirements coverage
  4. Detailed Breakdown:
    • βœ“ Matched Skills: Skills you have that match the job
    • βœ— Missing Skills: Required skills not found in your CV
    • πŸ’ͺ Strength Areas: Where you excel for this role
    • ⚠️ Gap Areas: Where you need improvement
    • πŸ’‘ Recommendations: Specific actions to improve your match
  5. Toggle View: Switch between general CV analysis and job match results

Example Workflow

1. Select "Technology" industry
2. Paste job description: "Looking for Senior React Developer..."
3. Upload your CV PDF
4. Wait 25-40 seconds (dual analysis)
5. View Match Score: 78%
6. See Matched: React, JavaScript, Git, Node.js
7. See Missing: TypeScript, AWS, Docker
8. Read tailored recommendations
9. Toggle to general analysis for standard feedback
10. Make improvements and re-analyze

Project Structure

copilot-cv-analyzer/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ api/
β”‚   β”‚   └── analyze/
β”‚   β”‚       └── route.ts          # API endpoint for CV analysis
β”‚   β”œβ”€β”€ layout.tsx                # Root layout
β”‚   β”œβ”€β”€ page.tsx                  # Main page with state management
β”‚   └── globals.css               # Global styles
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ FileUpload.tsx            # Drag-and-drop upload component
β”‚   β”œβ”€β”€ AnalysisResults.tsx       # Results display component
β”‚   β”œβ”€β”€ JobDescriptionInput.tsx   # Job description input (NEW)
β”‚   β”œβ”€β”€ JobMatchResults.tsx       # Job match display (NEW)
β”‚   └── AnalysisToggle.tsx        # Toggle between analyses (NEW)
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ pdfExtractor.ts           # PDF text extraction utilities
β”‚   └── skills/                   # Industry-specific analyzers
β”‚       β”œβ”€β”€ base-analyzer.ts      # Shared prompt builder
β”‚       β”œβ”€β”€ tech-analyzer.ts      # Technology industry
β”‚       β”œβ”€β”€ marketing-analyzer.ts # Marketing industry
β”‚       β”œβ”€β”€ finance-analyzer.ts   # Finance industry
β”‚       β”œβ”€β”€ executive-analyzer.ts # Executive roles
β”‚       β”œβ”€β”€ general-analyzer.ts   # General/default
β”‚       β”œβ”€β”€ job-matcher.ts        # Job matching skill (NEW)
β”‚       └── index.ts              # Exports
β”œβ”€β”€ types/
β”‚   └── cv.ts                     # TypeScript type definitions
└── public/                       # Static assets

Tech Stack

  • Framework: Next.js 14 (App Router)
  • Language: TypeScript
  • Styling: Tailwind CSS
  • AI: GitHub Copilot SDK
  • PDF Processing: PDF.js
  • Validation: Zod

Configuration

Job Description Matching

Input Methods:

  • Paste Text: Copy job description directly into textarea (max 10,000 characters)
  • Upload File: Upload PDF or TXT file containing job description

Match Score Algorithm: The AI evaluates your CV against the job description based on:

  • Required vs. preferred skills alignment
  • Years of experience match
  • Technical skills and tools
  • Soft skills and competencies
  • Education and certifications
  • Industry-specific keywords
  • Achievement relevance

Score Interpretation:

  • 90-100%: Excellent match - you exceed most requirements
  • 75-89%: Strong match - you meet most requirements
  • 60-74%: Good match - you meet many key requirements
  • 45-59%: Moderate match - significant gaps but potential
  • 30-44%: Weak match - many missing qualifications
  • 0-29%: Poor match - not suitable for this role

PDF Upload Limits

Default limits (configured in lib/pdfExtractor.ts):

  • Max file size: 10MB
  • Allowed format: PDF only

AI Model

Default model: gpt-4.1 (configured in app/api/analyze/route.ts)

You can change this to other available models:

  • gpt-4.1 (default)
  • gpt-5 or gpt-5-mini
  • See Copilot CLI docs for full model list

Troubleshooting

Job Matching FAQ

Q: Do I need a job description to use the analyzer? A: No! Job descriptions are optional. You can still get comprehensive general CV analysis without one.

Q: What if I have multiple job descriptions? A: Analyze against each one separately. Compare scores to find your best matches and identify common skill gaps.

Q: Why is my match score low even though I'm qualified? A: The AI matches your CV text against the job description. If you have the skills but they're not explicitly mentioned in your CV, they won't be counted. Add missing keywords!

Q: Can I use the same job description for different CVs? A: Yes! This is great for A/B testing different CV versions to see which one scores higher.

Q: How accurate is the match score? A: It's based on semantic AI analysis, more sophisticated than simple keyword matching. However, treat it as guidance, not absolute truth. A 65% match doesn't mean 65% chance of getting hired.

Q: Should I apply if my score is below 60%? A: Consider it carefully. If the missing skills are critical and you don't have them, the role might not be suitable. But if you have equivalent skills or can learn quickly, still apply with a strong cover letter.

Q: Can I game the system by copying the job description into my CV? A: Technically yes, but DON'T. ATS systems and recruiters will catch this. Use the tool to identify legitimate gaps and address them honestly.

Q: What file formats work for job descriptions? A: PDF, TXT, or paste text directly. Most job postings from websites work great when copied and pasted.

Job Matching Issues

"Job description is too large"

  • Limit: 10,000 characters
  • Solution: Paste only the essential parts (requirements, responsibilities, qualifications)
  • Tip: Remove company background and generic text

"Match score seems inaccurate"

  • Ensure job description is complete and includes requirements
  • Make sure CV has relevant keywords from the job posting
  • Try different industries for better context
  • Remember: AI provides guidance, not absolute truth

Analysis taking too long (>60 seconds)

  • Job matching requires two AI calls (general + match)
  • Expected: 25-40 seconds total
  • If stuck: Refresh page and try again
  • Check network connection

"Failed to analyze CV"

  1. Ensure Copilot CLI is installed: copilot --version
  2. Check authentication: copilot auth status
  3. Verify you have an active Copilot subscription

PDF Extraction Issues

  • Ensure the PDF contains actual text (not scanned images)
  • Check browser console for specific errors
  • Try with a different PDF file

Build Errors

If you see canvas-related errors during build:

# This is expected - canvas is disabled in next.config.ts
# The app uses PDF.js in the browser, no server-side PDF processing

PDF Worker Missing

If you see "Setting up fake worker failed" error:

# Copy the worker file to public directory
Copy-Item -Path "node_modules\pdfjs-dist\build\pdf.worker.min.mjs" -Destination "public\pdf.worker.min.mjs"

# Then restart the dev server
npm run dev

Future Enhancements

Completed βœ…

  • Industry-specific analysis (Technology, Marketing, Finance, Executive, General)
  • Job description matching with match score
  • Dual analysis mode with toggle
  • File upload for job descriptions (PDF/TXT)

Planned πŸš€

  • Support for OCR (scanned PDFs)
  • Multi-language CV support
  • CV templates and examples
  • Export analysis as PDF report
  • Comparison mode (before/after revisions)
  • Additional industries (Healthcare, Legal, Sales, Design)
  • Save job descriptions for reuse
  • Compare against multiple jobs simultaneously
  • Historical tracking of match scores

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT

Acknowledgments

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published