An intelligent application that helps users fill out job application forms using their resume. The application uses LLM-powered workflows to automate form filling while allowing human feedback and corrections.
- Resume & Form Upload: Upload your resume and job application form in PDF or DOCX format
- Intelligent Form Filling: Automatically extracts information from your resume to fill out job application forms
- Human-in-the-Loop: Review and provide feedback on the generated responses
- Modern UI: Clean and intuitive interface built with Streamlit
- Robust Backend: FastAPI backend with async support and proper error handling
The application follows a client-server architecture:
- Frontend: Streamlit application providing the user interface
- Backend: FastAPI server handling file processing and workflow management
- Workflow Engine: Custom RAG (Retrieval-Augmented Generation) workflow using LlamaIndex
- Python 3.10 or higher
- uv package manager
- Clone the repository:
git clone https://github.com/jonlizardo/ai-job-application.git
cd ai-job-application
- Create and activate a virtual environment:
python -m venv .venv
source .venv/bin/activate # On Windows, use `.venv\Scripts\activate`
- Install dependencies using uv:
uv pip install -r requirements.txt
- Set up your environment variables:
export LLAMA_CLOUD_API_KEY=your_api_key_here
export OPENAI_API_KEY=your_openai_api_key_here
- Create a
data
directory for file storage:
mkdir data
- Start the FastAPI backend:
uvicorn src.backend.api:app --reload
- In a new terminal, start the Streamlit frontend:
streamlit run src/streamlit/app.py
- Open your browser and navigate to http://localhost:8501
- Upload your resume (PDF or DOCX)
- Upload the job application form (PDF or DOCX)
- Click "Process Files" to start the automated form filling
- Review the generated responses
- Provide feedback if needed
- Submit your feedback to improve the responses
ai-job-application/
├── data/ # Storage for uploaded files
├── src/
│ ├── backend/ # FastAPI backend
│ │ └── api.py # API endpoints
│ ├── streamlit/ # Streamlit frontend
│ │ └── app.py # UI implementation
│ ├── helper/ # Helper functions
│ └── job_application_human_in_loop.py # Core workflow
├── requirements.txt # Project dependencies
└── README.md # Documentation
The application includes comprehensive error handling:
- File upload validation
- Backend processing errors
- Network communication errors
- Workflow state management
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.