JobHunter AI Agent

JobHunter AI Agent

From Prompt to Product

From Prompt to Product

From Prompt to Product

The Problem:

Job boards are optimized for volume, not relevance.

As a UX/UI designer, I was scrolling through hundreds of roles, most irrelevant, outdated, or misaligned with my experience. The signal-to-noise ratio was low, and the time cost was high.

What I needed wasn’t more jobs. I needed the right jobs, aligned with my level, domain, and goals.

The Idea:

Build an AI-powered agent that:

  • Scans multiple job sources automatically

  • Filters roles based on relevance (title + experience)

  • Ranks opportunities by match quality

  • Explains why each role is a good fit

  • Delivers results proactively (no manual searching)

Not a job board. Not a dashboard.

System Design:

System Overview

The system is composed of two parts:

The system is composed of two parts:

  1. The Agent (Backend Logic)

Fetches jobs from selected sources

  • Filters based on title and experience

  • Scores and ranks opportunities

  • Generates reasoning for each match

  • Sends curated results via email

  1. The Interface (Decision Layer)
  • Displays ranked opportunities

  • Highlights the best match

  • Explains “why this matches you”

  • Helps users quickly decide where to focus

Together, they shift job search from browsing → decision-making.

The Process:

  1. Defining the System

Before touching implementation, I defined what this agent needed to do well. It had to be push-based, not pull-based:

  • Pull jobs from reliable sources

  • Filter specifically for product/UX design roles

  • Prioritize early-to-mid career opportunities (1–5 years of experience)

  • Run automatically without manual input

  • Deliver results in a simple, digestible format


I also defined what this was not:

  • Not a job board

  • Not a dashboard

  1. Choosing the Right Data Sources

The biggest decision was not technical, it was strategic. Most job boards are aggregators, which means:

  • Duplicate listings

  • Outdated roles

  • Low relevance


Instead of relying on generic platforms, I prioritized:

  • Remotive API for remote roles

  • Company career pages (targeted startups in Vancouver, Canada, and the US)

  • ATS systems like Greenhouse/Lever (future expansion)


This shift was critical. It turned the agent from a job scraper into a high-signal opportunity filter.

  1. Designing the Filtering Logic

Title Matching: Instead of broad keyword matching, to ensure relevance without over-filtering, I defined a focused set:

  • product designer

  • ux designer

  • ui designer

  • interaction designer

  • experience designer

  • product design lead


Experience Filtering (Core Logic): Most job descriptions include experience requirements, but in inconsistent formats. I built a parsing system to extract patterns like:

  • “3+ years”

  • “1–2 years”

  • “minimum 4 years”

Title Matching: Instead of broad keyword matching, to ensure relevance without over-filtering, I defined a focused set:

  • product designer

  • ux designer

  • ui designer

  • interaction designer

  • experience designer

  • product design lead


Experience Filtering (Core Logic): Most job descriptions include experience requirements, but in inconsistent formats. I built a parsing system to extract patterns like:

  • “3+ years”

  • “1–2 years”

  • “minimum 4 years”

  1. Building the Agent

The system is built in Python with a simple, reliable architecture:

Fetch → Filter → Rank → Format → Send


Key Components:


Data Fetching

  • Pulls job listings from Remotive

  • Designed to expand into multiple sources


Filtering Engine

  • Title-based filtering

  • Regex-based experience parsing

  • Overlap logic for realistic interpretation


Email Delivery

  • Clean, readable summary

  • Limited to top results to avoid overload

The system is built in Python with a simple, reliable architecture:

Fetch → Filter → Rank → Format → Send


Key Components:


Data Fetching

  • Pulls job listings from Remotive

  • Designed to expand into multiple sources


Filtering Engine

  • Title-based filtering

  • Regex-based experience parsing

  • Overlap logic for realistic interpretation


Email Delivery

  • Clean, readable summary

  • Limited to top results to avoid overload

  1. Automation and Scheduling

The agent runs using GitHub Actions. Key decisions:

  • Runs twice daily

  • Uses a state file to prevent duplicate sends

  • Includes safeguards to avoid unnecessary runs

  1. Iteration and Debugging

Several issues surfaced during development:


Duplicate Emails: The agent was sending multiple emails per time slot.

Fixed using a state tracking system (last_sent_slot)


Time-Based Execution Conflicts: Manual runs were being blocked by scheduled logic.

Adjusted conditions to separate testing vs production runs


Performance Bottlenecks: Adding multiple company career sites significantly increased runtime.

Introduced request limits and timeouts to keep execution predictable

Several issues surfaced during development:


Duplicate Emails: The agent was sending multiple emails per time slot.

Fixed using a state tracking system (last_sent_slot)


Time-Based Execution Conflicts: Manual runs were being blocked by scheduled logic.

Adjusted conditions to separate testing vs production runs


Performance Bottlenecks: Adding multiple company career sites significantly increased runtime.

Introduced request limits and timeouts to keep execution predictable

The Result:

A fully automated job discovery system that:

  • Runs twice daily without manual input

  • Filters roles based on title and experience

  • Prioritizes relevant product design opportunities

  • Reduces time spent searching while increasing quality of results

Instead of checking job boards, the right roles come to me.

What I'd Improve Next:

  • Introduce real-time personalization (user profile input)

  • Improve scoring using LLM-based reasoning

  • Expand data sources with structured APIs

  • Turn the system into a shareable produc