Skip to content

suthaharan/NovaJobReady

Repository files navigation

Nova JobReady

An autonomous Career Intelligence & Job Application Agent that helps users apply to relevant jobs in a truthful, ATS-friendly, and professional manner.

Core Technologies

Nova Act and Nova Lite are the key technologies powering this project:

  • Nova Lite: AI text processing engine for job analysis, matching, and resume tailoring (Phases 1-3)
  • Nova Act: Browser automation engine for automated job application submission (Phase 4)

Project Overview

Nova JobReady is a secure, local job-automation system that operates in four sequential phases:

  1. Job Capture & Structured Storage (Nova Lite) - Extract and store job posting data
  2. Match Evaluation & Decision (Nova Lite) - Compute job-candidate match scores
  3. Resume Tailoring (Nova Lite) - Create ATS-optimized resume versions (only if decision = "APPLY")
  4. Application Automation (Nova Act) - Automate job applications using browser automation

Features

Phase 1: Job Capture (Nova Lite)

  • Automatic Job Scraping: Extracts job content from Indeed, LinkedIn, Glassdoor, and other job boards
  • Structured Data Extraction: Automatically extracts:
    • Job title, company name, location
    • Required and preferred skills
    • Job responsibilities
    • Seniority level
    • Salary range (if available)
    • ATS keywords
  • Manual Input Support: Paste job text directly if URL scraping fails
  • Job ID Generation: Unique identifiers for each captured job

Phase 2: Match Evaluation (Nova Lite)

  • Intelligent Matching: Weighted scoring system evaluating:
    • Required skills match (40% weight)
    • Responsibilities alignment (30% weight)
    • Preferred skills (10% weight)
    • Seniority fit (10% weight)
    • Keyword density (10% weight)
  • Automated Decision Making:
    • ≥ 75%APPLY (Strong match)
    • 50-74%MANUAL_REVIEW (Moderate match)
    • < 50%SKIP (Low match)
  • Detailed Reasoning: 3-7 sentence explanation of match decision
  • Score Breakdown: Individual scores for each evaluation category

Phase 3: Resume Tailoring (Nova Lite)

  • ATS-Optimized Resumes: Creates job-specific resume versions
  • Truthful Content: Never invents, exaggerates, or adds skills/experience
  • Keyword Integration: Naturally incorporates job-specific keywords
  • Experience Reordering: Moves most relevant experience higher
  • Professional Summary: Rewritten to mirror job title + top keywords
  • Tailored Components: Summary and experience highlights for each job

Phase 4: Application Automation (Nova Act)

  • Browser Automation: Navigates to application pages
  • Form Filling: Intelligently fills all form fields
  • File Uploads: Handles resume file uploads
  • Field Handling: Manages dropdowns, checkboxes, optional fields
  • Form Validation: Validates form completeness before submission
  • Status Tracking: Updates application status automatically

Additional Features

  • Resume Management: Upload, view, and manage multiple resumes
  • Active Resume Selection: Set one resume as active for applications
  • Candidate Profile: Manage professional profile information
  • Application Tracking: Track all job applications with status
  • Match History: View all match evaluations and decisions
  • Dashboard Analytics: View statistics and insights
  • User Management: Admin panel for user management
  • Pagination: Efficient pagination for all list views

Technology Stack

  • Backend: Django 6.0, Django REST Framework
  • Frontend: React (Vite)
  • Database: MySQL (configurable to SQLite for development)
  • AI Services:
    • Nova Lite (AWS Bedrock) - Text generation and analysis
    • Nova Act (AWS Bedrock) - Browser automation and form handling
  • Web Scraping: BeautifulSoup4, Requests
  • Authentication: Token-based authentication

How to Identify Nova Act vs Nova Lite Usage

In the Application

Nova Lite Indicators (Phases 1-3):

  1. Phase 1 - Job Capture:

    • Look for structured job data extraction
    • Check for extracted skills, responsibilities, seniority level
    • Verify job posting analysis in database
    • API Endpoint: POST /api/job-postings/capture/
    • Service Method: NovaLiteService.analyze_job_posting()
  2. Phase 2 - Match Evaluation:

    • Check for match scores (0-100)
    • Look for decision: APPLY, MANUAL_REVIEW, or SKIP
    • Review detailed reasoning and score breakdown
    • API Endpoint: POST /api/job-postings/{uuid}/evaluate/
    • Service Method: NovaLiteService.evaluate_match()
    • Database Model: MatchEvaluation
  3. Phase 3 - Resume Tailoring:

    • Check for tailored resume summary
    • Review updated experience highlights
    • Verify job-specific keyword integration
    • API Endpoint: POST /api/job-postings/{uuid}/tailor-resume/
    • Service Method: NovaLiteService.tailor_resume()
    • Database Model: ResumeVersion

