If you've ever tried building an AI-powered resume analyzer, one of the first things you discover is that:
"Send the resume to an AI model and ask for an ATS score" isn't really enough.
A useful resume-analysis system needs to answer several questions:
How well does the resume match a specific job description?
Which skills are missing?
Which keywords are missing or underrepresented?
How strong is the ATS compatibility?
Does the candidate's experience match the role?
What could be improved?
Can AI help rewrite the resume?
Can the system compare different resume versions?
I wanted to explore these problems from a backend-engineering perspective, so I built ResumeIQ AI, a Java and Spring Boot based AI resume-analysis application.
The interesting part wasn't simply connecting an application to an AI API.
It was building the workflow around it.
The Technology Stack
The backend is built around:
Java 17
Spring Boot 3
Spring Security
Spring Data JPA
MySQL
Thymeleaf
Maven
OpenAI
Gemini
Ollama
One of the design decisions I wanted to explore was multi-provider AI support, rather than coupling the application to a single AI provider.
- Starting With the Resume and Job Description
An ATS score without a target job isn't particularly meaningful.
Consider a resume containing:
Java
Spring Boot
MySQL
Docker
REST APIs
Microservices
For one position, that could be a strong match.
For another position requiring:
Java
Spring Boot
Kafka
AWS
Kubernetes
Redis
the same resume could have significant gaps.
So instead of asking:
"Is this a good resume?"
the application asks:
"How well does this resume match this particular job?"
The basic workflow is:
Resume
+
Job Description
↓
Resume Analysis
↓
Matching
↓
ATS Score
↓
Skills + Keywords + Gaps
↓
AI Suggestions
↓
Resume Improvement
Here's what the analysis starts with:
ResumeIQ starts with a job description and resume rather than generating a generic resume score.
The user can provide a resume and the complete job description, and the application analyzes the two together.
- Resume → Job Description Matching
The matching process can be thought of as:
Resume
↓
Extract relevant skills / experience / keywords
↓
Job Description
↓
Extract required skills / keywords
↓
Compare
↓
Generate analysis
The result isn't intended to be just one number.
It can contain:
Overall match score
ATS compatibility
Matching skills
Missing skills
Keyword analysis
Experience comparison
Score breakdown
Improvement suggestions
Here's an example from the application:
The analysis provides both an overall match score and a more detailed breakdown of the resume against the job description.
The example shows an 88% match along with an ATS compatibility score of 90%.
The important part is that the score is accompanied by additional information explaining what contributed to it.
- Breaking Down the Score
A single score can be difficult to interpret.
For that reason, ResumeIQ breaks the analysis into different categories.
For example:
Technical Skills
Experience
Projects
Education
Achievements
Each category contributes to the overall analysis.
The score is broken into multiple categories rather than presenting only a single ATS number.
This makes it easier to identify where the resume is relatively strong and where it needs improvement.
- Finding Missing Skills and Keywords
One of the more useful parts of resume-to-job matching is identifying what is missing.
For example, a job description might require:
Java
Spring Boot
Hibernate
PostgreSQL
Microservices
AWS
CI/CD
while the resume may clearly demonstrate some of those skills but not others.
ResumeIQ separates this information into areas such as:
Matching skills
Missing skills
Keyword frequency
Keyword recommendations
Importance of missing skills
The application identifies missing skills and also analyzes how frequently important keywords appear in the resume.
This is more actionable than simply telling someone:
"Your ATS score is 78."
The more useful question is:
"Why is the score 78, and what can I change?"
- Looking Beyond Simple Keyword Matching
Traditional keyword matching has limitations.
Suppose a resume contains:
"Built backend services using Spring Boot."
while a job description says:
"Experience developing RESTful microservices using Spring Boot."
A useful system needs to consider more than whether two strings are identical.
This is where AI can become useful.
The application can use AI to interpret the resume and job-description context and generate recommendations around:
wording
experience descriptions
missing information
resume structure
potential improvements
The goal isn't to let the LLM decide everything.
Instead, the application combines structured analysis with AI-generated reasoning.
- Turning Analysis Into Suggestions
After identifying potential weaknesses, the system can turn them into concrete recommendations.
For example, the analysis can suggest improvements around:
AWS experience
resume structure
duplicate skills
ATS formatting
experience descriptions
The AI layer turns the analysis into specific suggestions instead of stopping at a score.
This creates a workflow closer to:
Analysis
↓
Identify weakness
↓
Explain weakness
↓
Suggest improvement
rather than simply:
Resume → Score → Done
- Before vs After Resume Improvements
One of the more practical features is showing how specific resume statements could be improved.
For example:
Before
Developed and Maintained backend microservices and relational databases in production; reduced API response time by 30% through query optimization and service tuning.
After
Developed and maintained production backend microservices and relational databases using Spring Boot, reducing API response times by 30% via query optimization and database tuning.
The objective isn't to invent experience.
It's to make existing experience clearer and more aligned with the job requirements.
The application shows concrete before-and-after examples rather than only giving general writing advice.
- AI Resume Rewriting
The next step is taking those recommendations and generating a complete improved version.
ResumeIQ includes an AI resume-rewriting workflow that can generate an ATS-oriented version based on the selected job description.
The generated resume can then be reviewed and exported in different formats.
The important design principle here is that the system should improve how existing experience is presented rather than fabricate qualifications.
- Resume Versions and Comparison
Resume optimization is often iterative.
A candidate might have:
Version 1 → 82%
Version 2 → 88%
Version 3 → 92%
Instead of treating every analysis as completely independent, ResumeIQ includes functionality around:
analysis history
resume versions
comparing resumes
tracking score changes
The application also supports comparing two resumes against the same job description.
This can be useful when experimenting with different versions of the same resume.
- Multi-Provider AI
One architectural decision I wanted to explore was avoiding a hard dependency on one AI provider.
ResumeIQ supports:
OpenAI
Gemini
Ollama
Conceptually:
┌── OpenAI
│
Application ── AI Provider Layer ── Gemini
│
└── Ollama
This gives developers flexibility to experiment with different providers and deployment approaches.
For example, a developer might want to use a cloud model in one environment and a locally running model through Ollama in another.
- Why Use Spring Boot?
For this project, Spring Boot acts as the backend foundation connecting the different parts of the application.
The application needs to handle:
Authentication
↓
Resume processing
↓
Job-description processing
↓
Matching
↓
AI integration
↓
Persistence
↓
Analysis results
This is where the project becomes more interesting than simply calling an AI API.
The backend has to coordinate multiple workflows and maintain the state of analyses, resumes and versions.
- The Interesting Engineering Problem
The most interesting part of building an AI application isn't necessarily:
"How do I call an LLM?"
The harder questions are:
What information should be sent to the model?
How much context is enough?
Which parts should be deterministic?
Which parts actually benefit from an LLM?
How do you avoid coupling the entire application to one provider?
These questions become increasingly important as an AI application grows beyond a simple API demo.
- What I Built
The resulting application includes functionality around:
ATS-style resume analysis
Job-description matching
Match scoring
Missing keywords
Missing skills
Keyword analysis
Experience-gap detection
Improvement suggestions
AI rewriting
Resume/JD comparison
Resume versioning
Analysis history
Interview preparation
Multiple AI providers
Dashboard functionality
The project is designed as a source-code foundation that developers can customize and extend, rather than as a hosted SaaS product.
- What I'd Improve Next
There are several areas I'd like to explore further.
Better semantic matching
Moving beyond basic keyword matching toward deeper semantic comparison between resume experience and job requirements.
Better context selection
Determining which parts of a resume and job description actually need to be sent to the model.
Model evaluation
Creating a consistent way to compare different models and prompts for resume-analysis tasks.
More provider flexibility
Making it easier to switch between cloud-based and locally hosted models.
More career workflows
Expanding the system beyond resume analysis into additional parts of the job-search workflow.
Final Thoughts
Building ResumeIQ changed how I think about AI applications.
The interesting part isn't:
Resume → LLM → Score
It's the system around the model:
Structured Analysis
+
Matching
+
AI Reasoning
+
Actionable Recommendations
+
Resume Improvement
AI becomes much more useful when it is combined with application logic instead of being treated as the entire application.
For me, the combination of:
Java + Spring Boot + AI + document processing + matching + real-world automation
is what makes this project interesting from a backend-engineering perspective.
Source Code
If you're building a resume platform, career SaaS, ATS tool, or experimenting with AI-powered career applications, I made the complete ResumeIQ AI source code available as a customizable Spring Boot foundation.
ResumeIQ AI — AI Resume Analyzer & ATS SaaS Starter
https://javacoder716.gumroad.com/l/resumeiq-ai








Top comments (1)
One thing I found interesting while building this was that the LLM is only one part of the system. The more important engineering challenge was turning resume parsing, keyword extraction, scoring, matching, and AI reasoning into a consistent workflow.