Skip to content

mishafyi/nemotron-resume-scanner

Repository files navigation

Nemotron Resume Scanner

AI-powered resume scanner for the space and aerospace industry. Upload a PDF resume and get an ATS compatibility score, missing keyword analysis, and an AI-rewritten PDF — all powered by NVIDIA Nemotron vision model.

Live version → (part of Zero G Talent, a job board for 50+ space companies)

NVIDIA Nemotron Next.js License


How It Works

PDF Upload → pdfjs-dist → Page Images → Nemotron Vision → Structured JSON

Architecture

  1. PDF to Images — Client-side rendering with pdfjs-dist. Each page is converted to a JPEG at 1.5x scale. Up to 3 pages analyzed.

  2. Vision Analysis (Temperature 0.3) — Resume images are sent to nvidia/nemotron-nano-12b-v2-vl:free via OpenRouter. The model performs OCR and analysis in a single pass, returning structured JSON with:

    • ATS compatibility score (0-100)
    • Formatting quality score
    • Keyword density score
    • Space industry fit score
    • Section-by-section breakdown
    • Specific improvement suggestions
    • Missing keywords for aerospace roles
  3. Resume Rewriting (Temperature 0.4) — A second Nemotron call takes the original images + analysis feedback and generates an improved resume as structured JSON, which is rendered to a PDF using jspdf.

  4. Job Matching — Keywords extracted from the analysis are matched against 30 sample aerospace jobs using simple text matching. In the live version, this searches across 10,000+ real job listings.

Why Nemotron?

nvidia/nemotron-nano-12b-v2-vl is a 12B-parameter vision-language model optimized for document understanding. It can:

  • Read text from complex resume layouts (multi-column, tables, graphics)
  • Understand document structure (headers, sections, bullet points)
  • Extract and evaluate content in a single pass
  • Return structured JSON consistently at low temperature

The model is available free on OpenRouter, making it ideal for open-source projects.

Two-Call Pattern

The scanner uses two separate API calls with different temperatures:

Call Temperature Purpose
Analysis 0.3 Consistent, structured scoring — needs to be deterministic
Rewriting 0.4 Creative rewording — needs slight variation for natural language

This split avoids the trade-off between consistency (scoring) and creativity (rewriting).


Quick Start

# Clone
git clone https://github.com/mishafyi/nemotron-resume-scanner.git
cd nemotron-resume-scanner

# Set up environment
cp .env.example .env
# Edit .env and add your OpenRouter API key (free at https://openrouter.ai)

# Install and run
npm install
npm run dev

Open http://localhost:3000 and upload a resume PDF.

Get an API Key

  1. Go to openrouter.ai and sign up (free)
  2. Create an API key
  3. Add it to .env:
    OPENROUTER_API_KEY=sk-or-v1-your-key-here
    

The Nemotron model is free on OpenRouter — no credit card required.


Project Structure

src/
├── app/
│   ├── layout.tsx              # Root layout (dark theme, Space Grotesk font)
│   ├── page.tsx                # Main scanner page
│   ├── globals.css             # Tailwind + custom styles
│   └── api/
│       ├── analyze/route.ts    # POST: resume → analysis JSON
│       ├── improve/route.ts    # POST: resume + analysis → rewritten resume
│       └── match-jobs/route.ts # POST: analysis → matched sample jobs
├── components/
│   ├── ResumeUploader.tsx      # Drag-and-drop PDF uploader with pdfjs
│   ├── AnalysisResults.tsx     # Score rings, breakdowns, PDF generation
│   └── ui/                    # shadcn/ui components (badge, button, separator)
├── lib/
│   ├── resumeAnalysis.ts       # Nemotron prompt engineering + response parsing
│   ├── sampleJobs.ts           # Simple keyword search over sample data
│   └── utils.ts                # cn() utility
└── data/
    └── sample-jobs.json        # 30 sample aerospace jobs

Key Files

  • src/lib/resumeAnalysis.ts — The core of the project. Contains the system prompt, vision message builder, and response parser. This is where the Nemotron prompt engineering lives.

  • src/app/api/analyze/route.ts — Server-side API route that calls OpenRouter. Handles rate limiting, input validation, and error handling.

  • src/components/ResumeUploader.tsx — Client-side PDF processing. Uses pdfjs-dist to render PDF pages to canvas, then converts to JPEG data URLs.


Tech Stack

Layer Technology
Framework Next.js 15 (App Router)
Frontend React 19, Tailwind CSS 4, TypeScript
AI Model NVIDIA Nemotron Nano 12B V2 VL (via OpenRouter)
PDF Processing pdfjs-dist (client-side)
PDF Generation jsPDF (client-side)
UI Components shadcn/ui (badge, button, separator)

No database. No authentication. No payments. Just clone, add a key, and run.


NVIDIA GTC / DGX Spark

This project was built for the NVIDIA GTC DGX Spark contest. It demonstrates:

  • Nemotron vision model for document understanding
  • Structured output from a vision model (JSON parsing)
  • Two-temperature pattern for analysis vs. creative generation
  • Real-world application — resume analysis for the space industry

License

MIT — see LICENSE.

Built by Misha as part of Zero G Talent.

About

AI-powered resume scanner for the space industry, built with NVIDIA Nemotron vision model

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors