Overview
A streamlined job search pipeline that takes a user's resume and a natural-language prompt (e.g. "senior backend roles in Singapore, fintech preferred"), fetches available roles, and ranks them by semantic relevance eliminating manual keyword tuning on job boards.
Technical Challenges
Simplified Retrieval + Ranking Flow
Instead of an agent loop, the app uses a deterministic sequence: parse resume, retrieve jobs, score relevance, return ranked results. This removes unnecessary orchestration complexity and makes ranking behavior easier to debug and tune.
Resume Parsing
PDF resumes are parsed with a text extraction library and then passed to Gemini with a structured output prompt to extract skills, years of experience, job titles, and preferred industries. Output is validated against a Zod schema before being used as ranking context.
Search Query Construction
Naively passing resume text to Google Search produces poor results. Instead, the backend builds targeted queries from extracted skills plus location and industry filters from user input, retrieves listings, and deduplicates by canonical URL before scoring.
Gemini Semantic Relevance Ranking
Given the deduplicated job list, Gemini computes semantic relevance between the parsed resume profile and each job description. The ranking stage combines semantic similarity with explicit constraints (location, role seniority, preferred domain) to produce the final ordered results.
Daily Telegram Updates
Users can set update preferences (keywords, location, and preferred send time). A daily scheduler reruns retrieval and semantic ranking, then pushes a concise top-match digest through Telegram.
System architecture
A simplified pipeline fetches available jobs, parses the resume into structured signals, and uses Gemini semantic similarity scoring to rank listings by relevance. User-selected preferences (keywords, location, and schedule) register a daily run that pushes top matches to Telegram as a digest.

