I Built a Free ATS Resume Checker for Indian Job Seekers — No LLM, No Build Step, No Framework A developer built ATSMeter, a free ATS resume checker tailored for Indian job seekers. The tool uses deterministic rule-based checks instead of LLMs, runs on a vanilla JS frontend with no framework, and stores no resume content. It supports two-column layouts, CGPA, fresher resumes, and distinguishes between government/PSU and private-sector targeting. 🔗 Live: atsmeter.in Why I built this Most free ATS resume checkers are built for the US job market. They flag CGPA as "unnecessary personal data," don't understand fresher/campus-project resumes, and give the same advice regardless of whether you're applying to a private company or a government/PSU role in India — where the same detail DOB, photo, father's name means completely opposite things depending on who's screening you. So I built ATSMeter — a free, unlimited ATS resume checker plus cover letter and LinkedIn About checkers made specifically for Indian job seekers. The interesting technical decisions No LLM in the scoring path. Every finding is a deterministic, rule-based check — regex patterns, layout heuristics from pdfplumber two-column detection, header/footer band detection for contact info , keyword matching. Same resume in, same score out, every time. No black box, no hallucinated feedback, and it means I can explain every single finding with the exact reason behind it. No framework, no build step. The frontend is plain HTML/CSS/JS across three pages. No React, no bundler, no TypeScript. For a tool this size, that means instant load times, zero dependency-update maintenance, and I can read the entire codebase top to bottom in a sitting. Firebase Auth via raw REST API, not the SDK. Sign-in is optional email-link, passwordless and only unlocks cross-device score history. I called Firebase's REST endpoints directly instead of loading the Firebase JS SDK, specifically so I could keep a strict CSP script-src 'self' — no third-party script CDN needed at all. Nothing is stored, structurally. Your resume/cover letter/LinkedIn text is parsed in memory for the duration of one request and discarded. If you sign in, we store only score/type/filename/date — never the actual content. This isn't just a privacy policy sentence, it's enforced by the code path itself: there's no code that ever writes resume text anywhere. It's a real PWA. Installable on iOS/Android/desktop, works offline via a service worker caching the app shell, with network-first fetching so a new deploy shows up immediately instead of needing a stale cache to expire. What it checks Two-column layouts and tables that scramble when an ATS parses them Contact info accidentally sitting in a header/footer band that some parsers skip CGPA, fresher/campus-project resumes scored on their own merit, not penalized for missing "experience" Govt/PSU vs private-sector targeting — same resume, different rules, because the right answer genuinely differs Passive/filler phrases with suggested action-verb rewrites Missing quantified results Stack FastAPI + pdfplumber/python-docx on the backend, deployed on Google Cloud Run. Vanilla JS frontend, Firebase Auth/Firestore/Cloud Storage for the optional account features private bucket, served only to its owner — no public URLs . It's free, unlimited, and takes about 10 seconds — no sign-up required to check a resume. 🔗 atsmeter.in — feedback welcome, especially if something looks wrong on your resume.