Skip to content
← All projects

Case study · Product · 2026

ATS Resume Checker

Upload a resume and get an ATS score, what is working, what is missing and concrete tips to fix it. You can try it on this site.

  • Spring Boot
  • Java
  • Apache Tika
  • Next.js
  • Cohere
The ATS Resume Checker showing a score with strengths and fixes

The problem

Many companies filter resumes with software before a person reads them. Most free checkers return a bare number. I wanted a free tool that explains the score in plain language and says exactly what to change.

How it works

  1. 01

    A Next.js page sends the file to a route on the same site, which forwards it to a Spring Boot service.

  2. 02

    Apache Tika reads the text out of PDF, DOCX and TXT files.

  3. 03

    Cohere writes the review. If the AI service is missing or fails, a rules-based analysis answers instead, so there is always a score.

  4. 04

    The PDF report is built in the browser with jsPDF, loaded only when the button is pressed.

Decisions worth explaining

The AI never blocks the result

A visitor with a good resume should not see an error because a third-party model had a bad minute. The local analysis is a real fallback, not a placeholder.

The backend is not public

The browser only talks to this site. The site adds a shared secret and the service rejects any call without it, so strangers cannot spend the AI budget. File type, size, same-origin and per-visitor limits are checked before anything is forwarded.

Hostile files are expected

Testing found that a 4 MB file with no spaces kept the service busy for over two minutes, because two search patterns slowed down quadratically on long unbroken text. I bounded the patterns, capped the text analysed and added a regression test. The same file now finishes in under a second.

Nothing is stored

Files are processed in memory. An earlier version kept a database and an admin panel; removing both removed most of its risks.

What I learned

  • Test with hostile input, not only friendly input.
  • Wake slow free-tier services ahead of time instead of showing a long spinner.
  • A smaller surface has fewer bugs: deleting features was the best security fix.

Want something like this built?

Tell me what you need and I will reply within a day.