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.
| 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 |
- π 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
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.
Before you begin, ensure you have:
- Node.js 18+ installed
- GitHub Copilot CLI installed and authenticated
- Installation guide: https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli
- Verify:
copilot --version
- GitHub Copilot subscription (required for API access)
- Clone the repository:
git clone <repository-url>
cd copilot-cv-analyzer- Install dependencies:
npm install- 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- Set up environment variables (optional):
# The Copilot SDK uses CLI authentication automatically
# No additional env vars needed unless using custom configurationnpm run devOpen http://localhost:3000 in your browser.
npm run build
npm start- Select your industry (e.g., "Technology & Software")
- Add job description (optional but recommended):
- Click "Paste Text" and paste the job posting
- OR click "Upload File" and select a PDF/TXT file
- Upload your CV as usual
- Wait for analysis (25-40 seconds for dual analysis)
- View results:
- Match score displayed prominently
- Skills breakdown (matched vs. missing)
- Strength and gap areas
- Tailored recommendations
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
β 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
- 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
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:
- Run analysis without job description first
- Fix critical general issues
- Then analyze with job description
- Address job-specific gaps
- 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
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
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:
- Added TypeScript projects to experience
- Mentioned AWS deployment in previous role
- Added Docker to skills section
- 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.
- Select Industry: Choose your target industry (Technology, Marketing, Finance, Executive, or General)
- Upload CV: Upload your PDF CV via drag-and-drop or file picker
- Extract: PDF.js extracts text content client-side (privacy-first)
- Analyze: Text is sent to API with selected industry
- AI Processing: Industry-specific analyzer provides tailored feedback
- Results: View comprehensive suggestions across 7 categories
- Add Job Description: Paste text or upload PDF/TXT file of the job posting
- Dual Analysis: System performs both general CV analysis AND job-specific matching
- Match Score: Get a 0-100% compatibility score based on:
- Skills alignment
- Experience match
- Keyword presence
- Requirements coverage
- 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
- Toggle View: Switch between general CV analysis and job match results
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
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
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- AI: GitHub Copilot SDK
- PDF Processing: PDF.js
- Validation: Zod
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
Default limits (configured in lib/pdfExtractor.ts):
- Max file size: 10MB
- Allowed format: PDF only
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-5orgpt-5-mini- See Copilot CLI docs for full model list
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 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
- Ensure Copilot CLI is installed:
copilot --version - Check authentication:
copilot auth status - Verify you have an active Copilot subscription
- Ensure the PDF contains actual text (not scanned images)
- Check browser console for specific errors
- Try with a different PDF file
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 processingIf 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- 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)
- 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
Contributions are welcome! Please feel free to submit a Pull Request.
MIT
- Built with GitHub Copilot SDK
- PDF processing by PDF.js

