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



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.