← Back to Home

Career-Ops

AI Job-Search Pipeline (Self-Hosted Web App)

A self-hosted AI job-search platform: point it at the portals you care about, and it scans them on a schedule, auto-discovers how to fetch each portal's jobs, pulls new listings, and scores every one against your CV with an LLM — surfacing the handful worth your attention out of hundreds. A filter, not a spray-and-pray applier; the human always decides.

#LLM / Agentic AI#CrewAI#LiteLLM#Job-Search Automation#Web Scraping / Discovery#FastAPI#Node / Express#Vite SPA#PostgreSQL#Cron Scheduling#Docker

// Overview

What it does. Career-Ops turns a noisy, manual job hunt into a scored, automated feed. You open a browser, configure your targets (roles/keywords) and a portal catalog (the company/job sites you want watched), and the system does the rest: on a configurable schedule it visits each portal, fetches new listings, and evaluates each one against your CV with an LLM, producing a relevance score and reasoning. You review a sortable dashboard of pre-scored listings and decide what to pursue — the system never submits an application. The headline trick: an AI discovery agent inspects each portal's careers page and figures out how to fetch its jobs (JSON API vs RSS vs HTML scrape), so adding a new portal doesn't require hand-writing a scraper.

// Background

The challenge

Job hunting across many portals — no tracker, no filter,

no way to curate listings against personal criteria.

01

Too many portals to check manually

Dozens of company career pages, job boards, and niche

sites — each with different layouts, cadences, and formats.

A full sweep takes hours; done daily, it's a second job

02

No way to curate against personal criteria

Without a scoring rubric tied to skills, seniority, location,

and work style, every listing looks equally worth reading.

200 listings/week · 5 worth pursuing · impossible to tell apart

03

No tracker — history disappears

Seen it, skipped it, applied — none of that is recorded.

Next session starts from zero; duplicates go unnoticed.

Applied twice to the same role; missed follow-ups entirely

04

Good listings expire unnoticed

Many postings close in 3–5 days. Without automated

scanning, you only see them when you happen to look.

Timing matters — missed windows don't reopen

05

Evaluation is inconsistent session to session

Spray-and-pray tools apply to everything. High volume,

low quality, reputation damage with recruiters.

Volume applications filter you out, not in

Net effect

The few high-fit listings sit buried in the pile —

invisible until read by hand, every day.

// Solution

AI job search pipeline — agentic discovery + LLM scoring

Data sources

Portal Catalog

user-curated company list

URL + name per target

CV Profile YAML

skills · experience · targets

scoring rubric source

Pipeline

Discover

CrewAI agent

detects fetch method

Discover

Fetch

json_api · rss

html_scrape

Fetch

Evaluate

LiteLLM score

vs CV rubric

Evaluate

Review

Vite SPA

sortable · paginated

Review

Track

PostgreSQL

runs + scores

Persist

Node/Express API · FastAPI agents (CrewAI + LiteLLM) · Vite SPA · PostgreSQL · node-cron · Docker Compose

// Impact

From tabs to tracker

Before · manual browser tabs

20+ tabs · read · close · forgotten

After · automated scan + queue

scored queue arrives · DB persists

0

tabs to see ranked listings

Recall it next weekit's in the DB
Curation criteriaCV YAML rubric

Scan pipeline funnel

Portals checked per scan

42 portals

Listings fetched

~340 listings

LLM-scored

~340 scored

Review queue

~12 high-fit
Noise eliminated by AI~97%

Results

Portals supported

42+

AI agent

CrewAI

LLM backend

LiteLLM

Scan cadence

cron

Review queue vs raw~96% filtered
Portal discoveryfully automated

Scores persisted · sortable review queue

node-cron scans · Docker Compose (4 svc)

// Tech Stack

LayerTechnologies
FrontendVite SPA (dashboard: sortable columns, pagination), served on its own port
API serverBun / Express (Node), REST API, JWT auth
Schedulernode-cron scan scheduler (scan-scheduler.mjs), staged ScanWorkflow
AI agentsPython FastAPI microservice — CrewAI + LiteLLM: discovery_agent, fetch_jobs_agent, scan_agent (/discover, /fetch-jobs, /evaluate)
Fetch methodsJSON API · RSS feed · HTML scrape (per-portal, auto-selected)
DatabasePostgreSQL — portals, scan runs, listings, evaluations, targets
InfraDocker Compose (4 services), served under /career-ops behind the platform nginx

// Architecture & Diagrams

1 / 5System Architecture — Simple (high level)
rendering…

Disclaimer: sample visuals may contain anonymized, simulated, or non-production values for presentation purposes.

// Demo

No demo configured yet.