Overview
Once the AI matching engine finds and scores jobs for a candidate, those matches do not just sit in a list. Recruitier provides a Kanban-style pipeline that lets you track every match through your recruitment workflow — from first discovery to successful placement. The pipeline gives you a visual, drag-and-drop interface where each column represents a stage in your process, and each card represents a job match. At a glance, you can see where every opportunity stands for a given candidate. The pipeline also integrates with the outreach system, showing outreach progress directly on each card without requiring you to open the match detail view. Every status change is tracked through theCandidateJobActivity entity, creating a complete audit trail of actions taken on each match: status changes, notes added, calls logged, emails sent, and interviews scheduled.
Pipeline Layout
The pipeline is organized into 4 display columns that group related statuses together. This keeps the Kanban board clean and scannable while still supporting detailed status tracking through sub-statuses within each column.| Column | Color | Statuses Grouped | Description |
|---|---|---|---|
| New Matches | Gray | Pending | Freshly found matches from the AI. Unreviewed opportunities waiting for your attention. |
| Favorited | Yellow | Favorited | Marked as promising. Your shortlist of matches worth pursuing. |
| In Progress | Blue | Under Review, Contacted, Applied, Interviewing, Offer Stage | All actively worked opportunities. Cards within this column show a sub-status badge indicating the specific stage. |
| Placed | Green | Placed | Successfully placed. The goal of the entire process. |
The 4-column layout simplifies the visual experience while preserving the full 9-status workflow underneath. When you drag a card into the “In Progress” column, it defaults to “Under Review” status. You can then change the specific sub-status (Contacted, Applied, Interviewing, Offer Stage) using the dropdown menu on each card.
All Available Statuses
While the pipeline displays 4 columns, each match can be in one of these 9 statuses:| Status | Column | Protected? | Description |
|---|---|---|---|
| New Match (pending) | New Matches | No | Freshly matched, unreviewed |
| Favorited | Favorited | Yes | Marked as promising |
| Under Review | In Progress | Yes | Actively being evaluated |
| Contacted | In Progress | Yes | Outreach initiated to the company |
| Applied | In Progress | Yes | Formal application submitted |
| Interviewing | In Progress | Yes | Active interview process |
| Offer Stage | In Progress | Yes | Offer being discussed or negotiated |
| Placed | Placed | Yes | Successfully placed |
| Not Proceeding (rejected) | Hidden (toggle to show) | No | Rejected or no longer pursued |
Accessing the Pipeline
The pipeline is accessed from the candidate detail page. When viewing a candidate’s matches, you can toggle between two views using the list/kanban buttons in the top right of the matches section:- List view (default) — A scrollable list showing detailed match information including scores, key matching points, potential concerns, and action buttons
- Pipeline view — The 4-column Kanban board for visual workflow management with drag-and-drop
Using the Pipeline
Kanban View
The pipeline interface is a 4-column Kanban board — a horizontal layout where each column groups related statuses and matches are draggable cards within those columns. Each card displays key information at a glance:| Card Element | Information | Purpose |
|---|---|---|
| Job title | The position being matched (clickable) | Primary identification |
| Sub-status badge | Specific status within the In Progress column (e.g., “Under Review”, “Contacted”) | Track detailed progress |
| Company name | The hiring company (clickable to view company details) | Context for outreach decisions |
| Location | Where the job is based (normalized) | Geographic relevance check |
| Salary range | Compensation data (if available in the listing) | Budget alignment |
| Match score | AI-calculated relevance percentage as a badge | Quick quality indicator |
| Outreach status | Steps completed out of total, with next step action button | Track communication directly from the card |
| Job link | External link to original job posting | Quick access to the source listing |
Moving Matches Between Stages
To move a match to a different stage:- Drag and Drop
Click and hold a match card, then drag it from one column to another. Release it in the target column. The status is updated immediately upon drop with an optimistic UI update — the card moves instantly while the API call happens in the background.When you drop a card into the “In Progress” column, it defaults to “Under Review” status. You can then refine the sub-status using the card’s dropdown menu.This is the fastest way to move matches between columns and works well for quick triage sessions.
- Skip stages (New Matches directly to Contacted)
- Move backward (Interviewing back to Under Review)
- Jump to any status (New Matches directly to Placed, if appropriate)
- Move to Not Proceeding from any stage via the dropdown menu
Activity Tracking
Every status change and interaction is logged through theCandidateJobActivity entity. The activity types include:
| Activity Type | When Created | What It Records |
|---|---|---|
| status_change | Match moves between stages | Old status, new status, timestamp |
| note | You add a note to the match | Note text, timestamp |
| call | You log a phone call | Call details, timestamp |
| You log an email | Email summary, timestamp | |
| interview_scheduled | An interview is scheduled | Interview details, timestamp |
Protected Stages
Certain pipeline stages are protected, meaning matches in these stages are never removed during re-matching. This is a core design principle of the pipeline — your active work is always preserved.Protected (Safe During Re-Match)
- Under Review — Active evaluation in progress
- Favorited — You actively chose to keep this match
- Contacted — Outreach has been initiated
- Interviewing — Interview process underway
- Applied — Formal application submitted
- Offer Stage — Offer being discussed
- Placed — Successful placement
Not Protected (May Be Replaced)
- New Matches (pending) — Unreviewed AI results
- Not Proceeding (rejected) — Dismissed matches
How Protection Works During Re-Matching
When the matching engine runs again for a candidate (after a skill change, location update, or manual trigger):Identify Protected Matches
The system loads all existing matches for the candidate and identifies those in protected statuses (everything except “New Matches” and “Not Proceeding”).
Collect Exclude List
The job IDs of all protected matches are collected into an
exclude_job_ids list. This list is passed to the matching pipeline.Run Matching Pipeline
The full 5-stage matching pipeline runs with the updated candidate profile. The exclude list ensures that protected jobs are not re-scored or duplicated.
The protection mechanism uses the match status in the database, not the UI position. Moving a match to any protected status immediately protects it from future re-matching, even before you close or save the page. The protection is instantaneous upon status change.
Filtering and Sorting
Showing Rejected Matches
By default, rejected (“Not Proceeding”) matches are hidden from the pipeline view. When rejected matches exist, a toggle appears at the top of the pipeline that lets you show or hide them. The toggle displays the count of rejected matches so you can see at a glance how many have been dismissed. When shown, rejected matches appear in a separate section below the main 4-column grid, displayed with reduced opacity to visually distinguish them from active matches.Sorting Within Columns
Within each column, matches maintain their order. The highest-scoring matches appear at the top of each column, making it easy to identify the best opportunities first.Pipeline and Outreach Integration
The pipeline integrates directly with Recruitier’s outreach functionality. When you initiate an outreach flow for a matched job, the outreach status is displayed directly on the pipeline card.Outreach Status on Cards
Each pipeline card shows the outreach status if an outreach flow has been created:| Outreach Status | Indicator | What It Means |
|---|---|---|
| Not Started | Gray | An outreach flow exists but no steps have been completed yet |
| In Progress | Blue with progress | Some steps are completed, some pending. The next pending step is shown on the card. |
| Completed | Green | All outreach steps have been executed |
- Flow name — Which outreach template or flow is being used
- Steps progress — “3 of 5 steps completed” style indicator
- Next pending step — What action needs to happen next
Outreach flows are created from the job detail page, not directly from the pipeline. The pipeline provides visibility into outreach status, while the actual outreach management (creating flows, completing steps, adding notes) happens in the outreach section. Think of the pipeline card as a dashboard widget for outreach progress.
Pipeline to Job Navigation
From any pipeline card, you can click through to the full job detail page. This gives you access to:- Complete job description
- Full match score breakdown (all four dimensions)
- Key matching points and potential concerns
- AI explanation of the match
- Company information
- Outreach flow management
Pipeline Workflow Examples
Example 1: Standard Placement Flow
Example 2: Quick Outreach (Existing Relationship)
Example 3: Candidate Review Session
Example 4: Process Stalls
Example 5: Candidate Declines After Review
Example 6: Re-Matching Discovers Better Opportunities
Best Practices
Review New Matches Promptly
Job opportunities have a shelf life. The sooner you review new matches and move promising ones to “Under Review” or “Favorited”, the better your chances of reaching the hiring manager before the role is filled. Aim to review new matches within 24 hours.
Use Favorited as Your Shortlist
The “Favorited” stage works well as a shortlist for candidate conversations. After reviewing matches, favorite the top 5-10 opportunities and present those to the candidate for discussion before starting outreach. This respects the candidate’s preferences and increases buy-in.
Keep the Pipeline Current
Move matches to “Not Proceeding” when they are no longer relevant. A clean pipeline with accurate statuses helps you focus on active opportunities and gives you reliable statistics. Stale matches in wrong stages create noise and false confidence.
Track Outreach from the Pipeline
Use the pipeline as your daily dashboard. The outreach status on each card tells you who needs follow-up, which interviews are pending, and where offers are in progress. A 5-minute morning scan of the Kanban board keeps you on top of every opportunity.
Pipeline Counts and Statistics
The pipeline provides aggregate statistics visible in both list and pipeline views: Stats bar (shown above the match list): Displays compact counts for:- Total — All matches across all statuses
- Favorited — Matches marked as promising (yellow highlight)
- Applied — Matches with formal applications submitted (green highlight)
- Rejected — Matches that are no longer being pursued (red highlight)
| Signal | What It Means | Action |
|---|---|---|
| ”New Matches” growing, “Contacted” stagnant | Not reviewing fast enough or not finding suitable matches | Spend time triaging or adjust candidate preferences |
| Many “Contacted”, few “Interviewing” | Outreach is not converting to interviews | Review outreach approach, check match quality |
| Many “Interviewing”, few “Offer Stage” | Candidates are not progressing through interviews | Coach candidates, review match accuracy |
| Balanced pipeline with flow through stages | Healthy recruitment process | Continue current approach |
Advanced
The CandidateJobMatch Entity
Each match in the pipeline is stored as aCandidateJobMatch record in the database. The key fields include:
| Field | Type | Purpose |
|---|---|---|
candidate_id | UUID (FK) | Links to the candidate profile |
job_id | UUID (FK) | Links to the matched job listing |
status | Enum | Current pipeline stage (pending, favorited, rejected, applied, etc.) |
score | Float | Final composite match score (0-1) |
role_fit | Float | Role Fit dimension score |
skills_fit | Float | Skills Fit dimension score |
experience_fit | Float | Experience Fit dimension score |
secondary_fit | Float | Secondary Fit dimension score |
matching_skills | JSONB | List of skills the candidate has that the job needs |
missing_skills | JSONB | List of skills the job needs that the candidate lacks |
explanation | Text | AI-generated natural language explanation |
recommendation | String | ”apply”, “consider”, or “skip” |
rank | Integer | Position in the ranked list (1 = best match) |
The CandidateJobActivity Entity
Every interaction with a match is logged as aCandidateJobActivity record:
| Field | Type | Purpose |
|---|---|---|
match_id | UUID (FK) | Links to the CandidateJobMatch |
activity_type | Enum | Type: status_change, note, call, email, interview_scheduled |
details | JSONB | Activity-specific data (old/new status, note text, etc.) |
created_at | Timestamp | When the activity occurred |
user_id | UUID (FK) | Who performed the action |
How Protected Statuses Interact with the Database
The protection mechanism is implemented at the data layer during re-matching:- Query protected matches:
SELECT job_id FROM candidate_job_matches WHERE candidate_id = ? AND status NOT IN ('pending', 'rejected') - Pass to matching pipeline: The
exclude_job_idsset prevents the vector search from even retrieving these jobs - Double-check on creation: Even if a protected job somehow makes it through filtering, the match creation stage checks for existing matches and skips duplicates
Pipeline Status Internal Mapping
The pipeline stages map to internal status values:| Pipeline Stage | Internal Status | Protected |
|---|---|---|
| New Matches | pending | No |
| Under Review | reviewing | Yes |
| Favorited | favorited | Yes |
| Contacted | contacted | Yes |
| Interviewing | interviewing | Yes |
| Applied | applied | Yes |
| Offer Stage | offer_pending | Yes |
| Placed | placed | Yes |
| Not Proceeding | rejected | No |
Connection to Company Pipeline
When you engage with a matched job (move it out of “New Matches”), the associated company is automatically linked to your client pipeline if it is not already there. This means:- Viewing a match detail page can trigger company addition
- Starting outreach creates the company association
- The company’s industry, size, and LinkedIn data from the
global_companytable become available in your client view - Staffing and recruiting agencies are excluded from match results entirely (via
EXCLUDED_CLIENT_INDUSTRIES), so they never appear in your pipeline
Performance Considerations
The pipeline view is optimized for performance even with large numbers of matches:- Pagination: The Kanban view loads matches in batches per column to prevent slow rendering
- Eager loading: Match cards are loaded with company and outreach data pre-fetched to avoid N+1 queries
- Status counts: Aggregate counts per stage are computed efficiently with a single query
- Real-time updates: SSE events update individual cards without requiring a full page reload
Power-User Tips
Related
- Understanding Scores — Interpret match scores to prioritize your pipeline
- How Matching Works — Learn what drives the matches in your pipeline
- Managing Profiles — Keep candidate data current for better matches
- Skills & Expertise — Accurate skills lead to more relevant pipeline matches

