case study • ai tool

AI Job Application Assistant

A Python AI tool that turns your uploaded CV and a pasted job description into a tailored cover letter, CV improvement suggestions, skills gap analysis, interview questions, and salary estimate — all streamed live through a Gradio interface.

Overview

Project Summary

AI Job Application Assistant lets you upload a PDF CV and paste a job description, then generates five structured outputs — a tailored cover letter, CV suggestions, skills analysis, interview prep questions, and a salary estimate — streamed live through a conversational Gradio interface.

Stack

Stack & Architecture

  • Python — application layer
  • Gradio — chat UI with streaming output
  • Groq API — Llama 3.3 70B for generation
  • pdfplumber — PDF CV text extraction
  • Markdown export — download outputs as .md files
Features

Key Features

  • PDF CV upload — extract and parse CV text automatically
  • Tailored cover letter — generated specifically for the job description provided
  • CV suggestions — targeted improvements based on the role requirements
  • Skills gap analysis — identify missing skills and how to address them
  • Interview questions — role-specific questions to prepare with
  • Salary estimate — market range based on the role and location
  • Streaming output — all responses stream live to the browser
  • Markdown export — download any output as a .md file
Challenges

Challenges & Learnings

  • Prompt engineering for variety — each of the five outputs needed its own system prompt to produce correctly structured, useful output
  • PDF text extraction — CVs have inconsistent formatting; pdfplumber handled most cases but required testing across different CV layouts
  • Streaming with structured outputs — coordinating Gradio's streaming with multi-section generation required careful state management
  • Context window usage — passing both the CV and job description as context while keeping prompts concise enough to get quality output

Problem

Tailoring a job application takes hours — rewriting a cover letter, adjusting CV bullet points, researching the role, preparing for interviews. Most people either skip the tailoring and send a generic application, or spend too much time doing it manually. I wanted a tool that could do the heavy lifting in seconds.

Approach

The tool takes two inputs — a PDF CV and a pasted job description — and uses them as shared context for five separate LLM calls, each with a targeted prompt. Responses stream live so there's no waiting for a full response before reading. Each output is downloadable as Markdown so it can be edited and reused.

What I Built

Core

CV Parser

Built PDF text extraction using pdfplumber to pull clean text from uploaded CVs regardless of formatting. The extracted text is passed as context to every subsequent LLM call.

Core

Five-Output Generation Pipeline

Designed five separate system prompts — cover letter, CV suggestions, skills analysis, interview questions, salary estimate — each tuned to produce structured, actionable output rather than generic advice.

UI

Gradio Streaming Interface

Built a clean Gradio interface with PDF upload, a job description input, and streaming output for each analysis type. All outputs are exportable as Markdown files for further editing.

Result

The tool generates a full set of job application materials from a CV and job description in under a minute, streamed live. This project pushed me further into Python backend work, prompt engineering for structured outputs, and building practical AI tools that solve a real, everyday problem.