Skip to content

ideepkush/Job-Application-Automation-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 Job Application Automation System

A self-hosted AI pipeline that automatically discovers, scores, and tailors job applications — built with n8n, Claude API, PostgreSQL, and Docker.

n8n Claude Docker PostgreSQL


What It Does

Every 2 hours, the system automatically:

  1. Discovers jobs from RSS feeds (Jobicy, HN Who's Hiring)
  2. Extracts structured data from each job description using Claude AI
  3. Scores each job 0–100 against your resume and profile
  4. Filters to only jobs scoring ≥ 70 (configurable threshold)
  5. Tailors ATS-optimized resume bullets for the top 2 jobs
  6. Writes a personalized cover letter for the top 1 job
  7. Stores everything in PostgreSQL
  8. Sends a daily digest by email and Telegram at 8AM

The system never auto-submits applications — you review and apply manually.


Architecture

+----------------------------------------------------------+
|              LOCAL DOCKER ENVIRONMENT                    |
|                                                          |
|  +-------------+   +--------------+   +-------------+   |
|  |  job-n8n    |   | job-postgres |   |job-gotenberg|   |
|  | port: 5678  |<->|  port: 5432  |   | port: 3001  |   |
|  | Workflows   |   | Job storage  |   | PDF service |   |
|  +------+------+   +--------------+   +-------------+   |
|         |                                                |
+---------+------------------------------------------------+
          | External API calls
          v
+----------------------------------------------------------+
|  Claude API  |  RSS Feeds  |  Gmail SMTP  |  Telegram   |
+----------------------------------------------------------+

Tech Stack

Layer Technology Purpose
Orchestration n8n (self-hosted) Visual workflows, scheduling, node connections
AI / LLM Claude Haiku 4.5 Job extraction, scoring, resume tailoring, cover letters
Database PostgreSQL 15 Persistent storage for jobs, scores, materials
Containers Docker + Compose Isolated local services, one-command startup
Email Gmail SMTP Daily digest via App Password
Messaging Telegram Bot Real-time alerts and daily summaries
Job Sources RSS Feeds Jobicy, HN Who's Hiring (public feeds, no scraping)

Three Workflows

Workflow 01 — Job Discovery & Analysis (every 2 hours)

RSS Feeds → Compute Hashes (dedup) → Claude: Extract JD → Claude: Score Fit
→ Filter ≥70 → Top 2: Tailor Resume → Top 1: Cover Letter → PostgreSQL

Workflow 02 — Email Alert Processor (every 5 min)

Gmail IMAP → Extract URLs from alerts → Same analysis pipeline as WF01

Workflow 03 — Daily Digest (8AM daily)

Query PostgreSQL → Format HTML Email → Send via Gmail SMTP + Telegram Bot

Cost

Task Items/run Cost/call Run total
Claude Extract JD ~55 $0.00004 $0.0022
Claude Match Score ~55 $0.00004 $0.0022
Claude Tailor Resume top 2 $0.0002 $0.0004
Claude Cover Letter top 1 $0.0003 $0.0003
Total per run ~$0.005

~$1.80/month for 12 runs/day. Infrastructure: $0 (local Docker).


Quick Start

1. Prerequisites

  • Docker Desktop installed
  • Anthropic API key (console.anthropic.com)
  • Gmail App Password (myaccount.google.com → Security → App Passwords)
  • Telegram Bot token (optional — @BotFather)

2. Setup

git clone https://github.com/YOUR_USERNAME/job-automation
cd job-automation

# Copy env template and fill in your values
cp .env.example .env
nano .env  # or open in any editor

# Add your resume
cp resumes/base-resume.txt resumes/my-resume.txt
# Edit with your actual details

# Start everything
chmod +x start.sh stop.sh db.sh update.sh
./start.sh

3. Open n8n

http://localhost:5678

Log in → Import the 3 workflow JSON files from workflows/ folder → Activate all 3.

4. Add Credentials in n8n

  • PostgreSQL: host=postgres, db=jobautomation, user=jobuser
  • SMTP: Gmail with App Password, port 587
  • IMAP: Gmail with App Password, port 993
  • Telegram: Bot token from @BotFather

Daily Usage

# Check new unreviewed jobs
./db.sh new

# Top jobs by score
./db.sh top

# Get cover letter for a job
./db.sh cover <job_id>

# Get tailored resume for a job
./db.sh resume <job_id>

# Mark job as applied
./db.sh apply <job_id>

# Open DB shell
./db.sh shell

# Update n8n to latest
./update.sh

Database Schema (key fields)

Column Description
job_id URL hash — prevents duplicates
match_score Claude's 0–100 fit score
recommendation apply / maybe-apply / skip
tailored_resume_text ATS-optimized resume for this job
cover_letter Personalized cover letter
missing_skills Skills gap identified by Claude
strong_matches Your strengths for this role
visa_note remote-friendly / EU-based / requires-sponsorship

Human-in-the-Loop Design

This system never auto-submits applications. It only:

  • ✅ Discovers relevant jobs
  • ✅ Scores fit against your profile
  • ✅ Prepares tailored materials
  • ✅ Notifies you daily

You decide which jobs to apply to and click Apply yourself.


Project Structure

job-automation/
├── docker-compose.yml       # All services defined here
├── .env.example             # Template (copy to .env)
├── init.sql                 # PostgreSQL schema
├── start.sh                 # Start all containers
├── stop.sh                  # Stop all containers
├── update.sh                # Update n8n to latest
├── db.sh                    # Database management CLI
├── resumes/
│   └── base-resume.txt      # Your resume template
└── workflows/
    ├── 01-job-discovery.json
    ├── 02-email-alert-processor.json
    └── 03-daily-digest.json

Built By

Deepak Kushwaha — Data Scientist & ML Engineer
MSc Data Science, University of Naples Federico II
🏆 1st Place, Google Challenge Campania 2026 (STEM Category)


License

MIT — feel free to adapt for your own job search.

About

Self-hosted AI pipeline that discovers, scores & tailors job applications automatically. n8n + Claude API + PostgreSQL + Docker. ~$1.80/month.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors