An evidence-based ATS evaluator that scores resumes on weighted requirement coverage —
not arbitrary keyword-density deductions like most resume checkers.
Most ATS checkers count keywords and dock points blindly. This one runs a real weighted rubric: the top 3-4 requirements near the top of a job description carry 60% of the fit score, secondary/nice-to-have skills carry the remaining 40% — the same way a recruiter actually screens, not a flat keyword match.
It also catches a specific, common resume-writing failure most tools miss entirely: keyword stuffing without evidence. If a skill only appears in a bare "Skills" list with no supporting work-experience bullet, the evaluator downgrades its match weight to 0.5 and flags it as unverified — because a recruiter would catch that gap too.
| Module | What it does |
|---|---|
| 📊 Recruiter Audit | Weighted fit score (0-100), critical/warning red flags, 3-5 non-negotiable knockout checks, missing core vs. bonus skills |
| 🔍 Anti-Stuffing Detection | Downgrades and flags skills with no bullet-point evidence, instead of trusting the skills list at face value |
| 💥 Impact Analysis | Flags banned filler words and weak bullets, rewrites them with the specific flaw explained |
| 📝 Live Editor | Edit the extracted resume text directly and re-run evaluation |
| 🎙️ Interview Prep | 5 targeted questions (3 technical gaps + 2 behavioral) with ideal talking points, generated from your actual gaps |
| ⚡ Outreach Generator | A cold email (under 100 words) and a tailored 4-paragraph cover letter — with an explicit banned-word list ("delve," "seamlessly," "spearheaded," "results-driven," "thrilled") to avoid sounding AI-written |
| 📜 Application History | Persistent Supabase storage — search and revisit past evaluations |
| 📄 Direct File Upload | Accepts PDF and Word documents directly — PDFs are sent natively to Gemini, not just text-extracted |
- Framework: Next.js (App Router), TypeScript
- AI Engine: Google Gemini API (
gemini-2.5-flash), structured JSON schema outputs,temperature=0for evaluation determinism - File Parsing: Native PDF ingestion via Gemini,
mammothfor.docxfallback - Database: Supabase (Postgres)
- Styling: Tailwind CSS
- Deployment: Vercel
- Model version: currently pinned to
gemini-2.5-flash. My other active projects run on the newergemini-3.xline — this needs a bump and a re-test before it's fully current.
git clone https://github.com/Ananth-Sai/ATS-Evaluator.git
cd ATS-Evaluator
npm installRun this in your Supabase SQL editor:
create table applications (
id uuid default gen_random_uuid() primary key,
created_at timestamp with time zone default timezone('utc'::text, now()) not null,
job_title text,
company_name text,
match_score numeric,
analysis_json jsonb
);
alter table applications enable row level security;
create policy "Allow public access to applications"
on applications for all
using (true)
with check (true);Create .env.local:
GEMINI_API_KEY=your_gemini_api_key_here
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
npm run devOpen http://localhost:3000.
Deployed on Vercel — push to GitHub, import the repo, and add the same three environment variables in the Vercel project settings.
MIT
