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.
- π€ 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
- 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
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
git clone <repository-url>
cd job_hunterThe project's dependencies are located in the extension_webpack directory:
cd extension_webpack
npm installFor active development with live reload:
npm run startThis command runs both:
- Tailwind CSS watcher for style updates
- Webpack dev server for hot module replacement
To create a production-ready build:
npm run buildThis compiles the source code and packages it into the extension_webpack/dist directory.
- Open Google Chrome and navigate to
chrome://extensions - Enable "Developer mode" using the toggle switch in the top right corner
- Click on the "Load unpacked" button
- Select the
extension_webpack/distdirectory from your project folder - The Job Hunter extension should now be loaded and visible in your browser's toolbar
After loading the extension:
- Click the Job Hunter icon in your Chrome toolbar
- Complete the initial profile setup with your personal information
- Upload your resume(s) in the Profile section
- Configure your AI provider in Settings
Before using AI-powered features, configure at least one AI provider:
- Get your API key from OpenAI Platform
- In the extension, go to Settings β Add Provider
- Select "OpenAI" from the dropdown
- Enter your API key
- Choose a model (e.g.,
gpt-4,gpt-3.5-turbo) - Click "Set as Active"
- Get your API key from Google AI Studio
- In the extension, go to Settings β Add Provider
- Select "Gemini" from the dropdown
- Enter your API key
- Choose a model (e.g.,
gemini-2.0-flash-exp,gemini-1.5-pro) - Click "Set as Active"
- Install Ollama from ollama.ai
- Start Ollama server:
ollama serve - Pull a model:
ollama pull llama3.1 - In the extension, go to Settings β Add Provider
- Select "Ollama" from the dropdown
- Host URL defaults to
http://localhost:11434 - Click refresh to load available models
- Select your model and click "Set as Active"
Important: Start Ollama with CORS support:
OLLAMA_ORIGINS='chrome-extension://*' ollama serve- Enable "Encryption" in Settings
- Set a secure passcode (minimum 4 characters)
- This passcode encrypts all your data locally
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_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
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
The Job Hunter extension follows several key architectural patterns:
- 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
- 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
- Provider Agnostic: Support for OpenAI, Gemini, and Ollama
- Fallback Strategy: Graceful degradation when providers fail
- Cost Optimization: User-controlled provider selection
- Manifest V3 Compliance: Modern extension architecture
- Content Script Isolation: Secure job board integration
- Service Worker: Background processing and coordination
- 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
- 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
- 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
The extension implements a multi-layer security approach:
- Key Derivation: User passcode β PBKDF2 (100K iterations) β AES-256-GCM key
- Data Encryption: All sensitive data encrypted before Chrome storage
- Session Management: Temporary keys cleared on extension restart
- Backward Compatibility: Graceful handling of unencrypted legacy data
- 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
- User can create profile with personal information
- Resume upload and parsing works correctly
- Multiple resumes can be managed
- Encryption setup functions properly
- Job scraping from Seek.com.au works
- Job scraping from LinkedIn works
- AI job matching generates scores
- Job filtering and search functions
- Resume tailoring for specific jobs
- Cover letter generation
- Application question answers
- AI provider error handling
- Passcode protection works
- Data encryption/decryption functions
- Session management works correctly
- No data leaks or exposures
# 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- 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
- 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
- Branching: Feature-based (
feature/resume-management) - Commits: Conventional Commits format
- Review: Code review required before merge
- Testing: Manual testing before production deployment
- Final Project Report: Comprehensive project methodology, results, and future recommendations
- Architecture Document: Detailed technical architecture analysis
- Product Requirements: Complete feature specifications and requirements
- Privacy Policy: Data handling and privacy information
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
# Clone your fork
git clone <your-fork-url>
cd job_hunter
# Install dependencies
cd extension_webpack
npm install
# Start development server
npm run startThis project is licensed under the ISC License - see the LICENSE file for details.
- Ensure you're loading the
distdirectory, notsrc - Check Chrome developer mode is enabled
- Verify all dependencies are installed
- Verify API key is correctly configured
- Check internet connection
- Ensure selected model is available
- Ensure you're on supported job board pages
- Check Chrome extension permissions
- Verify job board hasn't changed their HTML structure
- Ensure passcode is set and remembered
- Check if encryption is enabled in settings
- Try clearing extension data and re-setup
- Check the troubleshooting section
- Review the architecture documentation
- Open an issue on GitHub for bugs or feature requests
- Consult the Final Project Report for detailed technical information
- Enhanced job board support (Indeed, Glassdoor)
- Mobile optimization
- Advanced analytics dashboard
- Interview preparation features
- Team collaboration features
- Enterprise integrations
- Custom AI model training
- Advanced reporting tools
Built with β€οΈ for job seekers worldwide