Skip to content

anujkamdar/AI_Summit_Hackathon

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

15 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

12 hour AI Summit Hackathon - Autonomous Job Search & Auto-Apply Agent

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. Screenshot 2026-02-02 180056

🎯 Project Overview

This project implements a complete end-to-end autonomous job application system with three main components:

  1. AI Agent Backend - Intelligent job matching, ranking, and application generation
  2. Frontend Dashboard - Real-time monitoring and control interface
  3. Sandbox Portal - Mock job board for safe testing and demonstration

Core Features

  • βœ… 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

πŸ€– Agent Workflow

The system uses multiple specialized AI agents working together to automate the entire job application process. Here's how it works:

Complete Agent Workflow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    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)
Screenshot 2026-02-02 180220

Agent Types

1. Artifact Agent (Generate_artifact)

Purpose: Extract structured data from resume PDF

Process:

  1. Reads PDF using PDFReader (chunked, 500 chars)
  2. Uses Groq LLM (llama-3.3-70b-versatile) with strict instructions
  3. Extracts ONLY verifiable facts from resume
  4. 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)

2. Ranking Agent (Ranking_agent)

Purpose: Find most relevant jobs using vector similarity

Process:

  1. Converts student artifact to text
  2. Generates embeddings using HuggingFace (all-MiniLM-L6-v2)
  3. Performs vector search in MongoDB jobs collection
  4. 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)

3. Batch Reasoning Agent (Batch_Reasoning_Agent)

Purpose: Analyze and justify job matches

Process:

  1. Takes ranked job results from vector search
  2. Analyzes each job against student artifact
  3. Calculates detailed match scores:
    • Skill Match Score (0-100)
    • Experience Fit
    • Overall Match Score
  4. 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

4. Application Agent (Application_agent)

Purpose: Generate personalized cover letters

Process:

  1. Takes job listing (title, company, description, skills)
  2. Takes student artifact (facts only)
  3. Uses Groq LLM to generate tailored cover letter
  4. 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

Auto-Apply Workflow Phases

Screenshot 2026-02-02 180246

When a user triggers auto-apply (POST /api/auto-apply/start), the system executes:

Phase 1: Initialization

  • Load user's resume artifact from MongoDB
  • Validate artifact exists
  • Initialize embedder (singleton)
  • Stream status via WebSocket

Phase 2: Ranking

  • 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)

Phase 3: Queuing

  • Add ranked jobs to application queue
  • Check for duplicates
  • Set status: IN_PROGRESS
  • Stream queue updates via WebSocket

Phase 4: Auto-Apply (if enabled)

For each job in queue:

  1. Update status: APPLYING
  2. Fetch full job details from sandbox portal
  3. Run Application Agent to generate cover letter
  4. Submit application to portal
  5. Handle retries on failure (chaos mode)
  6. Update status: SUBMITTED or FAILED
  7. Stream progress via WebSocket

Phase 5: Completion

  • Send final summary (applied/failed counts)
  • Update queue status
  • Set agent status: idle
  • Stream completion message

Real-time Updates

All phases stream progress via WebSocket (/ws/dashboard):

Message Types:

  • log: Text log messages (info, success, error, warning)
  • queue_update: Job queue state changes
  • status_update: Agent status (idle, running, error)
  • job_update: Individual job status changes
  • process_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;
  }
};

Workflow Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    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                                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ—οΈ Architecture

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)                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ› οΈ Tech Stack

Backend (FastAPI)

  • 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

Frontend (React)

  • 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

Sandbox Portal (Node.js)

  • Runtime: Node.js
  • Framework: Express
  • Database: MongoDB (Mongoose)
  • Features: Chaos mode for testing resilience

πŸ“ Project Structure

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

πŸš€ Getting Started

Prerequisites

  • Python 3.8+
  • Node.js 16+
  • MongoDB Atlas account (or local MongoDB instance)
  • Groq API key (Get one here)

Installation

1. Clone the Repository

git clone <repository-url>
cd AI_Summit_Hackathon

2. Backend Setup

cd 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.txt

3. Frontend Setup

cd ../../FrontEnd

# Install dependencies
npm install

4. Sandbox Portal Setup

cd ../sandbox-portal

# Install dependencies
npm install

Environment Variables

Backend (.env in ai-agent/fastapi-backend/)

Create 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

