# mahesh682462/ai-resume-analyzer architecture

> Architecture diagram of the GitHub repository mahesh682462/ai-resume-analyzer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mahesh682462/ai-resume-analyzer
- Repository: https://github.com/mahesh682462/ai-resume-analyzer

## Overview

AI Resume Analyzer is a web application for account-based PDF resume review. Users register or sign in, upload a resume, have its text extracted, request an AI analysis, and can view results and history. The backend routes requests through controllers, which coordinate PDF parsing, analysis, and persisted resume and analysis records. The tree and sampled source support these backend relationships; page-to-service wiring and some model internals were not sampled, so those links are omitted. The README is empty.

Main entry points: [`client/src/App.jsx`](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/App.jsx) (React app), [`server/server.js`](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/server.js) (API server), [`server/routes/resumeRoutes.js`](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/routes/resumeRoutes.js) (Resume routes), [`server/controllers/resumeController.js`](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/controllers/resumeController.js) (Resume controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["React app<br/>[App.jsx]"]
  node_authui["Auth pages<br/>[Login.jsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_uploadui["Upload page<br/>[Upload.jsx]"]
  node_results["Results page<br/>[Results.jsx]"]
  node_history["History page<br/>[History.jsx]"]
  node_authsvc["Auth service<br/>[authService.js]"]
  node_resumesvc["Resume service<br/>[resumeService.js]"]
  node_http["HTTP client<br/>[api.js]"]
end

subgraph group_api["API and access"]
  node_server["API server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_resumeroutes["Resume routes<br/>[resumeRoutes.js]"]
  node_analysisroutes["Analysis routes<br/>[analysisRoutes.js]"]
  node_authmw["JWT middleware<br/>[auth.js]"]
  node_authctrl["Auth controller<br/>[authController.js]"]
end

subgraph group_resume["Resume workflow"]
  node_resumectrl["Resume controller"]
  node_analysisctrl["Analysis controller"]
  node_uploadmw["File upload<br/>[upload.js]"]
  node_pdf["PDF text parser<br/>[pdfParser.js]"]
  node_analysis["Analysis service<br/>[analysisService.js]"]
end

subgraph group_data["Data and AI"]
  node_dbconfig["DB connection<br/>[db.js]"]
  node_users["User records<br/>[User.js]"]
  node_resumes["Resume records<br/>[Resume.js]"]
  node_analyses["Analysis records<br/>[Analysis.js]"]
end

node_user(("User"))
node_gemini["Gemini AI"]
node_mysql[("MySQL")]

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_authui
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_uploadui
node_app -->|"routes to"| node_results
node_app -->|"routes to"| node_history
node_authsvc -->|"sends requests"| node_http
node_resumesvc -->|"sends requests"| node_http
node_http -->|"calls API"| node_server
node_server -->|"dispatches"| node_authroutes
node_server -->|"dispatches"| node_resumeroutes
node_server -->|"dispatches"| node_analysisroutes
node_authroutes -->|"dispatches"| node_authctrl
node_authroutes -->|"protects profile"| node_authmw
node_resumeroutes -->|"protects routes"| node_authmw
node_resumeroutes -->|"accepts upload"| node_uploadmw
node_resumeroutes -->|"dispatches"| node_resumectrl
node_analysisroutes -->|"protects routes"| node_authmw
node_analysisroutes -->|"dispatches"| node_analysisctrl
node_authctrl -->|"reads and writes"| node_users
node_resumectrl -->|"reads and writes"| node_resumes
node_resumectrl -->|"deletes"| node_analyses
node_resumectrl -->|"extracts text"| node_pdf
node_analysisctrl -->|"checks and updates"| node_resumes
node_analysisctrl -->|"reads and writes"| node_analyses
node_analysisctrl -->|"requests analysis"| node_analysis
node_analysis -->|"generates analysis"| node_gemini
node_dbconfig -->|"connects"| node_mysql
node_users -->|"persists records"| node_mysql
node_resumes -->|"persists records"| node_mysql
node_analyses -->|"persists records"| node_mysql

click node_app "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/App.jsx"
click node_authui "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/Login.jsx"
click node_dashboard "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/Dashboard.jsx"
click node_uploadui "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/Upload.jsx"
click node_results "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/Results.jsx"
click node_history "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/History.jsx"
click node_authsvc "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/services/authService.js"
click node_resumesvc "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/services/resumeService.js"
click node_http "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/services/api.js"
click node_server "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/server.js"
click node_authroutes "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/routes/authRoutes.js"
click node_resumeroutes "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/routes/resumeRoutes.js"
click node_analysisroutes "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/routes/analysisRoutes.js"
click node_authmw "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/middleware/auth.js"
click node_authctrl "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/controllers/authController.js"
click node_resumectrl "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/controllers/resumeController.js"
click node_analysisctrl "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/controllers/analysisController.js"
click node_uploadmw "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/middleware/upload.js"
click node_pdf "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/services/pdfParser.js"
click node_analysis "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/services/analysisService.js"
click node_dbconfig "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/config/db.js"
click node_users "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/models/User.js"
click node_resumes "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/models/Resume.js"
click node_analyses "https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/models/Analysis.js"

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_app,node_authui,node_dashboard,node_uploadui,node_results,node_history,node_authsvc,node_resumesvc,node_http,node_user toneBlue
class node_server,node_authroutes,node_resumeroutes,node_analysisroutes,node_authmw,node_authctrl,node_mysql toneAmber
class node_resumectrl,node_analysisctrl,node_uploadmw,node_pdf,node_analysis toneMint
class node_dbconfig,node_users,node_resumes,node_analyses toneRose
class node_gemini toneIndigo
```

## Components

### Web client

- [React app](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Auth pages](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/Login.jsx): `client/src/pages/Login.jsx`
- [Dashboard](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/Dashboard.jsx): `client/src/pages/Dashboard.jsx`
- [Upload page](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/Upload.jsx): `client/src/pages/Upload.jsx`
- [Results page](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/Results.jsx): `client/src/pages/Results.jsx`
- [History page](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/pages/History.jsx): `client/src/pages/History.jsx`
- [Auth service](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/services/authService.js): `client/src/services/authService.js`
- [Resume service](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/services/resumeService.js): `client/src/services/resumeService.js`
- [HTTP client](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/client/src/services/api.js): `client/src/services/api.js`

### API and access

- [API server](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/server.js): `server/server.js`
- [Auth routes](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/routes/authRoutes.js): `server/routes/authRoutes.js`
- [Resume routes](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/routes/resumeRoutes.js): `server/routes/resumeRoutes.js`
- [Analysis routes](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/routes/analysisRoutes.js): `server/routes/analysisRoutes.js`
- [JWT middleware](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/middleware/auth.js): `server/middleware/auth.js`
- [Auth controller](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/controllers/authController.js): `server/controllers/authController.js`

### Resume workflow

- [Resume controller](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/controllers/resumeController.js): `server/controllers/resumeController.js`
- [Analysis controller](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/controllers/analysisController.js): `server/controllers/analysisController.js`
- [File upload](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/middleware/upload.js): `server/middleware/upload.js`
- [PDF text parser](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/services/pdfParser.js): `server/services/pdfParser.js`
- [Analysis service](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/services/analysisService.js): `server/services/analysisService.js`

### Data and AI

- [DB connection](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/config/db.js): `server/config/db.js`
- [User records](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/models/User.js): `server/models/User.js`
- [Resume records](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/models/Resume.js): `server/models/Resume.js`
- [Analysis records](https://github.com/mahesh682462/ai-resume-analyzer/blob/main/server/models/Analysis.js): `server/models/Analysis.js`

### Other components

- **User**
- **Gemini AI**
- **MySQL**

## Connections

- User → React app: uses
- React app → Auth pages: routes to
- React app → Dashboard: routes to
- React app → Upload page: routes to
- React app → Results page: routes to
- React app → History page: routes to
- Auth service → HTTP client: sends requests
- Resume service → HTTP client: sends requests
- HTTP client → API server: calls API
- API server → Auth routes: dispatches
- API server → Resume routes: dispatches
- API server → Analysis routes: dispatches
- Auth routes → Auth controller: dispatches
- Auth routes → JWT middleware: protects profile
- Resume routes → JWT middleware: protects routes
- Resume routes → File upload: accepts upload
- Resume routes → Resume controller: dispatches
- Analysis routes → JWT middleware: protects routes
- Analysis routes → Analysis controller: dispatches
- Auth controller → User records: reads and writes
- Resume controller → Resume records: reads and writes
- Resume controller → Analysis records: deletes
- Resume controller → PDF text parser: extracts text
- Analysis controller → Resume records: checks and updates
- Analysis controller → Analysis records: reads and writes
- Analysis controller → Analysis service: requests analysis
- Analysis service → Gemini AI: generates analysis
- DB connection → MySQL: connects
- User records → MySQL: persists records
- Resume records → MySQL: persists records
- Analysis records → MySQL: persists records
