# Case Study: AI Job Radar & Application Copilot

## Summary

AI Job Radar is a local-first product workflow for AI PM job discovery. It converts public or manually imported job signals into structured job cards, relevance scores, capability gaps, and manual-review application actions while preserving privacy and platform safety.

## User

An AI product manager transition candidate looking for remote, Shanghai, APAC, and B2B AI roles.

## Job To Be Done

When the candidate reviews scattered job signals across alerts, public company pages, and gated platforms, they need a reliable way to identify roles that are truly AI-product relevant, understand fit and gaps, and choose the next manual action without exposing private data or violating platform boundaries.

## Constraints

- Candidate profile and application history must remain private.
- Logged-in platform content cannot be published.
- Gated or blocked source states must be represented honestly.
- Applying, messaging, following, and profile edits must remain manual.
- Demo data must be synthetic or public-safe.

## Product Decisions

### 1. Treat Source Health As Product Data

The workflow records source state before interpreting job results. A source can be `public_source`, `manual_import`, `login_required`, `http_451_blocked`, `rate_limited`, or `unavailable`. This prevents the system from reporting "no jobs found" when the real result is "source blocked."

### 2. Normalize Into `job_card`

Raw job signals are converted into a structured card with role, company type, location mode, AI surface, relevance score, location fit, capability gaps, and manual next action. This keeps downstream scoring and reporting consistent.

### 3. Score AI Depth Separately From Job Title

The workflow rewards evidence of real AI product work: RAG, agents, evaluation, AI UX, API integration, workflow automation, model operations, enterprise rollout, and user feedback loops. A role title alone is not enough.

### 4. Keep Action Human-Gated

The workflow can produce a checklist for tailoring a resume, writing a cover note, or updating a tracker. It does not submit applications, send messages, or modify public profiles.

## Workflow

```text
Manual alert or public source
  -> source health classification
  -> job_card normalization
  -> role relevance scoring
  -> location fit scoring
  -> capability gap extraction
  -> shortlist report
  -> manual review checklist
```

## Example Output

The sample match report separates three things that are often blended together:

- `role fit`: whether the work is actually AI-product relevant
- `location fit`: whether the working model matches candidate constraints
- `proof gap`: what the candidate needs to show before applying

See [sample match report](../examples/match-report.sample.md).

## Evaluation

| Metric | Question | Demo Evidence |
| --- | --- | --- |
| Role relevance | Did the workflow identify true AI PM roles? | Sample job cards and eval report |
| Location fit | Did it separate remote, Shanghai, APAC, and onsite constraints? | Match report |
| AI depth | Did it detect real AI workflow ownership? | AI surface tags |
| Blocker handling | Did it preserve source blockers honestly? | Source health labels |
| Human gate | Did it avoid automated applications or messages? | Manual next action field |

## Result

The project demonstrates an AI PM workflow that is safer and more useful than a keyword scraper. It turns noisy job signals into product-grade decision artifacts: structured data, source-health context, match reasoning, portfolio gaps, and manual next steps.

## Interview Talk Track

I built this as a safety-aware AI workflow rather than a scraper. The key product decision was to separate public or manually imported job signals from gated platform behavior. If a source is blocked or login-gated, the workflow records a source-health blocker instead of pretending the market has no relevant jobs. That keeps the output truthful, protects private data, and still produces a useful shortlist through structured job-card matching and manual review.
