🧪 Skills

job-hunter-whatsapp

Automated job search, JD parsing, resume customization, and application tracking pipeline. Use when: user wants to find jobs, set up automated job searches,...

v1.0.0
❤️ 0
⬇️ 40
👁 1
Share

Description


name: job-hunter description: "Automated job search, JD parsing, resume customization, and application tracking pipeline. Use when: user wants to find jobs, set up automated job searches, parse job descriptions, customize/tailor resumes for specific roles, track job applications, or get job hunt updates via WhatsApp/messaging. Supports free job APIs (LinkedIn guest, Jobicy, RemoteOK, Remotive, Adzuna, JSearch/RapidAPI). Triggers on: find jobs, job search, customize resume, tailor resume for [company], track applications, job hunt, apply to [company], show jobs, job status, set up job alerts."

Job Hunter

Automated job search pipeline with JD parsing, resume tailoring, and application tracking.

Setup

1. Initialize Project

Create the project structure in the workspace:

job-hunter/
├── config.json          # User profile, target roles, API config
├── api_keys.json        # API credentials (gitignored)
├── resumes/
│   ├── base_resume.md   # User's master resume (text)
│   └── [company]_[role].md  # Customized per job
├── jobs/
│   └── tracked_jobs.json    # All discovered jobs + status

2. Gather User Profile

Ask the user for (store in config.json):

  • Current role, company, years of experience
  • Core skills and technologies
  • Target roles (e.g., "Senior iOS Engineer", "Staff Engineer")
  • Location priority tiers (e.g., Remote then City A then City B then Other)
  • Salary preference: disclose or private
  • Resume file (extract text from PDF if needed, save as resumes/base_resume.md)

3. Configure APIs

See references/apis.md for full API documentation.

Free, no auth required:

  • LinkedIn guest API (best for local/country-specific jobs)
  • Jobicy (remote jobs)
  • RemoteOK (remote tech jobs)
  • Remotive (remote dev jobs)

Free, API key required (ask user to register):

Store keys in api_keys.json with rate limits:

{
  "adzuna": { "app_id": "...", "app_key": "...", "daily_budget": 4 },
  "rapidapi": { "key": "...", "daily_budget": 2 }
}

Core Workflows

Job Finding

  1. Query all configured APIs (see references/apis.md)
  2. For each result, check against tracked_jobs.json — skip duplicates (match by URL or title+company)
  3. Read the actual JD for each new job — extract real data only:
    • Required skills/technologies (from JD text, not assumed)
    • Years of experience required (from JD text)
    • Salary (only if posted in listing)
    • Location and remote policy
  4. Calculate match score (0-100) by comparing user's actual skills against JD requirements
  5. Assign location tier based on user's priority config
  6. Add to tracked_jobs.json

Critical rule: Never hallucinate or assume JD data. If the JD can't be fetched, mark fields as "not fetched" and note it.

Salary estimates: Only use JSearch estimated-salary API endpoint. Label clearly as "market estimate" vs "posted salary".

JD Parsing

Extract from actual job posting text:

- title, company, location
- required_skills[] (from JD)
- experience_years (from JD)  
- salary (only if stated)
- tech_stack[] (from JD)
- nice_to_have[] (from JD)
- apply_url

Resume Customization

When user says "customize resume for [company]":

  1. Read the base resume from resumes/base_resume.md
  2. Read the parsed JD for that job from tracked_jobs.json
  3. Reorder and reframe existing experience to match JD requirements
  4. Emphasize matching skills, use language from the JD
  5. Never add skills, experience, or achievements the user doesn't have
  6. Never inflate numbers or add hallucinated data
  7. Save to resumes/[company]_[role].md

Application Tracking

Track status in tracked_jobs.json:

new → parsed → customized → applied → screening → interviewing → offer/rejected

Each entry:

{
  "id": "unique",
  "source": "linkedin|jobicy|remoteok|adzuna|jsearch",
  "title": "from API",
  "company": "from API",
  "location": "from API",
  "location_tier": 1,
  "match_score": 85,
  "salary": "only if posted",
  "tech_stack": ["from actual JD"],
  "experience_required": "from actual JD",
  "apply_url": "url",
  "status": "new",
  "found_date": "YYYY-MM-DD",
  "notes": ""
}

Automation

Cron Jobs

Set up two cron jobs:

  1. Job Finder — Daily at user's preferred time (default 9 AM local):

    • Query all APIs, parse new JDs, update tracker
    • sessionTarget: "isolated", delivery: "announce"
  2. Status Update — Daily at user's preferred time (default 11 AM local):

    • Read tracker, compile summary, send to user's messaging channel
    • sessionTarget: "isolated", delivery: "announce"

WhatsApp/Messaging Format

Format updates for mobile readability (40-50 chars per line). Group jobs by:

  1. 🌐 Remote (user's country)
  2. 🌍 Remote (international)
  3. 🏠 Office (by city, user's priority order)

Per job card:

━━━━━━━━━━━━━━━━━━
🏢 *Company Name*
📋 Role Title
📅 X+ yrs (from JD)
💰 Salary (if posted)
🛠 Tech: from actual JD
📍 Location
🎯 Match: X% — reason

Only show data from actual JD. Mark unfetched JDs with ⚠️.

Interactive Commands

Users can ask anytime:

  • "show jobs" / "what's available" → list tracked jobs
  • "show hyderabad jobs" → filter by location
  • "customize resume for [company]" → trigger customizer
  • "apply to [company]" → update status, note action needed
  • "status" → summary of all applications
  • "mark [company] as [status]" → update tracker

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs