Back to projects

Selected project

Job Lead — Job Discovery Platform

A full-stack job discovery platform that turns plain-language searches into reusable, classified leads collected from approved public sources and matched against a shared job pool.

Access

No public link provided

Job Lead homepage with its lead transformation, approved sources, pipeline stages, saved-search behavior, and account calls to action
Job Lead authenticated lead library with paginated job cards, source labels, skill tags, save controls, and contact availability
Job Lead account creation page with Google and email signup options beside a diagram of the background lead pipeline

Product overview showing how public listings move through scraping, extraction, classification, matching, and reusable saved searches.

01 / 03

Project overview

Job Lead turns natural-language role briefs into reusable lead records rather than disposable search results. Authenticated users can run a search, follow its background progress, browse the shared pool of approved jobs, save individual roles, preserve searches for future matching, and receive email alerts when new matches appear. An administrator workspace monitors source health, ingestion activity, search demand, and AI-flagged listings that need review.

The challenge

The product had to collect useful public job data without blocking the search request, duplicating listings, or filling the workspace with low-trust noise. Each source exposes a different format, classification depends on an external model, and a search must combine already stored matches with newly scraped results while keeping progress recoverable and every user's saved data isolated.

Build decisions

Queue the expensive work

A search creates a persisted SearchRun and a pg-boss job instead of waiting for scraping and classification inside the request. Versioned Server-Sent Events stream progress to the workspace, while the stored status endpoint remains the recovery path after a reconnect.

Build one reusable lead pool

Listings retain their original source and URL, then gain normalized fields for company, location, tags, category, seniority, legitimacy, and available contact email. Deduplication prevents repeated ingestion, and PostgreSQL tag overlap ranks stored matches for future searches.

Choose sources deliberately

Adapters use Remote OK's public JSON feed, We Work Remotely's RSS feed, and Greenhouse career pages. Bounded retries, short-lived source caches, and partial results keep one unavailable source from discarding healthy data from the others.

Keep classification consistent and reviewable

The query parser and listing ingester share one Zod-backed AI classification contract for tags, category, seniority, and legitimacy. Listings that need human judgment stay outside public results until an administrator approves them.

Make search state useful after the session

Better Auth scopes saved jobs and saved searches to each user. Active searches refresh on a schedule, Resend delivers durable, idempotent new-match alerts, and the operations dashboard exposes source reliability and review work.

Delivery shape

Delivered as a pnpm monorepo with a Next.js 16 workspace, Express API, Prisma and PostgreSQL persistence, Better Auth, pg-boss workers, AI SDK classification, TanStack Query server state, Resend alerts, and automated API coverage for matching, classification, source adapters, resilience, contact extraction, and saved-search delivery.