Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

65 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Job Hunter - AI-Powered Job Application Assistant

Chrome Extension React TypeScript Manifest V3

Job Hunter is a powerful Chrome extension that automates and streamlines your job application process. It combines AI-powered content generation with job board integration to help you discover relevant opportunities, generate tailored application materials, and track your progress efficiently.

πŸš€ Key Features

  • πŸ€– AI-Powered Content Generation: Create tailored resumes, cover letters, and application answers using OpenAI, Gemini, or local Ollama models
  • πŸ“„ Multi-Resume Management: Upload and organize multiple resume versions for different job types
  • 🎯 Smart Job Matching: Automated job discovery from Seek and LinkedIn with AI-powered compatibility scoring
  • πŸ”’ Privacy-First Security: AES-256-GCM encryption with local-only data storage
  • ⚑ Auto-Fill Integration: Intelligent form detection and population across job boards
  • πŸ“Š Application Tracking: Monitor your job search progress and application history

Screenshots

image image image image image

πŸ› οΈ Technology Stack

  • Frontend: React 19.1.1, TypeScript 5.8.3, Tailwind CSS 4.1.11
  • Build System: Webpack 5.101.0, Babel, Tailwind CLI
  • Chrome Extension: Manifest V3 with Service Worker
  • Security: AES-256-GCM encryption with PBKDF2
  • AI Integration: OpenAI, Google Gemini, Ollama support

πŸ“‹ Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js (v18 or later) - Download here
  • npm (v8 or later) - Comes with Node.js
  • Google Chrome (latest version)
  • Git - Download here

πŸ”§ Installation & Setup

1. Clone the Repository

git clone <repository-url>
cd job_hunter

2. Install Dependencies

The project's dependencies are located in the extension_webpack directory:

cd extension_webpack
npm install

3. Development Mode

For active development with live reload:

npm run start

This command runs both:

  • Tailwind CSS watcher for style updates
  • Webpack dev server for hot module replacement

4. Production Build

To create a production-ready build:

npm run build

This compiles the source code and packages it into the extension_webpack/dist directory.

🌐 Loading the Extension in Chrome

  1. Open Google Chrome and navigate to chrome://extensions
  2. Enable "Developer mode" using the toggle switch in the top right corner
  3. Click on the "Load unpacked" button
  4. Select the extension_webpack/dist directory from your project folder
  5. The Job Hunter extension should now be loaded and visible in your browser's toolbar

First-Time Setup

After loading the extension:

  1. Click the Job Hunter icon in your Chrome toolbar
  2. Complete the initial profile setup with your personal information
  3. Upload your resume(s) in the Profile section
  4. Configure your AI provider in Settings

βš™οΈ Configuration

AI Provider Setup

Before using AI-powered features, configure at least one AI provider:

OpenAI Configuration

  1. Get your API key from OpenAI Platform
  2. In the extension, go to Settings β†’ Add Provider
  3. Select "OpenAI" from the dropdown
  4. Enter your API key
  5. Choose a model (e.g., gpt-4, gpt-3.5-turbo)
  6. Click "Set as Active"

Google Gemini Configuration

  1. Get your API key from Google AI Studio
  2. In the extension, go to Settings β†’ Add Provider
  3. Select "Gemini" from the dropdown
  4. Enter your API key
  5. Choose a model (e.g., gemini-2.0-flash-exp, gemini-1.5-pro)
  6. Click "Set as Active"

Ollama (Local Models) Configuration

  1. Install Ollama from ollama.ai
  2. Start Ollama server: ollama serve
  3. Pull a model: ollama pull llama3.1
  4. In the extension, go to Settings β†’ Add Provider
  5. Select "Ollama" from the dropdown
  6. Host URL defaults to http://localhost:11434
  7. Click refresh to load available models
  8. Select your model and click "Set as Active"

Important: Start Ollama with CORS support:

OLLAMA_ORIGINS='chrome-extension://*' ollama serve

Security Setup

  1. Enable "Encryption" in Settings
  2. Set a secure passcode (minimum 4 characters)
  3. This passcode encrypts all your data locally

πŸ“ Project Directory Structure

Root-Level Structure

