ResumeAgent — Project Story


🌟 Inspiration

Every day, thousands of qualified candidates get silently rejected — not by a human, but by an algorithm.

It started with a frustrating reality we kept witnessing around us: people with genuine skills, real experience, and strong potential were being filtered out by Applicant Tracking Systems (ATS) before their resumes ever reached a recruiter's desk. Studies show that over 75% of resumes are rejected by ATS before a human ever sees them — not because the candidates were unqualified, but because their resumes weren't optimized for automated parsing.

We saw friends spend hours manually tweaking resumes for each job application, often unsure whether they were using the right keywords or the right structure. We saw others turn to generic AI tools — only to receive fabricated achievements and made-up skills that didn't reflect their real experience at all.

That's what inspired ResumeAgent: a responsible, accurate, and intelligent AI platform that gives every candidate a fair shot — by transforming their real experience into a version that ATS systems can actually read and rank correctly. Not by inventing skills. Not by inflating experience. Just by presenting what's already there in the best possible way.


🤖 What It Does

ResumeAgent is a full-stack, AI-powered web application that takes a candidate's master resume and a target job description, and generates a tailored, ATS-optimized, professionally formatted DOCX resume — specific to that job opportunity.

Here's what the platform does end-to-end:

  • Parses the user's master resume into a structured, machine-readable format
  • Analyzes the target job description to extract required skills, responsibilities, and ATS-critical keywords
  • Semantically matches the candidate's experience against the job requirements — identifying strong matches, partial overlaps, and emphasis areas
  • Rewrites the resume content using job-aligned language while strictly preserving factual accuracy — no hallucinations, no fabrications
  • Optimizes the final content for ATS compatibility: standardized section headings, keyword placement, plain-text structure, and proper formatting
  • Generates a downloadable, fully editable DOCX resume in the user's chosen template style
  • Enforces subscription-based usage limits to manage costs and prevent abuse

The result is a resume that genuinely represents the candidate — just presented in a way that ATS systems understand and rank favorably.


🛠️ How We Built It

ResumeAgent is a production-grade application built with enterprise-grade technologies across the full stack.

Backend — Java 21 + Spring Boot

The core processing engine is built with Java 21 and Spring Boot, providing a robust REST API with dependency injection, security, and structured exception handling. Spring AI serves as the abstraction layer for AI model integration, allowing us to switch models without rewriting business logic.

Multi-Agent AI Pipeline

The heart of ResumeAgent is a sequential multi-agent pipeline where each agent has a single, well-defined responsibility:

Agent Role
Resume Parser Agent Extracts and structures resume data into JSON
Job Description Analyzer Agent Identifies required skills, keywords, and expectations
Matching Agent Performs semantic alignment between resume and job requirements
Resume Rewrite Agent Rephrases content using job-specific language — no fabrication
ATS Optimization Agent Validates keyword placement, headings, and ATS compatibility

Each agent receives a focused, minimal prompt — reducing token usage, limiting hallucination risk, and keeping outputs structured and predictable.

AI Integration — OpenRouter

We used OpenRouter as our unified API gateway, giving us access to multiple OpenAI-compatible models. This model-agnostic design lets us optimize for cost, quality, or speed per task without infrastructure changes.

Document Generation — Apache POI

Final resumes are generated programmatically using Apache POI's XWPFDocument API. AI generates content only — all layout, typography, spacing, and structure are 100% controlled by Java rendering services. This ensures ATS-compliant, consistent, and professional documents every single time.

Two template variants were built:

  • GreenResumeDocxService — modern aesthetic for tech and creative roles
  • BlueResumeDocxService — clean, conservative layout for finance, legal, and corporate roles

Database — PostgreSQL + FlywayDB

PostgreSQL manages users, resume versions, agent execution logs, token usage tracking, and subscription quotas. FlywayDB handles schema versioning across environments. The database includes full audit trails, soft-deletion, JSONB storage for flexible resume data, and security tables for JWT refresh tokens, email verification, and password history.

Frontend — Next.js + TypeScript + Shadcn UI

The user-facing interface is built with Next.js, TypeScript, and Shadcn UI, delivering a modern, accessible, and responsive experience.


🚧 Challenges We Ran Into

1. Preventing AI Hallucinations

