$ cat ~/work/work-search.case

Work Search.
Full-stack product · Shipped
// AI-powered job search across many sources—with resume parsing, skill matching, ATS scoring, and application tracking.
// Impact at a glance
- - End-to-end pipeline: ingest jobs, parse resumes, score, and track applications
- - ATS-aware apply links and quality gates on incoming listings
- - Shows how I wire Next.js, Clerk, Postgres, and Python AI services together
// summary
Work Search is a Next.js frontend and FastAPI backend that aggregates listings, ingests resumes (PDF/DOCX), scores fit with embeddings and LLM helpers, and runs scheduled pipelines to keep jobs fresh.
// problem
Job search spreads across boards, ATS portals, and spreadsheets. Resumes, skill matching, and apply links are rarely in one place.
// what I built
I built a unified app: Clerk auth, Neon Postgres for users and applications, a Python service layer for search/scoring/conversion, and automation for recurring job ingestion—with direct-apply URL handling for Lever, Greenhouse, and Ashby.
// core experience
- - Upload or paste a resume and get structured skills, domains, and match scores against stored jobs
- - Search and filter listings from many sources with quality gates and embedding-based matching
- - Track applications, export tailored outputs (including LaTeX resume paths), and optional LinkedIn flows via Nango
// architecture
- - Next.js 16 + Clerk on the frontend; FastAPI orchestrating search, storage, and AI services
- - Services: job_search, resume_converter, skill_extractor, embedding_matcher, ats_scorer, scoring_engine, pipeline_scheduler, job_store
- - Neon/Postgres for users and application history; background pipelines for ongoing discovery
// ai involvement
LLMs and embeddings power resume parsing, tailoring, domain classification, and match explanations—not a generic chat box on top of a job board.
// challenges
- - Normalizing heterogeneous job feeds and improving direct-apply links per ATS
- - Making resume extraction reliable enough for scoring and filters
- - Balancing automated pipelines with clear UX when matches update
// outcome
Deployed demo with a documented backend repo—an end-to-end example of product UX plus Python orchestration for real job-search workflows.
// why this matters
Recruiters can see full-stack delivery: typed frontend, serious Python backend, auth, persistence, and applied AI in one shipped project.
// reflection
Job search is a workflow problem. The win is matching, persistence, and automation—not another wrapper around a single API.
// capabilities
// links