job_hunter/
β”œβ”€β”€ .git/                           # Git version control
β”œβ”€β”€ .gitignore                      # Git ignore patterns
β”œβ”€β”€ README.md                       # This file
β”œβ”€β”€ description.md                  # Project description
β”œβ”€β”€ privacy_policy.md              # Privacy policy
β”œβ”€β”€ package.json                   # Root package configuration
β”œβ”€β”€ AGENTS.md                      # OpenSpec instructions
β”‚
β”œβ”€β”€ extension_webpack/              # Main application source
β”‚   β”œβ”€β”€ src/                       # Source code
β”‚   β”‚   β”œβ”€β”€ components/           # React components
β”‚   β”‚   β”œβ”€β”€ pages/                # Route components
β”‚   β”‚   β”œβ”€β”€ services/             # Business logic services
β”‚   β”‚   β”œβ”€β”€ content-scripts/      # Chrome extension scripts
β”‚   β”‚   β”œβ”€β”€ background/           # Service worker
β”‚   β”‚   β”œβ”€β”€ assets/               # Static resources
β”‚   β”‚   β”œβ”€β”€ scripts/              # Build scripts
β”‚   β”‚   β”œβ”€β”€ App.tsx               # Main application
β”‚   β”‚   β”œβ”€β”€ Root.tsx              # Application root
β”‚   β”‚   β”œβ”€β”€ index.tsx             # Entry point
β”‚   β”‚   β”œβ”€β”€ index.html            # HTML template
β”‚   β”‚   β”œβ”€β”€ popup.ts              # Extension popup
β”‚   β”‚   β”œβ”€β”€ popup.html            # Popup HTML
β”‚   β”‚   β”œβ”€β”€ manifest.json         # Extension manifest
β”‚   β”‚   β”œβ”€β”€ style.css             # Compiled styles
β”‚   β”‚   β”œβ”€β”€ tailwind.css          # Tailwind source
β”‚   β”‚   └── custom.d.ts           # TypeScript declarations
β”‚   β”œβ”€β”€ dist/                     # Built extension (generated)
β”‚   β”œβ”€β”€ package.json              # Dependencies
β”‚   β”œβ”€β”€ webpack.config.js         # Build configuration
β”‚   β”œβ”€β”€ tailwind.config.cjs       # Tailwind configuration
β”‚   └── tsconfig.json             # TypeScript configuration
β”‚
β”œβ”€β”€ docs/                          # Project documentation
β”‚   β”œβ”€β”€ FINAL_PROJECT_REPORT.md    # Comprehensive project report
β”‚   β”œβ”€β”€ PROJECT_METRICS.md         # Performance metrics & results
β”‚   β”œβ”€β”€ TECHNICAL_ARCHITECTURE.md  # Technical documentation
β”‚   β”œβ”€β”€ prd/                      # Product Requirements Documents
β”‚   β”‚   β”œβ”€β”€ requirements.md        # Functional & non-functional requirements
β”‚   β”‚   β”œβ”€β”€ epic-*.md             # Epic documentation
β”‚   β”‚   β”œβ”€β”€ user-interface-enhancement-goals.md
β”‚   β”‚   └── technical-constraints-and-integration-requirements.md
β”‚   β”œβ”€β”€ stories/                  # User stories
β”‚   β”‚   β”œβ”€β”€ 1.1.story.md
β”‚   β”‚   β”œβ”€β”€ 1.2.story.md
β”‚   β”‚   └── 1.3.story.md
β”‚   └── architecture.md           # Architecture analysis
β”‚
β”œβ”€β”€ openspec/                      # OpenSpec system files
β”‚   β”œβ”€β”€ AGENTS.md                  # Agent instructions
β”‚   β”œβ”€β”€ project.md                # Project specifications
β”‚   β”œβ”€β”€ changes/                  # Change proposals
β”‚   β”‚   β”œβ”€β”€ modernize-progress-button/
β”‚   β”‚   β”œβ”€β”€ search-filter-redesign/
β”‚   β”‚   β”œβ”€β”€ answer-generation-redesign/
β”‚   β”‚   └── archive/
β”‚   β”œβ”€β”€ specs/                    # Detailed specifications
β”‚   β”‚   β”œβ”€β”€ ui-redesign/
β”‚   β”‚   └── webpage-integration/
β”‚   └── proposals/                # Enhancement proposals
β”‚       └── aes-256-gcm-encryption.md
β”‚
β”œβ”€β”€ .augment/                      # Augment system
β”‚   └── commands/                  # Custom commands
β”‚       β”œβ”€β”€ openspec-apply.md
β”‚       β”œβ”€β”€ openspec-archive.md
β”‚       └── openspec-proposal.md
β”‚
└── .github/                      # GitHub configuration
    └── ...                       # CI/CD workflows