The biggest challenge was ensuring the AI never fabricates information. Generic AI tools frequently invent skills, certifications, or achievements not present in the original resume. We solved this through a multi-agent architecture with strict input constraints — each rewrite agent operates only on validated structured data from prior agents, with explicit prompts prohibiting content addition beyond what exists in the master resume.

2. Balancing ATS Compliance with Readability

ATS systems prefer plain-text, single-column layouts — but users also want professional-looking documents. Designing DOCX templates that are both visually polished and ATS-safe required extensive research into how major platforms (Greenhouse, Lever, Workday) parse documents. We ultimately avoided tables for layout, graphics, and complex formatting — relying on clean typography and structured headings instead.

3. Cost-Efficient AI Usage

Running five AI agents per resume generation can get expensive quickly. We tackled this by designing small, focused prompts with structured JSON outputs — minimizing verbose generation and wasted tokens. Using OpenRouter also allowed us to select lighter, faster models for simpler tasks and reserve more capable models only where needed.

4. Structured JSON Reliability

Getting AI models to consistently return valid, schema-compliant JSON — without wrapping it in markdown fences or adding unexpected fields — required careful prompt engineering and response validation at each pipeline stage. We built retry and fallback logic to handle edge cases gracefully.

5. Separation of AI and Layout

A key architectural decision was ensuring AI never touches formatting. Early prototypes let AI influence layout descriptions, resulting in inconsistent outputs. We refactored to make rendering services fully deterministic — the same JSON always produces the same DOCX, regardless of AI output variation.


🏆 Accomplishments That We're Proud Of

  • Zero hallucination architecture: Built an AI pipeline where all outputs are traceable back to the original master resume — no fabricated content
  • Full-stack production quality: Designed and implemented a complete SaaS-grade application, not just a demo — with authentication, subscription enforcement, audit logging, and token tracking
  • Programmatic DOCX generation: Achieved professional, ATS-compliant resume output entirely through code — no static templates, no formatting fragility
  • Multi-agent modularity: Each agent is independently testable, replaceable, and extensible — a genuinely scalable architecture
  • Cost-conscious AI design: Kept AI usage efficient and predictable through structured prompts, focused agents, and model-appropriate task assignment
  • User control by design: The final DOCX is fully editable — users own their resume completely, with no vendor lock-in

📚 What We Learned

  • AI reliability requires architecture, not just prompts. A single monolithic AI prompt for resume generation is fragile and unpredictable. Breaking the task into specialized agents dramatically improved accuracy and consistency.

  • Structured outputs are non-negotiable for production AI. JSON-constrained outputs reduced hallucination risk and made downstream processing deterministic. Verbose free-text generation creates too much variability.

  • Separation of concerns matters more with AI. Keeping AI out of layout decisions — and restricting it strictly to content — was the single most important architectural choice we made.

  • ATS compatibility is more nuanced than it appears. Different ATS platforms have different parsing behaviors. Designing for the lowest common denominator — plain text, standard headings, no graphics — proved to be the right strategy.

  • Cost optimization is a product feature, not an afterthought. Designing for token efficiency from day one kept the system economically viable, which matters deeply for any real-world AI application.


🚀 What's Next for ResumeAgent

ResumeAgent is just getting started. Here's where we're headed:

Near-Term

  • Web-based resume editor with real-time WYSIWYG preview and live DOCX regeneration
  • Skill gap analysis showing candidates exactly what qualifications they're missing for a target role
  • Resume version comparison to track changes and improvements over time
  • More template variants for different industries and career stages

Medium-Term

  • AI-generated cover letters tailored to each specific job application
  • Paid subscription tiers (Pro, Enterprise) with higher generation limits
  • User-provided API keys for unlimited, self-funded usage
  • OAuth and SSO for streamlined authentication

Long-Term Vision

  • Career optimization platform with job matching, interview preparation, and application tracking
  • LinkedIn profile optimization synchronized with the user's master resume
  • Local LLM support for privacy-sensitive usage without sending data to external APIs
  • Integration with job boards for one-click, pre-optimized application submission

ResumeAgent's mission is simple: ensure that no qualified candidate is silently filtered out because of a formatting problem. Every person deserves to have their real skills seen — and AI should be the solution, not another barrier.


Built with Java 21 · Spring Boot · Spring AI · Next.js · PostgreSQL · Apache POI · OpenRouter

Built With

Share this project:

Updates