# mohamed-imran-12/resume-analyser architecture

> Architecture diagram of the GitHub repository mohamed-imran-12/resume-analyser, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mohamed-imran-12/resume-analyser
- Repository: https://github.com/mohamed-imran-12/resume-analyser

## Overview

#### Purpose and deployment
Resume Analyzer is a full-stack application that accepts resumes, uses Gemini AI to produce evaluation/skill/improvement insights, and retrieves job suggestions from Adzuna. It also supports local and Google authentication, email verification, password reset, and analysis history. Spring Boot is the production entry point and serves the compiled React SPA.
- `src/main/java/com/ai/Resume/analyser/ResumeAnalyserApplication.java`
- `src/main/resources/static/index.html`
- `Dockerfile`, `render.yaml`

#### Client application
The editable frontend is a Vite/React SPA. `main.jsx` mounts the app; shared application context coordinates client-side state. Pages cover landing, login, password reset, resume upload, and analysis result views. Production assets are copied into Spring Boot static resources rather than hosted separately.
- `frontend src/src/main.jsx`
- `frontend src/src/App.jsx`
- `frontend src/src/appcontext.jsx`
- `frontend src/src/upload/upload.jsx`
- `frontend src/src/analyse/analyse.jsx`

#### HTTP and application boundary
Spring MVC controllers expose the backend surface and separate general application, frontend/static routing, and security-related flows. Service classes hold the orchestration boundary between requests, persistence, AI/job APIs, and authentication outcomes.
- `src/main/java/com/ai/Resume/analyser/controller/appController.java`
- `src/main/java/com/ai/Resume/analyser/controller/securityController.java`
- `src/main/java/com/ai/Resume/analyser/service/appService.java`
- `src/main/java/com/ai/Resume/analyser/service/securityService.java`

#### Resume analysis and job enrichment
The primary user flow is frontend upload/request → application service → Gemini analysis → structured result DTO returned to the UI. The same application layer integrates Adzuna job search and maps external job/company/location data into internal models. Gemini model/API behavior is centralized in the application service, making it the replacement point for a different AI provider.
- `src/main/java/com/ai/Resume/analyser/service/appService.java`
- `src/main/java/com/ai/Resume/analyser/model/resultsDto.java`
- `src/main/java/com/ai/Resume/analyser/model/JobSearchResponse.java`
- `src/main/java/com/ai/Resume/analyser/model/Job.java`

#### Identity and access control
Spring Security configuration and a JWT filter protect authenticated backend operations. Authentication can use credentials or Google OAuth2; JWT creation/validation is isolated in the JWT service. Success/failure handlers likely bridge OAuth/security outcomes into application redirects or responses.
- `src/main/java/com/ai/Resume/analyser/configuration/securityConfiguration.java`
- `src/main/java/com/ai/Resume/analyser/jwt/jwtFilter.java`
- `src/main/java/com/ai/Resume/analyser/jwt/jwtService.java`
- `src/main/java/com/ai/Resume/analyser/service/successHandler.java`

#### Verification and recovery
Registration/email verification and password-reset workflows persist OTP-related state, invoke Brevo through the mail service, and render dedicated HTML email templates. This is a distinct external-service boundary from core authentication.
- `src/main/java/com/ai/Resume/analyser/mail/mailService.java`
- `src/main/java/com/ai/Resume/analyser/repository/otpVerifyRepo.java`
- `src/main/resources/templates/verify-otp.html`
- `src/main/resources/templates/reset-otp.html`

#### Persistence and infrastructure
MySQL is the required datastore, accessed through repositories for users, OTP verification, and prior analysis/history records. Runtime configuration supplies MySQL, Google OAuth, Gemini, Brevo, Adzuna, and JWT secrets. Maven builds the Java runtime; Node/Vite builds frontend artifacts.
- `src/main/java/com/ai/Resume/analyser/repository/usersTableRepo.java`
- `src/main/java/com/ai/Resume/analyser/repository/prevTable.java`
- `src/main/java/com/ai/Resume/analyser/model/usersTable.java`
- `src/main/resources/application.properties`
- `pom.xml`

Main entry points: [`src/main/java/com/ai/Resume/analyser/service/appService.java`](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/service/appService.java) (Analysis and jobs service), [`src/main/java/com/ai/Resume/analyser/service/securityService.java`](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/service/securityService.java) (Authentication service), [`frontend src/src/App.jsx`](https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/App.jsx) (App and client state), [`src/main/java/com/ai/Resume/analyser/controller/appController.java`](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/controller/appController.java) (Application controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_vite["Vite React SPA<br/>frontend build<br/>[main.jsx]"]
  node_app["App and client state<br/>React composition<br/>[App.jsx]"]
  node_upload["Resume upload<br/>React view<br/>[upload.jsx]"]
  node_analysis_view["Analysis results<br/>React view<br/>[analyse.jsx]"]
end

subgraph group_backend["Spring Boot backend"]
  node_boot["Spring Boot application<br/>runtime entry point"]
  node_static_spa["Compiled SPA assets<br/>static resources<br/>[index.html]"]
  node_app_controller["Application controller<br/>Spring MVC API<br/>[appController.java]"]
  node_app_service["Analysis and jobs service<br/>application service<br/>[appService.java]"]
  node_analysis_models["Analysis and job DTOs<br/>response models<br/>[resultsDto.java]"]
end

subgraph group_security["Identity and security"]
  node_security_controller["Security controller<br/>Spring MVC API"]
  node_security_service["Authentication service<br/>application service"]
  node_security_config["Security configuration<br/>Spring Security"]
  node_jwt["JWT filter and service<br/>token security<br/>[jwtFilter.java]"]
  node_mail["Verification mail service<br/>email workflow<br/>[mailService.java]"]
end

subgraph group_data["Data and external services"]
  node_mysql[("MySQL<br/>relational datastore")]
  node_user_repo["User repository<br/>JPA repository"]
  node_history_repo["Analysis history repository<br/>JPA repository<br/>[prevTable.java]"]
  node_otp_repo["OTP repository<br/>JPA repository<br/>[otpVerifyRepo.java]"]
  node_gemini{{"Gemini API<br/>AI provider"}}
  node_adzuna{{"Adzuna API<br/>job search provider"}}
  node_brevo{{"Brevo<br/>email provider"}}
end

node_vite -->|"mounts"| node_app
node_app -->|"renders"| node_upload
node_app -->|"renders"| node_analysis_view
node_vite -->|"builds into"| node_static_spa
node_boot -->|"serves"| node_static_spa
node_upload -->|"uploads resume"| node_app_controller
node_analysis_view -->|"requests results"| node_app_controller
node_app_controller -->|"delegates"| node_app_service
node_app_service -->|"analyzes resume"| node_gemini
node_app_service -->|"searches jobs"| node_adzuna
node_app_service -->|"returns"| node_analysis_models
node_app_service -->|"stores history"| node_history_repo
node_security_controller -->|"delegates"| node_security_service
node_security_config -->|"installs"| node_jwt
node_jwt -.->|"protects"| node_security_controller
node_security_service -->|"issues and validates"| node_jwt
node_security_service -->|"manages users"| node_user_repo
node_security_service -->|"persists OTPs"| node_otp_repo
node_security_service -->|"sends verification/reset"| node_mail
node_mail -->|"delivers email"| node_brevo
node_user_repo -->|"persists"| node_mysql
node_history_repo -->|"persists"| node_mysql
node_otp_repo -->|"persists"| node_mysql

click node_vite "https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/main.jsx"
click node_app "https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/App.jsx"
click node_upload "https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/upload/upload.jsx"
click node_analysis_view "https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/analyse/analyse.jsx"
click node_boot "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/ResumeAnalyserApplication.java"
click node_static_spa "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/resources/static/index.html"
click node_app_controller "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/controller/appController.java"
click node_app_service "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/service/appService.java"
click node_analysis_models "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/model/resultsDto.java"
click node_security_controller "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/controller/securityController.java"
click node_security_service "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/service/securityService.java"
click node_security_config "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/configuration/securityConfiguration.java"
click node_jwt "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/jwt/jwtFilter.java"
click node_mail "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/mail/mailService.java"
click node_user_repo "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/repository/usersTableRepo.java"
click node_history_repo "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/repository/prevTable.java"
click node_otp_repo "https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/repository/otpVerifyRepo.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_vite,node_app,node_upload,node_analysis_view toneBlue
class node_boot,node_static_spa,node_app_controller,node_app_service,node_analysis_models toneAmber
class node_security_controller,node_security_service,node_security_config,node_jwt,node_mail toneMint
class node_mysql,node_user_repo,node_history_repo,node_otp_repo,node_gemini,node_adzuna,node_brevo toneRose
```

## Components

### React client

- [Vite React SPA](https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/main.jsx): frontend build · Editable single-page client application. · `frontend src/src/main.jsx`
- [App and client state](https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/App.jsx): React composition · `frontend src/src/App.jsx`
- [Resume upload](https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/upload/upload.jsx): React view · `frontend src/src/upload/upload.jsx`
- [Analysis results](https://github.com/mohamed-imran-12/resume-analyser/blob/main/frontend%20src/src/analyse/analyse.jsx): React view · `frontend src/src/analyse/analyse.jsx`

### Spring Boot backend

- [Spring Boot application](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/ResumeAnalyserApplication.java): runtime entry point · Serves the compiled SPA and backend APIs. · `src/main/java/com/ai/Resume/analyser/ResumeAnalyserApplication.java`
- [Compiled SPA assets](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/resources/static/index.html): static resources · `src/main/resources/static/index.html`
- [Application controller](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/controller/appController.java): Spring MVC API · `src/main/java/com/ai/Resume/analyser/controller/appController.java`
- [Analysis and jobs service](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/service/appService.java): application service · Orchestrates resume analysis and job enrichment. · `src/main/java/com/ai/Resume/analyser/service/appService.java`
- [Analysis and job DTOs](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/model/resultsDto.java): response models · `src/main/java/com/ai/Resume/analyser/model/resultsDto.java`

### Identity and security

- [Security controller](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/controller/securityController.java): Spring MVC API · `src/main/java/com/ai/Resume/analyser/controller/securityController.java`
- [Authentication service](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/service/securityService.java): application service · `src/main/java/com/ai/Resume/analyser/service/securityService.java`
- [Security configuration](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/configuration/securityConfiguration.java): Spring Security · `src/main/java/com/ai/Resume/analyser/configuration/securityConfiguration.java`
- [JWT filter and service](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/jwt/jwtFilter.java): token security · `src/main/java/com/ai/Resume/analyser/jwt/jwtFilter.java`
- [Verification mail service](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/mail/mailService.java): email workflow · Sends verification and reset OTP emails. · `src/main/java/com/ai/Resume/analyser/mail/mailService.java`

### Data and external services

- **MySQL**: relational datastore · Stores users, OTP state, and analysis history.
- [User repository](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/repository/usersTableRepo.java): JPA repository · `src/main/java/com/ai/Resume/analyser/repository/usersTableRepo.java`
- [Analysis history repository](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/repository/prevTable.java): JPA repository · `src/main/java/com/ai/Resume/analyser/repository/prevTable.java`
- [OTP repository](https://github.com/mohamed-imran-12/resume-analyser/blob/main/src/main/java/com/ai/Resume/analyser/repository/otpVerifyRepo.java): JPA repository · `src/main/java/com/ai/Resume/analyser/repository/otpVerifyRepo.java`
- **Gemini API**: AI provider
- **Adzuna API**: job search provider
- **Brevo**: email provider

## Connections

- Vite React SPA → App and client state: mounts
- App and client state → Resume upload: renders
- App and client state → Analysis results: renders
- Vite React SPA → Compiled SPA assets: builds into
- Spring Boot application → Compiled SPA assets: serves
- Resume upload → Application controller: uploads resume
- Analysis results → Application controller: requests results
- Application controller → Analysis and jobs service: delegates
- Analysis and jobs service → Gemini API: analyzes resume
- Analysis and jobs service → Adzuna API: searches jobs
- Analysis and jobs service → Analysis and job DTOs: returns
- Analysis and jobs service → Analysis history repository: stores history
- Security controller → Authentication service: delegates
- Security configuration → JWT filter and service: installs
- JWT filter and service → Security controller: protects
- Authentication service → JWT filter and service: issues and validates
- Authentication service → User repository: manages users
- Authentication service → OTP repository: persists OTPs
- Authentication service → Verification mail service: sends verification/reset
- Verification mail service → Brevo: delivers email
- User repository → MySQL: persists
- Analysis history repository → MySQL: persists
- OTP repository → MySQL: persists