Nova Act Indicators (Phase 4):

  1. Phase 4 - Application Automation:
    • Check application status: Applied or Application Failed
    • Verify application_date is set
    • Review application_url for submission confirmation
    • API Endpoint: POST /api/job-postings/{uuid}/apply/
    • Service Method: NovaActService.automate_application()
    • Database Model: JobApplication

In the Code

Nova Lite Usage:

# File: api/job_services.py
from api.job_services import NovaLiteService

nova_service = NovaLiteService()
# Phase 1
job_data = nova_service.analyze_job_posting(job_text, job_url)
# Phase 2
evaluation = nova_service.evaluate_match(job_data, candidate_data, resume_data)
# Phase 3
tailored = nova_service.tailor_resume(job_data, resume_data)

Nova Act Usage:

# File: api/job_services.py
from api.job_services import NovaActService

nova_act = NovaActService()
# Phase 4
result = nova_act.automate_application(job_url, candidate_data, resume_file_path)

In the Database

Nova Lite Records:

  • JobPosting: Created in Phase 1, contains structured job data
  • MatchEvaluation: Created in Phase 2, contains scores and decision
  • ResumeVersion: Created in Phase 3, contains tailored content

Nova Act Records:

  • JobApplication: Updated in Phase 4, contains application status and date

In the Logs

Nova Lite Log Messages:

"Initializing Nova Lite Bedrock client in region: us-east-1"
"Nova Lite Bedrock client initialized successfully"
"Using Nova Lite to analyze job posting"
"Using Nova Lite to evaluate match"
"Using Nova Lite to tailor resume"

Nova Act Log Messages:

"Initializing Nova Act Bedrock client in region: us-east-1"
"Nova Act Bedrock client initialized successfully"
"Using Nova Act to automate application"
"Application submitted successfully via Nova Act"

In the Frontend

Nova Lite UI Indicators:

  • Phase 1: "Capture Job Posting" button → Shows structured job data
  • Phase 2: "Evaluate Match" button → Shows match score and decision
  • Phase 3: "Tailor Resume" button → Shows tailored resume content

Nova Act UI Indicators:

  • Phase 4: "Apply to Job" button → Shows application status
  • Application status badge: Applied (green) or Application Failed (red)
  • Application date displayed in job applications list

Development Setup

Prerequisites

  • Python 3.10+
  • Node.js 18+
  • MySQL 8.0+ (or SQLite for development)
  • AWS Account with Bedrock access (for production)

Backend Setup

  1. Create virtual environment:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install dependencies:
pip install -r requirements.txt
  1. Configure environment:
cp .env.sample .env
# Edit .env with your database and AWS credentials
  1. Run migrations:
python manage.py migrate
  1. Create superuser:
python manage.py createsuperuser
  1. Start development server:
python manage.py runserver

Frontend Setup

  1. Install dependencies:
cd frontend
npm install
  1. Start development server:
npm run dev

Testing AWS Credentials

Run the test command to verify AWS credentials:

python manage.py test_aws_credentials

API Endpoints

Job Postings

  • GET /api/job-postings/ - List all job postings
  • POST /api/job-postings/capture/ - Capture new job posting (Phase 1 - Nova Lite)
  • GET /api/job-postings/{uuid}/ - Get job posting details
  • POST /api/job-postings/{uuid}/evaluate/ - Evaluate match (Phase 2 - Nova Lite)
  • POST /api/job-postings/{uuid}/tailor-resume/ - Tailor resume (Phase 3 - Nova Lite)
  • POST /api/job-postings/{uuid}/apply/ - Apply to job (Phase 4 - Nova Act)

Match Evaluations

  • GET /api/match-evaluations/ - List all match evaluations
  • GET /api/match-evaluations/{uuid}/ - Get match evaluation details

Job Applications

  • GET /api/job-applications/ - List all job applications
  • GET /api/job-applications/{uuid}/ - Get job application details

Resumes

  • GET /api/resumes/ - List all resumes
  • POST /api/resumes/ - Upload new resume
  • GET /api/resumes/{uuid}/ - Get resume details
  • PATCH /api/resumes/{uuid}/ - Update resume (e.g., set active)

Candidate Profile

  • GET /api/candidate-profiles/ - Get candidate profile
  • POST /api/candidate-profiles/ - Create candidate profile
  • PATCH /api/candidate-profiles/{uuid}/ - Update candidate profile

License

See LICENSE file for details.

About

Nova JobReady - Demo application

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors