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.
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:
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
- 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.
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.
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.
- 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.
- Start the FastAPI backend:
uvicorn API.main:app --reload- Start the Streamlit frontend:
streamlit run ui/streamlit_app.py-
Open the Streamlit UI and provide:
- A CV
- A job description
- Optional goals
- 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
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.
Built as a personal project to explore AI-assisted workflows, backend architecture, and practical human-in-the-loop design.