Extension Source Structure

extension_webpack/src/
β”œβ”€β”€ components/                   # Reusable React components
β”‚   β”œβ”€β”€ ui/                      # Design system components
β”‚   β”‚   β”œβ”€β”€ Button.tsx           # Modern button with variants
β”‚   β”‚   β”œβ”€β”€ Card.tsx             # Content container
β”‚   β”‚   β”œβ”€β”€ Input.tsx            # Form inputs
β”‚   β”‚   β”œβ”€β”€ Modal.tsx            # Modal dialogs
β”‚   β”‚   β”œβ”€β”€ Header.tsx           # Page header
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ passcode/                # Authentication components
β”‚   β”œβ”€β”€ Layout.tsx               # Main application layout
β”‚   └── ...
β”‚
β”œβ”€β”€ pages/                       # Route components
β”‚   β”œβ”€β”€ JobsPage.tsx             # Job discovery & matching
β”‚   β”œβ”€β”€ ProfilePage.tsx          # User profile management
β”‚   β”œβ”€β”€ SettingsPage.tsx         # AI provider configuration
β”‚   β”œβ”€β”€ HistoryPage.tsx          # Application tracking
β”‚   β”œβ”€β”€ PrivacyPolicyPage.tsx    # Privacy policy display
β”‚   β”œβ”€β”€ DesignSystemPage.tsx     # Component documentation
β”‚   └── AnswerGenerationPage.tsx # AI answer generation
β”‚
β”œβ”€β”€ services/                    # Business logic services
β”‚   β”œβ”€β”€ storageService.ts        # Chrome storage with encryption
β”‚   β”œβ”€β”€ llmService.ts            # AI provider integration
β”‚   β”œβ”€β”€ encryptionService.ts     # AES-256-GCM encryption
β”‚   β”œβ”€β”€ seekService.ts           # Job board API integration
β”‚   └── errorService.ts          # Error handling framework
β”‚
β”œβ”€β”€ content-scripts/             # Chrome extension scripts
β”‚   β”œβ”€β”€ seek.ts                  # Seek.com.au scraping
β”‚   β”œβ”€β”€ linkedin.ts              # LinkedIn integration
β”‚   β”œβ”€β”€ autofill.ts              # Form auto-fill
β”‚   └── answerGeneration.ts      # Answer generation overlay
β”‚
β”œβ”€β”€ background/                  # Service worker
β”‚   └── background.ts            # Core extension logic
β”‚
└── assets/                      # Static resources
    β”œβ”€β”€ icons/                   # Extension icons
    └── fonts/                   # Custom fonts

Documentation Structure

docs/
β”œβ”€β”€ FINAL_PROJECT_REPORT.md      # Executive summary & results
β”œβ”€β”€ PROJECT_METRICS.md           # KPIs & performance data
β”œβ”€β”€ TECHNICAL_ARCHITECTURE.md    # System architecture
└── prd/                         # Product requirements
    β”œβ”€β”€ requirements.md          # Functional & non-functional
    β”œβ”€β”€ epic-1-ui-ux-overhaul.md # UI/UX redesign specifications
    β”œβ”€β”€ epic-2-multiple-resume-support.md
    β”œβ”€β”€ user-interface-enhancement-goals.md
    └── technical-constraints-and-integration-requirements.md

πŸ—οΈ Architecture Overview

Key Architectural Patterns

The Job Hunter extension follows several key architectural patterns:

1. Service-Oriented Architecture

  • Separation of Concerns: Business logic isolated from UI components
  • Single Source of Truth: Centralized service layer for data operations
  • Dependency Injection: Services communicate through well-defined interfaces

2. Privacy-by-Design Architecture

  • Local-First Storage: All data remains on user's device
  • Encryption at Rest: AES-256-GCM for sensitive information
  • Zero-Trust Security: No server-side data processing

3. Multi-Provider AI Abstraction

  • Provider Agnostic: Support for OpenAI, Gemini, and Ollama
  • Fallback Strategy: Graceful degradation when providers fail
  • Cost Optimization: User-controlled provider selection

4. Chrome Extension Integration

  • Manifest V3 Compliance: Modern extension architecture
  • Content Script Isolation: Secure job board integration
  • Service Worker: Background processing and coordination

Core Services

Storage Service (storageService.ts)

  • Chrome storage API wrapper with encryption support
  • Profile and job data management with local-first architecture
  • Multiple resume storage with parsing and extraction
  • Backward compatibility with legacy unencrypted data

LLM Service (llmService.ts)

  • Multi-provider AI integration (OpenAI, Gemini, Ollama)
  • Content generation with comprehensive error handling and retries
  • Model selection and API management with cost optimization
  • Job matching and compatibility scoring using semantic analysis

Encryption Service (encryptionService.ts)

  • AES-256-GCM encryption using Web Crypto API
  • PBKDF2 key derivation (100,000 iterations) with unique salt per operation
  • Secure passcode-based key management with session cleanup
  • Zero-knowledge architecture where even extension cannot access user data

πŸ”’ Security Architecture

Encryption Implementation

The extension implements a multi-layer security approach:

  1. Key Derivation: User passcode β†’ PBKDF2 (100K iterations) β†’ AES-256-GCM key
  2. Data Encryption: All sensitive data encrypted before Chrome storage
  3. Session Management: Temporary keys cleared on extension restart
  4. Backward Compatibility: Graceful handling of unencrypted legacy data

Data Protection

  • Local-Only Storage: No data transmitted to external servers
  • API Key Security: All API keys encrypted before storage
  • User Data Sovereignty: Complete user control over personal information
  • Privacy Compliance: No tracking or analytics collection

πŸ§ͺ Testing & Quality Assurance

Manual Testing Checklist

Profile Setup

  • User can create profile with personal information
  • Resume upload and parsing works correctly
  • Multiple resumes can be managed
  • Encryption setup functions properly

Job Discovery

  • Job scraping from Seek.com.au works
  • Job scraping from LinkedIn works
  • AI job matching generates scores
  • Job filtering and search functions

Content Generation

  • Resume tailoring for specific jobs
  • Cover letter generation
  • Application question answers
  • AI provider error handling

Security Features

  • Passcode protection works
  • Data encryption/decryption functions
  • Session management works correctly
  • No data leaks or exposures

Testing Commands

# Run development server
npm run start

# Build for production testing
npm run build

# Load unpacked extension in Chrome
# Navigate to chrome://extensions/ and load extension_webpack/dist

πŸš€ Development Guidelines

Code Style

  • TypeScript Strict Mode: All code written with strict type checking
  • Functional Components: React hooks pattern for state management
  • Service Layer: Business logic separated from UI components
  • Error Handling: Comprehensive try-catch blocks with user feedback

Naming Conventions

  • Components: PascalCase (e.g., ProfileForm.tsx)
  • Services: camelCase (e.g., storageService.ts)
  • Constants: UPPER_SNAKE_CASE (e.g., API_ENDPOINTS)
  • Files: kebab-case for non-component files

Git Workflow

  • Branching: Feature-based (feature/resume-management)
  • Commits: Conventional Commits format
  • Review: Code review required before merge
  • Testing: Manual testing before production deployment

πŸ“š Additional Documentation

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Development Setup

# Clone your fork
git clone <your-fork-url>
cd job_hunter

# Install dependencies
cd extension_webpack
npm install

# Start development server
npm run start

πŸ“„ License

This project is licensed under the ISC License - see the LICENSE file for details.

πŸ†˜ Support & Troubleshooting

Common Issues

Extension Won't Load

  • Ensure you're loading the dist directory, not src
  • Check Chrome developer mode is enabled
  • Verify all dependencies are installed

AI Features Not Working

  • Verify API key is correctly configured
  • Check internet connection
  • Ensure selected model is available

Job Scraping Fails

  • Ensure you're on supported job board pages
  • Check Chrome extension permissions
  • Verify job board hasn't changed their HTML structure

Encryption Issues

  • Ensure passcode is set and remembered
  • Check if encryption is enabled in settings
  • Try clearing extension data and re-setup

Getting Help

πŸ—ΊοΈ Roadmap

Version 1.1 (Upcoming)

  • Enhanced job board support (Indeed, Glassdoor)
  • Mobile optimization
  • Advanced analytics dashboard
  • Interview preparation features

Version 1.2 (Future)

  • Team collaboration features
  • Enterprise integrations
  • Custom AI model training
  • Advanced reporting tools

Built with ❀️ for job seekers worldwide

About

A powerful Chrome extension designed to streamline and automate your job application process Powered by AI

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages