build log
Job Agent
The process, not just the result. by HafizDanishAli · 1 update
- #1 · 7 Sept 2026
Shipped: An AI Job Matcher Agent — paste a job URL + your resume, get a match score, skill gaps, and a cover letter
Applying for jobs is the same loop every time: read the posting, compare it with your resume, guess your chances, then write a cover letter from scratch. I built an agent that does all of it in one request. Flow: paste a job posting URL → upload your resume PDF → get the analysis back. Output: -match_score(0-100) — how well the profile fits the role -skill_gaps— what the job asks for that the resume doesn't have -strengths— what actually lines up -cover_letter— personalized, ready to send Stack: - FastAPI — async API, two endpoints:/analyze(JSON, local resume path) and/analyze-upload(multipart file upload). Auto Swagger docs at/docs. - OpenAI GPT — the reasoning layer. Single structured prompt, JSON-only output, validated with Pydantic before it ever reaches the response. - httpx + BeautifulSoup — scrapes the job page, pulls the title and hunts for requirement lists (looks forrequirements/responsibilities/you willheadings, falls back to the first bullet lists on the page). - pdfplumber — page-by-page text extraction from the resume PDF. - Jinja2 + vanilla CSS — drag-and-drop UI, no frontend framework. - Docker —python:3.12-slim, single container, runs anywhere. Two things I'd call out: 1. Graceful degradation. If there's no API key or the LLM call fails, it doesn't 500 — it falls back to a keyword-based scorer that intersects job skills with resume skills and returns a real score. The app is always usable. 2. Scraping is the hard part, not the AI. Every job board renders differently, and half of them are JS-heavy. The heuristic parser works on plain HTML postings but site-specific parsers (LinkedIn, Indeed) are the obvious next step. Next up: semantic matching with embeddings instead of keyword overlap, batch mode for multiple postings at once, and swapping temp-file handling for in-memory PDF parsing. Happy to answer anything about the scraping heuristics or the fallback design. I mostly build AI agents and automation for businesses — chatbots, workflow automation, the boring repetitive stuff that shouldn't be manual. If you're working on something similar, DMs are open. Portfolio: https://danish614.github.io/danish-portfolio/Open update