A fully autonomous AI-powered job search and application system that automatically finds, ranks, and applies to job opportunities based on user profiles. Built for the AI Summit Hackathon 2026.

This project implements a complete end-to-end autonomous job application system with three main components:
- AI Agent Backend - Intelligent job matching, ranking, and application generation
- Frontend Dashboard - Real-time monitoring and control interface
- Sandbox Portal - Mock job board for safe testing and demonstration
- β Zero Human-in-the-Loop: Fully autonomous job search and application process
- β AI-Powered Resume Analysis: Extracts structured data from PDF resumes using LLM
- β Intelligent Job Matching: Vector similarity search for finding relevant opportunities
- β Personalized Applications: Generates tailored cover letters grounded in resume facts
- β Real-time Dashboard: WebSocket-based live updates and monitoring
- β Job Queue Management: Track and manage application status
- β Safety Controls: Kill switch and policy enforcement
- β Truthfulness Guarantee: No hallucination - all claims grounded in actual resume data
The system uses multiple specialized AI agents working together to automate the entire job application process. Here's how it works:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AUTONOMOUS JOB APPLICATION WORKFLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PHASE 1: USER SIGNUP & ARTIFACT GENERATION
βββββββββββββββββββββββββββββββββββββββββββ
User Uploads Resume PDF
β
βΌ
ββββββββββββββββββββββ
β Artifact Agent β
β (Generate_artifact)β
ββββββββββββββββββββββ€
β β’ Parses PDF β
β β’ Extracts facts β
β β’ No hallucination β
β β’ Creates artifact β
βββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Student Artifact Pack β
β ββββββββββββββββββββββββ β
β β’ Student Profile β
β - Education, Experience, Projects β
β - Skills (languages, frameworks) β
β - Links, Constraints β
β β’ Bullet Bank β
β - Pre-written achievement bullets β
β - Evidence strength ratings β
β β’ Answer Library β
β - Common Q&A pairs β
β β’ Proof Pack β
β - Supporting links & references β
βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
Stored in MongoDB
(student_artifacts collection)
PHASE 2: JOB RANKING & MATCHING
βββββββββββββββββββββββββββββββ
User Triggers Auto-Apply
β
βΌ
ββββββββββββββββββββββ
β Ranking Agent β
β (Ranking_agent) β
ββββββββββββββββββββββ€
β 1. Load artifact β
β 2. Generate β
β embeddings β
β 3. Vector search β
β in MongoDB β
β 4. Find top matchesβ
βββββββββββ¬βββββββββββ
β
βΌ
ββββββββββββββββββββββ
β Batch Reasoning β
β Agent β
β (Batch_Reasoning) β
ββββββββββββββββββββββ€
β β’ Analyzes each β
β job match β
β β’ Calculates β
β match scores β
β β’ Identifies β
β skill matches β
β β’ Justifies scores β
βββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Ranked Jobs (Top N) β
β ββββββββββββββββββββββββ β
β β’ Job ID, Title, Company β
β β’ Match Score (0-100) β
β β’ Matched Skills β
β β’ Location, Salary β
βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
Added to Job Queue
(job_queue collection)
PHASE 3: AUTO-APPLY PROCESS
ββββββββββββββββββββββββββββ
For each job in queue:
β
βΌ
ββββββββββββββββββββββ
β Application Agent β
β (Application_agent)β
ββββββββββββββββββββββ€
β Input: β
β β’ Job listing β
β β’ Student artifact β
β β
β Process: β
β β’ Generate tailoredβ
β cover letter β
β β’ Ground in facts β
β β’ No hallucination β
β β
β Output: β
β β’ Personalized β
β cover letter β
βββββββββββ¬βββββββββββ
β
βΌ
ββββββββββββββββββββββ
β Submit to Portal β
β (Sandbox/Real) β
ββββββββββββββββββββββ€
β β’ POST /api/apply β
β β’ Include resume β
β β’ Include cover β
β letter β
β β’ Handle retries β
β (chaos mode) β
βββββββββββ¬βββββββββββ
β
βΌ
Status: SUBMITTED
(or FAILED with retry)
Purpose: Extract structured data from resume PDF
Process:
- Reads PDF using PDFReader (chunked, 500 chars)
- Uses Groq LLM (llama-3.3-70b-versatile) with strict instructions
- Extracts ONLY verifiable facts from resume
- Creates structured artifact pack
Safety Rules:
- β NO invention, inference, or guessing
- β NO metrics unless explicitly stated
- β NO skills not explicitly listed
- β Truthfulness over completeness
Output Schema: UserArtifactPack
- Student Profile (education, experience, projects, skills)
- Bullet Bank (achievement statements with evidence strength)
- Answer Library (common application questions)
- Proof Pack (supporting links)
Purpose: Find most relevant jobs using vector similarity
Process:
- Converts student artifact to text
- Generates embeddings using HuggingFace (all-MiniLM-L6-v2)
- Performs vector search in MongoDB jobs collection
- Returns top N matches with similarity scores
Technology:
- Vector Database: MongoDB Atlas Vector Search
- Embeddings: Sentence Transformers
- Search Type: Cosine similarity
Output: List of job matches with:
- Job ID
- Vector similarity score
- Match reasoning (from Batch Reasoning Agent)
Purpose: Analyze and justify job matches
Process:
- Takes ranked job results from vector search
- Analyzes each job against student artifact
- Calculates detailed match scores:
- Skill Match Score (0-100)
- Experience Fit
- Overall Match Score
- Provides reasoning for each match
Scoring Logic:
- Skill Match: Looks for core technologies AND conceptual equivalents
- Experience Fit: Measures how projects demonstrate required work habits
- Domain Transfer: Recognizes engineering rigor across domains
Output: BatchJobMatch with detailed analysis for each job
Purpose: Generate personalized cover letters
Process:
- Takes job listing (title, company, description, skills)
- Takes student artifact (facts only)
- Uses Groq LLM to generate tailored cover letter
- Grounds ALL claims in actual resume data
Safety Rules:
- β ZERO hallucination
- β NO invented experience or numbers
- β Every claim must be traceable to artifact
- β Truthfulness prioritized over persuasion
Output: Personalized cover letter paragraph
When a user triggers auto-apply (POST /api/auto-apply/start), the system executes:
- Load user's resume artifact from MongoDB
- Validate artifact exists
- Initialize embedder (singleton)
- Stream status via WebSocket
- Run Ranking Agent to find matching jobs
- Process results with Batch Reasoning Agent
- Calculate match scores and skill overlaps
- Stream each ranked job in real-time
- Limit to top N jobs (default: 10)
- Add ranked jobs to application queue
- Check for duplicates
- Set status:
IN_PROGRESS - Stream queue updates via WebSocket
For each job in queue:
- Update status:
APPLYING - Fetch full job details from sandbox portal
- Run Application Agent to generate cover letter
- Submit application to portal
- Handle retries on failure (chaos mode)
- Update status:
SUBMITTEDorFAILED - Stream progress via WebSocket
- Send final summary (applied/failed counts)
- Update queue status
- Set agent status:
idle - Stream completion message
All phases stream progress via WebSocket (/ws/dashboard):
Message Types:
log: Text log messages (info, success, error, warning)queue_update: Job queue state changesstatus_update: Agent status (idle, running, error)job_update: Individual job status changesprocess_update: Progress updates (phase, current/total)
Example Flow:
// Connect to WebSocket
ws = new WebSocket('ws://localhost:8000/ws/dashboard?token=JWT_TOKEN');
// Receive updates
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
switch(data.type) {
case 'log':
console.log(data.message); // "π Starting Auto-Apply workflow..."
break;
case 'queue_update':
updateJobQueue(data.queue); // Real-time queue updates
break;
case 'job_update':
updateJobStatus(data.job); // Individual job status
break;
case 'process_update':
updateProgress(data); // Progress bar updates
break;
}
};βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER SIGNUP β
β Upload Resume PDF β Artifact Agent β Store Artifact β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AUTO-APPLY TRIGGER β
β POST /api/auto-apply/start β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 1: INITIALIZATION β
β β’ Load artifact β
β β’ Validate data β
β β’ Initialize agents β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 2: RANKING β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Ranking βββββΆβ Batch βββββΆβ Top N Jobs β β
β β Agent β β Reasoning β β Ranked β β
β β (Vector β β Agent β β β β
β β Search) β β (Analysis) β β β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 3: QUEUING β
β β’ Add jobs to queue β
β β’ Set status: IN_PROGRESS β
β β’ Check duplicates β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 4: AUTO-APPLY (if enabled) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β For each job: β β
β β 1. Application Agent β Generate Cover Letter β β
β β 2. Submit to Portal (Sandbox/Real) β β
β β 3. Handle Retries (Chaos Mode) β β
β β 4. Update Status: SUBMITTED / FAILED β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PHASE 5: COMPLETION β
β β’ Send summary β
β β’ Update final queue state β
β β’ Set agent status: idle β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The system consists of three independent applications:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (React) β
β Port: 5173 β
β - Landing Page β
β - Authentication β
β - Real-time Dashboard β
β - WebSocket Connection β
βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ
β
β HTTP/WebSocket
β
βββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ
β FASTAPI BACKEND (Python) β
β Port: 8000 β
β - REST API β
β - Authentication (JWT) β
β - Job Ranking Agent β
β - Application Agent β
β - Artifact Generation β
β - MongoDB Integration β
βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ
β
β HTTP API
β
βββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ
β SANDBOX PORTAL (Node.js) β
β Port: 4000 β
β - Mock Job Board β
β - Application Submission β
β - Chaos Mode (20% failure rate) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Framework: FastAPI 0.109.0
- Database: MongoDB (Motor async driver)
- Authentication: JWT (python-jose), bcrypt
- AI/ML:
- Groq LLM (llama-3.3-70b-versatile)
- Agno Agent Framework
- Sentence Transformers (HuggingFace embeddings)
- PyTorch
- Other: Uvicorn, Pydantic, python-multipart
- Framework: React 19.2.0 with Vite
- Routing: React Router DOM 7.13.0
- Styling: Tailwind CSS 4.1.18
- HTTP Client: Axios 1.13.4
- Icons: Lucide React
- 3D Graphics: OGL
- Runtime: Node.js
- Framework: Express
- Database: MongoDB (Mongoose)
- Features: Chaos mode for testing resilience
AI_Summit_Hackathon/
βββ ai-agent/
β βββ agent.py # AI agent functions (artifact generation, ranking, application)
β βββ Embed_Vector_DB.py # Vector database embedding utilities
β βββ schema.py # Pydantic schemas for artifacts
β βββ fastapi-backend/
β βββ main.py # FastAPI app entry point
β βββ models.py # Pydantic models
β βββ auth.py # Authentication utilities
β βββ database.py # MongoDB connection
β βββ websocket_manager.py # WebSocket connection management
β βββ requirements.txt # Python dependencies
β βββ routers/
β β βββ auth.py # Authentication endpoints
β β βββ users.py # User management endpoints
β β βββ jobs.py # Job ranking and queue endpoints
β β βββ auto_apply.py # Auto-apply functionality
β βββ API_DOCUMENTATION.md # API reference
β βββ ARCHITECTURE.md # System architecture details
β βββ README.md # Backend-specific documentation
β
βββ FrontEnd/
β βββ src/
β β βββ App.jsx # Main app component with routing
β β βββ main.jsx # React entry point
β β βββ component/
β β β βββ LandingPage.jsx # Landing page component
β β β βββ AuthPage.jsx # Authentication UI
β β β βββ Dashboard.jsx # Main dashboard
β β β βββ Galaxy.jsx # 3D background component
β β βββ index.css # Global styles
β βββ package.json # Node dependencies
β βββ vite.config.js # Vite configuration
β
βββ sandbox-portal/
β βββ src/
β β βββ server.js # Express server for mock job board
β βββ package.json # Node dependencies
β
βββ copilot_instructions.md # Development guidelines
βββ README.md # This file
- Python 3.8+
- Node.js 16+
- MongoDB Atlas account (or local MongoDB instance)
- Groq API key (Get one here)
git clone <repository-url>
cd AI_Summit_Hackathoncd ai-agent/fastapi-backend
# Create virtual environment (recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txtcd ../../FrontEnd
# Install dependencies
npm installcd ../sandbox-portal
# Install dependencies
npm installCreate a .env file with the following variables:
# MongoDB Connection
MONGO_URI=mongodb+srv://username:[email protected]/database_name
# JWT Secret Key (generate a secure random string)
SECRET_KEY=your-secret-key-here
# Groq API Key
GROQ_API_KEY=your-groq-api-key-here# MongoDB Connection (can be same as backend or different)
MONGO_URI=mongodb+srv://username:[email protected]/sandbox_dbYou'll need three terminal windows/tabs:
cd ai-agent/fastapi-backend
uvicorn main:app --reloadBackend will be available at: http://localhost:8000
- API Docs:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
cd FrontEnd
npm run devFrontend will be available at: http://localhost:5173
cd sandbox-portal
node src/server.jsSandbox Portal will be available at: http://localhost:4000
Visit http://localhost:4000 and click "Seed Database" to populate 50 sample jobs, or use:
curl -X POST http://localhost:4000/seedPOST /api/auth/signup
Content-Type: multipart/form-data
Fields:
- email (required)
- password (required, min 6 chars)
- resume (required, PDF file)
- work_authorization (optional)
- location_preference (optional)
- remote_preference (optional)
- start_date (optional)
- relocation (optional)
- salary_expectation (optional)POST /api/auth/signin
Content-Type: application/json
{
"email": "[email protected]",
"password": "password123"
}POST /api/jobs/rank
Authorization: Bearer <token>
Content-Type: application/json
{
"user_email": "[email protected]",
"max_results": 50
}GET /api/jobs/queue/status
Authorization: Bearer <token>POST /api/jobs/queue/add-batch
Authorization: Bearer <token>
Content-Type: application/json
{
"jobs": [
{"job_id": "123", "match_score": 85.5},
{"job_id": "456", "match_score": 78.2}
]
}POST /api/jobs/queue/{queue_item_id}/apply
Authorization: Bearer <token>POST /api/auto-apply/start
Authorization: Bearer <token>
Content-Type: application/json
{
"max_jobs": 10,
"auto_apply": true
}This endpoint:
- Ranks jobs based on user's artifact
- Adds top jobs to queue
- Auto-applies to each job (generates cover letters)
- Streams progress via WebSocket
Connect to real-time updates:
const ws = new WebSocket('ws://localhost:8000/ws/dashboard?token=YOUR_JWT_TOKEN');Message types:
log: Real-time log messagesqueue_update: Job queue updatesstatus_update: Agent status changesjob_update: Individual job status changesprocess_update: Progress updates during auto-apply
For complete API documentation, see:
- API_DOCUMENTATION.md
- Interactive docs:
http://localhost:8000/docs
When a user signs up with a resume, the system:
- Parses the PDF resume using PDFReader
- Extracts structured information using Groq LLM
- Creates a reusable artifact pack containing:
- Student Profile (education, experience, projects, skills)
- Bullet Bank (pre-formatted achievement statements)
- Answer Library (common application questions)
- Proof Pack (supporting links and references)
Safety: The agent is instructed to extract ONLY facts from the resume - no hallucinations.
Uses vector similarity search:
- Converts student artifact to embeddings using HuggingFace models
- Searches MongoDB vector index for similar job descriptions
- Returns ranked jobs with match scores (0-100)
- Highlights matched skills
Generates personalized cover letters:
- Takes job listing and student artifact as input
- Uses Groq LLM to create tailored cover letter
- All claims grounded in actual resume data
- No fabrication of experience or achievements
- WebSocket connection for live updates
- Job queue visualization
- Application status tracking
- Real-time logs
- Agent control (start/stop)
Mock job board for testing:
- 50+ dummy job listings
- Application submission endpoint
- Chaos mode: 20% random failures (HTTP 500/429/503)
- Tests agent retry logic and resilience
- β Password hashing with bcrypt
- β JWT token authentication
- β CORS protection
- β Input validation with Pydantic
- β File type validation (PDF only)
- β Secure environment variable management
# Health check
curl http://localhost:8000/health
# Test signup (replace with actual file path)
curl -X POST "http://localhost:8000/api/auth/signup" \
-F "[email protected]" \
-F "password=test123" \
-F "resume=@/path/to/resume.pdf"# Get all jobs
curl http://localhost:4000/api/jobs
# Submit application
curl -X POST http://localhost:4000/api/apply \
-H "Content-Type: application/json" \
-d '{
"jobId": "job_id_here",
"applicantName": "Test User",
"resumeText": "Resume content...",
"coverLetter": "Cover letter content..."
}'-
users: User accounts and authentication
- email, password hash, resume (base64), artifact_id, FAQ answers
-
student_artifacts: AI-generated resume artifacts
- user_email, artifact_data (structured profile), timestamps
-
job_queue: User job application queue
- user_email, job_id, status, match_score, cover_letter, timestamps
-
jobs: Available job listings (in sandbox portal)
- title, company, location, description, requiredSkills, salary
-
applications: Submitted applications (in sandbox portal)
- jobId, applicantName, resumeText, coverLetter, status
- LandingPage: Welcome page with project overview
- AuthPage: Sign up and sign in forms with resume upload
- Dashboard: Main interface with:
- Real-time job queue
- Application status
- Live logs
- Agent controls
- Statistics
- Resume processing is synchronous (may take 2-5 seconds)
- Vector embeddings require initial model download
- Sandbox portal uses hardcoded MongoDB connection (update for production)
- Auto-apply to external portals requires portal-specific integrations
- Async resume processing
- Support for multiple resume formats
- Integration with real job boards (LinkedIn, Indeed, etc.)
- Advanced filtering and search
- Email notifications
- Application tracking and analytics
- Multi-user support with roles
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project was created for the AI Summit Hackathon 2026.
Built by the AI Summit Hackathon team.
- Groq for LLM API access
- MongoDB for database hosting
- FastAPI and React communities for excellent frameworks
- Agno framework for agent capabilities
Status: π Active Development
For questions or issues, please open an issue on the repository.