Sandbox Portal (.env in sandbox-portal/)

# MongoDB Connection (can be same as backend or different)
MONGO_URI=mongodb+srv://username:[email protected]/sandbox_db

πŸƒ Running the Application

Start All Services

You'll need three terminal windows/tabs:

Terminal 1: Backend Server

cd ai-agent/fastapi-backend
uvicorn main:app --reload

Backend will be available at: http://localhost:8000

  • API Docs: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

Terminal 2: Frontend

cd FrontEnd
npm run dev

Frontend will be available at: http://localhost:5173

Terminal 3: Sandbox Portal

cd sandbox-portal
node src/server.js

Sandbox Portal will be available at: http://localhost:4000

Seed the Sandbox Portal

Visit http://localhost:4000 and click "Seed Database" to populate 50 sample jobs, or use:

curl -X POST http://localhost:4000/seed

πŸ“‘ API Documentation

Authentication Endpoints

Sign Up

POST /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)

Sign In

POST /api/auth/signin
Content-Type: application/json

{
  "email": "[email protected]",
  "password": "password123"
}

Job Management Endpoints

Rank Jobs

POST /api/jobs/rank
Authorization: Bearer <token>
Content-Type: application/json

{
  "user_email": "[email protected]",
  "max_results": 50
}

Get Queue Status

GET /api/jobs/queue/status
Authorization: Bearer <token>

Add Jobs to Queue

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}
  ]
}

Apply to Job

POST /api/jobs/queue/{queue_item_id}/apply
Authorization: Bearer <token>

Auto-Apply Endpoint

Start Auto-Apply Workflow

POST /api/auto-apply/start
Authorization: Bearer <token>
Content-Type: application/json

{
  "max_jobs": 10,
  "auto_apply": true
}

This endpoint:

  1. Ranks jobs based on user's artifact
  2. Adds top jobs to queue
  3. Auto-applies to each job (generates cover letters)
  4. Streams progress via WebSocket

WebSocket Connection

Connect to real-time updates:

const ws = new WebSocket('ws://localhost:8000/ws/dashboard?token=YOUR_JWT_TOKEN');

Message types:

  • log: Real-time log messages
  • queue_update: Job queue updates
  • status_update: Agent status changes
  • job_update: Individual job status changes
  • process_update: Progress updates during auto-apply

For complete API documentation, see:

πŸ”‘ Key Features Explained

1. Student Artifact Generation

When a user signs up with a resume, the system:

  1. Parses the PDF resume using PDFReader
  2. Extracts structured information using Groq LLM
  3. 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.

2. Job Ranking System

Uses vector similarity search:

  1. Converts student artifact to embeddings using HuggingFace models
  2. Searches MongoDB vector index for similar job descriptions
  3. Returns ranked jobs with match scores (0-100)
  4. Highlights matched skills

3. Application Agent

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

4. Real-time Dashboard

  • WebSocket connection for live updates
  • Job queue visualization
  • Application status tracking
  • Real-time logs
  • Agent control (start/stop)

5. Sandbox Portal

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

πŸ”’ Security Features

  • βœ… Password hashing with bcrypt
  • βœ… JWT token authentication
  • βœ… CORS protection
  • βœ… Input validation with Pydantic
  • βœ… File type validation (PDF only)
  • βœ… Secure environment variable management

πŸ§ͺ Testing

Test Backend API

# 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"

Test Sandbox Portal

# 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..."
  }'

πŸ“Š Database Collections

MongoDB Collections

  1. users: User accounts and authentication

    • email, password hash, resume (base64), artifact_id, FAQ answers
  2. student_artifacts: AI-generated resume artifacts

    • user_email, artifact_data (structured profile), timestamps
  3. job_queue: User job application queue

    • user_email, job_id, status, match_score, cover_letter, timestamps
  4. jobs: Available job listings (in sandbox portal)

    • title, company, location, description, requiredSkills, salary
  5. applications: Submitted applications (in sandbox portal)

    • jobId, applicantName, resumeText, coverLetter, status

🎨 Frontend Components

  • 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

🚧 Development Notes

Known Limitations

  • 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

Future Enhancements

  • 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

πŸ“ 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 some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project was created for the AI Summit Hackathon 2026.

πŸ‘₯ Authors

Built by the AI Summit Hackathon team.

πŸ™ Acknowledgments

  • 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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •