ApplyLint is an AI workflow that prepares, audits, and refines job application cover letters before submission.
Instead of generating unverified text, ApplyLint runs an adversarial review loop: it evaluates candidate fit, drafts an initial letter, checks it against 32 canonical recruiter rejection codes, and rewrites the content to fix grounding errors without inventing missing qualifications.
ApplyLint-Demo-Walkthrough.mp4
Resume + Job Description
↓
Match Analysis
↙ ↘
[not_a_fit] [fit]
↓ ↓
END Cover Letter Generation
↓
Recruiter Lint (Attack)
↓
Cover Letter Improvement (Defense)
↓
END
- Candidate Data is the source of truth: The model cannot invent skills, metrics, job titles, or dates.
- Transferable experience boundary: Adjacent experience explains adaptability, but is never presented as existing experience with an unfamiliar tool.
- Adversarial evaluation: Recruiter Lint flags claims unsupported by Candidate Data or in conflict with timeline constraints.
- Candidate in control: ApplyLint prepares, analyzes, and improves applications. It never submits them on the user's behalf.
Detailed documentation for each stage of the pipeline:
- AI Workflow Overview: Complete multi-stage LangGraph pipeline and streaming state lifecycle.
- Match Analysis: Candidate-job requirement matching, scoring caps, and fit recommendations.
- Cover Letter Generation: Initial generation modes and grounding constraints.
- Recruiter Lint: 32 canonical reason codes, severity levels, and adversarial validation contracts.
- Cover Letter Improvement: Strategy matrix for resolving findings truthfully.
- AI & Orchestration: LangGraph, LangChain, Ollama
- Backend: FastAPI, Python 3.10+, SQLAlchemy, aiosqlite, Alembic
- Frontend: Angular 22, Tailwind CSS, Spartan UI
- Streaming: Server-Sent Events (SSE) for live node updates
- Python 3.10+
- Node.js (tested on v24.19.0) and npm
- Ollama running locally
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn main:appThe API runs at http://localhost:8000.
cd frontend
npm install
npm run build
npm run startThe frontend runs at http://localhost:4200.
ApplyLint started as a 48-hour build-in-public marathon project to address hallucinations and ungrounded claims in AI job applications. It is under active development to add resume tailoring, automated file ingestion, and a dedicated verification stage.