Sitemap
Niteshrana

Niteshrana

Java & Backend Developer | System Design Enthusiast | Writing about JVM, performance & real-world engineering ⚡ Clean Code Advocate

Resume Builder (ATS-Friendly) — Complete Project Blueprint

3 min readFeb 19, 2026

--

Resume Builder (ATS-Friendly) — Complete Project Blueprint

1. Project Overview

Project Name: Resume Builder (ATS-Friendly Resume Generator)

Goal: Build a cloud-deployed, microservices-based application where users provide a Job Description and Applicant Data, and the system generates an ATS-optimized resume that can be downloaded as a PDF.

Tech Stack: — Java 17 — Spring Boot — Microservices Architecture — AWS (EC2, S3, IAM, CloudWatch) — REST APIs

2. High-Level Architecture Diagram

┌────────────────────────┐
│ Landing Page (UI) │
│ HTML/CSS/JS or React │
│ Hosted on AWS S3 │
└───────────┬────────────┘
│
▼
┌──────────────────┐
│ Resume Service │
│ (Spring Boot) │
│ EC2 : 8081 │
└───────┬──────────┘
│ REST
┌───────────────┼────────────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ ATS Service │ │ File Service │
│ Keyword + Score │ │ PDF + S3 Upload │
│ EC2 : 8082 │ │ EC2 : 8083 │
└──────────────────┘ └─────────┬────────┘
│
▼
┌────────────┐
│ AWS S3 │
│ Resume PDF │
└────────────┘

3. Microservices Breakdown

3.1 Resume Service (Core Service)

Responsibility: — Accept user input — Generate structured resume content — Call ATS Service — Call File Service

Port: 8081

API:

POST /resume/generate

3.2 ATS Service

Responsibility: — Extract keywords from Job Description — Match against resume content — Calculate ATS score

Port: 8082

API:

POST /ats/analyze

3.3 File Service

Responsibility: — Convert resume text to PDF — Upload PDF to AWS S3 — Return downloadable URL

Port: 8083

API:

POST /file/generate-pdf

4. End-to-End Flow

User → Landing Page
→ Resume Service
→ ATS Service
→ Resume Service
→ File Service
→ AWS S3
→ Download Resume PDF

5. Folder Structure (Root Level)

resume-builder/
│
├── resume-service/
├── ats-service/
├── file-service/
├── frontend/
└── README.md

6. Resume Service — Folder Structure

resume-service/
├── src/main/java/com/resumebuilder/resume/
│ ├── controller/
│ │ └── ResumeController.java
│ ├── service/
│ │ ├── ResumeGeneratorService.java
│ │ └── ExternalServiceClient.java
│ ├── model/
│ │ ├── ResumeRequest.java
│ │ ├── ResumeResponse.java
│ │ └── Applicant.java
│ └── ResumeServiceApplication.java
│
├── src/main/resources/
│ └── application.yml
└── pom.xml

7. ATS Service — Folder Structure

ats-service/
├── src/main/java/com/resumebuilder/ats/
│ ├── controller/
│ │ └── AtsController.java
│ ├── service/
│ │ └── AtsAnalyzerService.java
│ ├── model/
│ │ ├── AtsRequest.java
│ │ └── AtsResponse.java
│ └── AtsServiceApplication.java
│
├── src/main/resources/
│ └── application.yml
└── pom.xml

8. File Service — Folder Structure

file-service/
├── src/main/java/com/resumebuilder/file/
│ ├── controller/
│ │ └── FileController.java
│ ├── service/
│ │ ├── PdfGeneratorService.java
│ │ └── S3UploadService.java
│ ├── model/
│ │ └── FileRequest.java
│ └── FileServiceApplication.java
│
├── src/main/resources/
│ └── application.yml
└── pom.xml

9. Frontend Folder Structure

frontend/
├── index.html
├── css/
│ └── style.css
├── js/
│ └── app.js
└── assets/

10. AWS Deployment Mapping

Component

Get Niteshrana’s stories in your inbox

Join Medium for free to get updates from this writer.

AWS Service

Resume Service

EC2

ATS Service

EC2

File Service

EC2

Resume PDFs

S3

Frontend

S3

Permissions

IAM

Logs

CloudWatch

11. application.yml (Example)

server:
port: 8081

spring:
application:
name: resume-service

12. What This Project Proves (For Interviews)

· Microservices architecture

· REST-based inter-service communication

· ATS optimization logic

· AWS EC2 & S3 deployment

· Real-world problem solving

· Clean folder structure & separation of concerns

13. Next Steps

1. Build Resume Service first

2. Test APIs using Postman

3. Add ATS Service

4. Add File Service

5. Deploy on AWS EC2

6. Host frontend on S3

--

--

Niteshrana
Niteshrana

Written by Niteshrana

Java & Backend Developer | System Design Enthusiast | Writing about JVM, performance & real-world engineering ⚡ Clean Code Advocate