An AI-powered job matching agent built with CoreSpeed's Zypher framework that intelligently analyzes job descriptions and resumes to provide actionable insights and find matching opportunities.
- AI-Powered Skill Matching - Leverages LLaMA (Meta's open-source LLM) via Groq inference API for intelligent analysis
- Fit Score Calculation - Quantified match score (0-100) based on technical skill alignment
- Smart Job Discovery - Web search powered by Tavily API to find relevant opportunities
- Intelligent Filtering - Automatically excludes 36+ job boards, surfaces direct company postings only
- Resume Strength Analysis - Comprehensive resume quality assessment with ATS compatibility scoring
- AI Cover Letter Generator - Personalized cover letters tailored to specific job descriptions (body text only, no greeting/closing)
- Futuristic Dark Mode Design - Modern AI-themed interface with prominent animated gradients, glowing effects, and futuristic aesthetics
- Animated Visual Effects - Dynamic gradient animations, shimmer effects on logo and text, glowing borders, and scanline overlays for a cutting-edge look
- Glassmorphism & Depth - Multi-layer shadows, backdrop blur effects, and gradient borders create a sophisticated 3D appearance
- One-Page Progressive Disclosure - Seamless single-page experience with smooth transitions between states
- Desktop-Optimized Layout - Full-width design optimized for desktop screens with drag-to-resize panels
- AI Assistant-Like Interface - Conversational buttons and friendly, passionate tone throughout
- Multi-Format Resume Upload - Upload your resume as PDF, Word (DOCX/DOC), or TXT file for automatic text extraction
- Auto-Running Features - Resume strength analysis and job search run automatically after starting
- Side-by-Side Results - View analysis results and job search results simultaneously with resizable panels
- Smart Validation - Visual feedback and clear error messages for better UX
- Real-time Analysis - Streaming responses with live progress indicators
- Copy to Clipboard - One-click copy for generated cover letters
- Robust Fallback System - Local parser ensures functionality even when API quotas are exceeded
- Type-Safe Development - Built with TypeScript on Deno runtime
- Production-Ready - Error handling, validation, and graceful degradation built-in
- Comprehensive Logging - Detailed diagnostic logging for troubleshooting API issues
-
Install Deno:
curl -fsSL https://deno.land/install.sh | sh -
Configure API Keys:
Groq (Recommended - Free & Fast)
Uses LLaMA (Meta's open-source LLM) with Groq's high-performance inference API.
export GROQ_API_KEY="gsk-your-groq-api-key-here" export GROQ_MODEL="llama-3.1-8b-instant" # Optional - defaults to LLaMA 3.1 8B Instant
Get your key: https://console.groq.com/keys
Tavily (For Job Search)
export TAVILY_API_KEY="your-tavily-key"
Get your key: https://tavily.com
OpenAI (Alternative)
export OPENAI_API_KEY="sk-your-api-key-here" export OPENAI_MODEL="gpt-4o-mini" # Optional - defaults to gpt-4o-mini
Get your key: https://platform.openai.com/api-keys
Note: Groq is recommended for development (free tier available). OpenAI is used as a fallback if Groq API key is not configured. Tavily is optional—without it, the app uses mock data for demonstration.
deno task run:serverOpen http://localhost:8000 in your browser.
Note: The interface features a futuristic dark mode design with prominent animated gradients, glowing effects, and modern AI aesthetics. The design includes dynamic gradient animations (8-10s cycles), shimmer effects on the logo and "JobMatch AI" text (2s cycles), glowing borders, scanline overlays, and sophisticated glassmorphism effects for a cutting-edge user experience. The layout is optimized for desktop screens with drag-to-resize panels for side-by-side content.
-
Add your resume (required for all features) - You can either:
- Paste your resume text directly into the textarea, or
- Upload a file using the "📄 Upload Your Resume - I'll Take It From Here!" button:
- PDF files (
.pdf) - Full support - Word documents (
.docx,.doc) - DOCX fully supported, DOC with limited support - Text files (
.txt) - Full support
- PDF files (
- Text will be automatically extracted and populated into the textarea
- Button shows "✅ Upload Successful! Your Resume is Ready" after successful upload
-
Start JobMatch AI:
- Click "🚀 Let's Get Started! I'm Ready to Help You Find Your Dream Job"
- The resume input disappears with a smooth fade-out transition
- Resume Strength Analysis appears on the left (runs automatically)
- Job Search appears on the right (runs automatically without keywords)
- Both features run simultaneously and display results side-by-side
-
Refine Job Search (optional):
- Scroll down to see the "🎯 Refine Your Job Search" section
- Enter optional keywords: Job Type/Role, Location, Additional Keywords
- Click "🔍 Perfect! Let me find amazing opportunities that match exactly what you're looking for"
- New job results appear in the scrollable wrapper above the refine section
- Input fields clear automatically after search
-
Analyze Match & Generate Cover Letter:
- Click "💼 Excited about a specific role? Share the job description with me and I'll dive deep into analyzing your perfect match, then craft a compelling cover letter that showcases your strengths!"
- This button appears immediately but is disabled until the initial job search completes
- Once enabled, click it to reveal a full-page job description input
- Paste the job description and click "✨ Let's Do This! Analyze My Match & Create My Perfect Cover Letter"
- Analyze Match results appear on the left
- Cover Letter appears on the right with a copy-to-clipboard button
- Both results are displayed side-by-side with resizable panels
-
Navigation:
- Use "🔄 Found Another Great Opportunity? I'm Ready to Analyze It for You!" to analyze a different job
- Use "🔁 Want to review your resume strengths or search more jobs? Let's jump back." to return to the main results view
Note: The interface uses progressive disclosure - features appear and disappear smoothly as you progress through the workflow. All content fits within one page with internal scrolling for job results and long content areas.
jobmatch-ai/
├── src/
│ ├── agent.ts # Core Zypher agent logic (analysis, job search, resume strength, cover letter)
│ ├── server.ts # HTTP server & routing
│ └── tools/
│ ├── file_parser.ts # Multi-format file text extraction (PDF, Word, TXT)
│ ├── job_search.ts # Tavily integration
│ └── local_parser.ts # Fallback skill parser
├── sample/ # Sample data files
├── index.html # Modern responsive web interface
├── deno.json # Configuration
└── README.md
Core Framework
- Zypher (
@corespeed/zypher) - CoreSpeed's AI agent framework - LLaMA (Meta's open-source LLM) - Large language model for intelligent analysis (via Groq)
- Groq API - High-performance inference provider for LLaMA (fast, free tier available, recommended)
- OpenAI API - Alternative LLM provider (fallback if Groq is not configured)
- Tavily API - AI-optimized web search with content extraction
Runtime & Language
- Deno - Modern TypeScript runtime
- TypeScript - Type-safe development
- RxJS (
rxjs-for-await) - Reactive event streams
Additional Libraries
- pdf-parse - PDF text extraction for resume uploads
- mammoth - Word document (DOCX) text extraction
-
Resume Input
- Users can paste resume text or upload a file (PDF, Word, or TXT)
- Files are automatically parsed to extract text content:
- PDF: Uses
pdf-parselibrary - Word (DOCX): Uses
mammothlibrary - Word (DOC): Limited support, may require conversion to DOCX
- TXT: Direct text extraction
- PDF: Uses
- Extracted text is populated into the resume textarea
-
Agent Initialization
- Creates Zypher context and initializes model provider
- Uses LLaMA (Meta's open-source LLM) via Groq inference API for fast, cost-effective analysis
- Falls back to OpenAI if Groq API key is not configured
- Configures streaming support for real-time responses
-
Analysis Pipeline
- Structured prompt engineering for consistent JSON output
- Streaming response processing with event accumulation
- Post-processing: filters non-technical terms, validates skill matches, auto-corrects errors
- Comprehensive error handling with detailed logging
-
Job Discovery
- Tavily API searches web for relevant positions
- Intelligent filtering by job board name (catches all domain variations: .com, .ca, .co.uk, etc.)
- Automatically filters out 36+ job boards including LinkedIn, Indeed, Glassdoor, Eluta, Levels.fyi, Workopolis, and more
- AI analysis ranks top 3 matches by resume fit
- Returns structured results with match breakdowns
-
Resume Strength Analysis
- Comprehensive resume quality assessment
- ATS compatibility scoring
- Identifies strengths, weaknesses, and improvement areas
- Provides actionable suggestions for enhancement
- Falls back to local parser if AI analysis fails
-
Cover Letter Generation
- AI-generated personalized cover letters
- Automatically extracts company name from job description
- Tailored to match resume and job requirements
- Outputs clean body text only (greeting and closing removed for simplicity)
- Advanced cleanup to remove any prompt text or instructions
- One-click copy to clipboard functionality
-
Resilience
- Automatic fallback to local keyword-based parser on API failures
- Graceful degradation maintains core functionality
- Detailed diagnostic logging for troubleshooting
| Issue | Solution |
|---|---|
| API key not found | Verify environment variable: echo $GROQ_API_KEY |
| API quota exceeded | App automatically uses fallback parser; check limits at https://console.groq.com |
| Mock job data shown | Set TAVILY_API_KEY for real job search results |
| Port 8000 in use | Use PORT=9001 deno task run:server or kill existing process |
| Import errors | Always use deno task run:server (includes proper config) |
| Empty resume warning | Resume field will highlight in red if empty; paste text or upload file |
| File upload fails | Ensure file is PDF, DOCX, DOC, or TXT; check browser console for detailed errors |
| Cover letter includes prompt text | This is a known issue with some LLM responses; cleanup logic should remove it automatically |
| Resume analysis shows fallback message | Check server console logs for specific error (quota, rate limit, auth, etc.) |
- Default Behavior: LLaMA (Meta's open-source LLM) via Groq inference API is used if
GROQ_API_KEYis set; otherwise falls back to OpenAI - Skill Filtering: Only technical skills are analyzed (benefits, salary, etc. are excluded)
- Job Board Filtering: Filters by job board name (e.g., "glassdoor") to catch all domain variations (.com, .ca, .co.uk, etc.)
- Score Variance: LLM probabilistic nature may cause ±3-5 point variations (expected behavior)
- File Parsing:
- PDF uploads extract all text content. Some formatting (tables, columns) may be simplified, but all text is preserved for analysis
- Word DOCX files are fully supported
- Word DOC files (older format) have limited support - conversion to DOCX or PDF is recommended
- TXT files are directly extracted
- Multiple Operations: You can run multiple analyses or job searches - each new operation updates its respective results section
- Simultaneous Results: Analysis and job search results are displayed in separate sections and can be viewed simultaneously
- Cover Letter Format: Generated cover letters include only the body text (no greeting or closing) for maximum flexibility
- Diagnostic Logging: Server console includes detailed logging for API calls, errors, and response processing to aid in troubleshooting
✅ Repository: https://github.com/FelixNg1022/JobMatch-AI.git
✅ Run Instructions: See Quick Start section above
✅ Demo Video: [Link to your screen recording]
- Zypher Framework
- Deno Documentation
- LLaMA (Meta AI)
- Groq API Reference
- OpenAI API Documentation
- OpenAI API Reference
- Tavily API Docs
Built with ❤️ using CoreSpeed's Zypher framework