DEV Community

Resumemind
Resumemind

Posted on

How I Built a Manual Resume Review System with Spring Boot & Angular

Most resume tools today rely on automatic scanners. I wanted to build something different: a human-driven resume review system that focuses on clarity, intent, and real feedback.

Why I Built This Feature

As a developer and someone who reviews resumes often, I noticed a gap:

  • Automatic resume analyzers score keywords
  • They miss career intent, role clarity, and story
  • Job seekers want human feedback, not just numbers

So I decided to build a manual resume review feature inside Resumemind, using Spring Boot and Angular.

What the Feature Does

Users can:

  • Submit their resume for review
  • Upload a PDF file or provide a Google Drive / external link
  • Receive confirmation via email
  • Get reviewed manually by an admin

Admins can:

  • View all submissions
  • Download or preview resumes securely
  • Update review status
  • Respond with meaningful feedback

No AI scoring. No ATS tricks. Just real review.

High-Level Architecture

Frontend (Angular)

  • Reactive forms
  • File upload with validation
  • URL validation (file OR link required)
  • Clean UX feedback

Backend (Spring Boot)

  • Multipart file handling
  • Secure file storage
  • Database persistence
  • Email notifications
  • Admin review endpoints

Backend Implementation (Spring Boot)

Handling File Uploads

I used MultipartFile with multipart/form-data:

@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ApiResponseEntity submitReview(
        @RequestParam("name") String name,
        @RequestParam("email") String email,
        @RequestParam(value = "file", required = false) MultipartFile file,
        @RequestParam(value = "link", required = false) String link
) {
    return resumeReviewService.addResumeReview(name, email, file, link);
}

Enter fullscreen mode Exit fullscreen mode

File Storage Strategy

  • Files are saved outside public directories
  • Only PDF files allowed
  • Files are accessed via a controlled API endpoint

This avoids exposing /uploads directly.

Serving PDF Files Securely

Instead of accessing files directly, I exposed them via an API:

@GetMapping("/file/{filename}")
public ResponseEntity<Resource> viewFile(@PathVariable String filename) {
    Resource file = fileService.load(filename);
    return ResponseEntity.ok()
            .contentType(MediaType.APPLICATION_PDF)
            .body(file);
}

Enter fullscreen mode Exit fullscreen mode

Angular simply calls this endpoint to preview or download the file.

Frontend Implementation (Angular)

Validation Logic

  • Resume file OR link is required
  • Strong URL validation using regex
  • File size & type checks

Example URL regex:

Validators.pattern(
  /^(https?:\/\/)(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,}([\/\w.-]*)*\/?$/
)
Enter fullscreen mode Exit fullscreen mode

This blocks invalid inputs like:

  • httpss/me.com
  • httpss;\me.com

Admin Dashboard (Most Important Part)

This is where the system becomes real.

Admin features:

  • List all submissions
  • View resume details
  • Open PDF securely
  • Track review status (NOT_REVIEWED, REVIEWED)
  • Respond manually

This turns the app from a tool into a service.

Email Notifications

Emails are sent when:

  • A resume is submitted
  • Admin receives a new review request

Why this matters:

  • Builds trust
  • Confirms action
  • Makes the system feel alive

Security & Trust Decisions

Some important choices I made:

  • Only PDFs allowed
  • File size limits
  • No public file exposure
  • Optional anonymous submissions
  • No third-party resume analysis

Trust was a feature, not an afterthought.

Lessons Learned

  • Multipart handling is easy to break if content-type isn’t correct
  • Swagger isn’t ideal for file uploads
  • Serving files via API is safer than static paths
  • UX matters just as much as backend logic

What’s Next

  • Resume review responses
  • Admin notes & history
  • Optional paid reviews
  • Resume improvement tips

Final Thoughts

Building this feature reminded me that real value comes from solving real problems.

Sometimes, manual systems are better than automated ones.

If you’re building developer tools or career platforms, don’t underestimate the power of human feedback.

🔗 Built with:

  • Spring Boot
  • Angular
  • Resumemind

If you have a resume that you would like my team to review, just hit this link : https://resumemind.com/public/resume-review

Top comments (0)