DevConnectDevConnect
Sign up · Log in

openai

h@hafizdanishalimuhammadilyas· 1h

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 for `requirements` / `responsibilities` / `you will` headings, 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/

1