Skip to content

MaximiliaanO/job-application-assistant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI Cover Letter Generator (Human in the Loop MVP)

A focused, human in the loop alternative to generic AI chat models for job applications.

This project demonstrates how structured input and task specific prompts can be used to generate high-quality draft cover letters, while keeping the human fully in control of the final output.


What is this?

This application helps generate AI assisted draft cover letters based on:

  • A CV
  • A job description
  • Optional personal goals

Instead of using a generic AI chat interface, this tool enforces structured inputs and a repeatable workflow, making the output more consistent and easier to review and edit.

The generated cover letter is intentionally not final it is designed to be reviewed, modified, and personalized by the user (human in the loop).

User interface:

User Interface

Why not just use ChatGPT?

While generic AI chat tools can generate cover letters, they require:

  • Manual prompt engineering
  • Repeated context explanation
  • Inconsistent structure across runs

This tool removes that friction by:

  • Separating inputs (CV, job description, goals)
  • Using optimized, task-specific prompts
  • Providing a predictable, repeatable generation flow
  • Explicitly encouraging human review and editing

What does this project demonstrate?

  • Python backend development with FastAPI
  • API input validation using Pydantic
  • Modular LLM inference with a prompt abstraction layer
  • Human in the loop AI design
  • Lightweight frontend development using Streamlit
  • Clear separation between UI, API, and AI logic
  • Conscious scope control and architectural trade-offs

This is intentionally built as an MVP, not a full SaaS product.


Architecture (high level)

Streamlit UI
     |
     |  HTTP (JSON)
     v
FastAPI Backend
     |
     v
LLM Inference + Prompt System
  • The frontend communicates with the backend exclusively via an API.
  • The backend handles prompt rendering and LLM inference.
  • No persistence layer is included by design.

Out of scope (by design)

The following features are intentionally not included in this MVP:

  • User accounts or authentication
  • Database persistence
  • Application or workflow tracking
  • Multi-user support
  • Prompt fine-tuning or evaluation pipelines

The goal of this project is to demonstrate core value and architecture, not to build a production ready web-application.


Current limitations

  • Prompts are intentionally simple and expected to evolve
  • No automated unit tests yet (planned as a future iteration)
  • LLM inference runs on CPU in the current setup due to hardware constraints

These trade-offs were made to prioritize clarity, speed of iteration, and end-to-end functionality.


How to run locally (simplified)

  1. Start the FastAPI backend:
uvicorn API.main:app --reload
  1. Start the Streamlit frontend:
streamlit run ui/streamlit_app.py
  1. Open the Streamlit UI and provide:

    • A CV
    • A job description
    • Optional goals

Future improvements (non-exhaustive)

  • Prompt iteration and refinement
  • Unit tests for prompt rendering and API endpoints
  • Optional persistence for application tracking
  • Performance optimizations (GPU / batching)
  • Authentication for multi-user scenarios

Status

This project is considered feature-complete as an MVP and is shared as a portfolio project to demonstrate practical AI application development, architectural thinking, and scope management.


Author

Built as a personal project to explore AI-assisted workflows, backend architecture, and practical human-in-the-loop design.


About

A focused, human in the loop AI tool for generating job application cover letters using structured input, FastAPI, and Streamlit.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages