# manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal architecture

> Architecture diagram of the GitHub repository manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal
- Repository: https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal

## Overview

JobCortex connects candidates and recruiters through a React client, an Express/MongoDB API, and a separate resume-analysis service. Candidates discover jobs, apply, manage profiles, and submit resumes for cached ATS and job-description analysis with PDF export; recruiters manage companies, jobs, applications, and AI-assisted shortlists. The README documents the service boundaries and analysis workflow; source excerpts confirm key API, persistence, and analysis calls. Many page-to-API calls and analysis internals are unsampled, so those details are not expanded.

Main entry points: [`resume-analysis-service/backend/api/routes.py`](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/api/routes.py) (Analysis endpoints), [`server/server.js`](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/server.js) (Express API runtime), [`server/models`](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/tree/main/server/models) (MongoDB records), [`server/controllers/candidateController.js`](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/controllers/candidateController.js) (Candidate API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_client_app["React application<br/>[App.jsx]"]
  node_candidate_features["Candidate workflows"]
  node_resume_ui["Resume analysis UI<br/>[ResumeAnalysis.jsx]"]
  node_recruiter_features["Recruiter workflows"]
  node_recruiter_apps_ui["Applicant review"]
  node_recruiter_dashboard["Recruiter dashboard"]
end

subgraph group_api["Core API"]
  node_api_runtime["Express API runtime<br/>[server.js]"]
  node_auth["Authentication<br/>[authController.js]"]
  node_auth_guard["Session guard<br/>[authMiddleware.js]"]
  node_candidate_api["Candidate API"]
  node_recruiter_api["Recruiter applications"]
  node_resume_client["Analysis adapter"]
  node_consistency["Application consistency<br/>[consistencyJob.js]"]
end

subgraph group_data["Persistent data"]
  node_mongo[("MongoDB records")]
end

subgraph group_analysis["Resume analysis"]
  node_analysis_routes["Analysis endpoints<br/>[routes.py]"]
  node_resume_parser["Resume parsing<br/>[resume_parser.py]"]
  node_resume_analyzer["Resume scoring<br/>[resume_analyzer.py]"]
  node_feedback["Analysis feedback<br/>[feedback_engine.py]"]
  node_recommendations["Recommendations"]
  node_pdf["PDF reporting<br/>[pdf_export.py]"]
end

subgraph group_integrations["External services"]
  node_cloudinary["Cloudinary storage"]
  node_groq["Groq LLM"]
  node_email["SMTP email"]
end

node_candidate(("Candidate"))
node_recruiter(("Recruiter"))

node_candidate -->|"uses"| node_client_app
node_recruiter -->|"uses"| node_client_app
node_client_app -->|"routes to"| node_candidate_features
node_client_app -->|"routes to"| node_recruiter_features
node_candidate_features -->|"includes"| node_resume_ui
node_recruiter_features -->|"includes"| node_recruiter_apps_ui
node_recruiter_features -->|"includes"| node_recruiter_dashboard
node_client_app -->|"calls"| node_api_runtime
node_api_runtime -->|"routes requests"| node_auth
node_api_runtime -->|"routes requests"| node_candidate_api
node_api_runtime -->|"routes requests"| node_recruiter_api
node_candidate_api -->|"reads and writes"| node_mongo
node_recruiter_api -->|"reads and writes"| node_mongo
node_api_runtime -->|"connects"| node_mongo
node_auth_guard -->|"loads user"| node_mongo
node_candidate_api -->|"requests analysis"| node_resume_client
node_candidate_api -->|"requests PDF"| node_resume_client
node_resume_client -->|"calls service"| node_analysis_routes
node_analysis_routes -->|"parses resume"| node_resume_parser
node_analysis_routes -->|"analyzes resume"| node_resume_analyzer
node_analysis_routes -->|"generates PDF"| node_pdf
node_analysis_routes -.->|"uses feedback"| node_feedback
node_analysis_routes -.->|"uses suggestions"| node_recommendations
node_analysis_routes -.->|"uses LLM"| node_groq
node_candidate_api -->|"downloads resume"| node_cloudinary
node_recruiter_api -->|"schedules status email"| node_email
node_recruiter_api -->|"stores shortlist"| node_mongo
node_api_runtime -->|"starts job"| node_consistency
node_consistency -->|"checks records"| node_mongo

click node_client_app "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/client/src/App.jsx"
click node_candidate_features "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/tree/main/client/src/pages/candidate"
click node_resume_ui "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/client/src/pages/candidate/ResumeAnalysis.jsx"
click node_recruiter_features "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/tree/main/client/src/pages/recruiter"
click node_recruiter_apps_ui "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/client/src/pages/recruiter/RecruiterApplications.jsx"
click node_recruiter_dashboard "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/client/src/pages/recruiter/UnifiedRecruiterDashboard.jsx"
click node_api_runtime "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/server.js"
click node_auth "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/controllers/authController.js"
click node_auth_guard "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/middlewares/authMiddleware.js"
click node_candidate_api "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/controllers/candidateController.js"
click node_recruiter_api "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/controllers/recruiterApplicationController.js"
click node_resume_client "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/services/resumeAnalysisClient.js"
click node_mongo "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/tree/main/server/models"
click node_consistency "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/services/consistencyJob.js"
click node_analysis_routes "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/api/routes.py"
click node_resume_parser "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/resume_parser.py"
click node_resume_analyzer "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/resume_analyzer.py"
click node_feedback "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/feedback_engine.py"
click node_recommendations "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/recommendation_engine.py"
click node_pdf "https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/pdf_export.py"

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_client_app,node_candidate_features,node_resume_ui,node_recruiter_features,node_recruiter_apps_ui,node_recruiter_dashboard toneBlue
class node_api_runtime,node_auth,node_auth_guard,node_candidate_api,node_recruiter_api,node_resume_client,node_consistency toneAmber
class node_mongo toneMint
class node_analysis_routes,node_resume_parser,node_resume_analyzer,node_feedback,node_recommendations,node_pdf toneRose
class node_cloudinary,node_groq,node_email,node_candidate,node_recruiter toneIndigo
```

## Components

### Web client

- [React application](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Candidate workflows](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/tree/main/client/src/pages/candidate): `client/src/pages/candidate`
- [Resume analysis UI](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/client/src/pages/candidate/ResumeAnalysis.jsx): `client/src/pages/candidate/ResumeAnalysis.jsx`
- [Recruiter workflows](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/tree/main/client/src/pages/recruiter): `client/src/pages/recruiter`
- [Applicant review](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/client/src/pages/recruiter/RecruiterApplications.jsx): `client/src/pages/recruiter/RecruiterApplications.jsx`
- [Recruiter dashboard](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/client/src/pages/recruiter/UnifiedRecruiterDashboard.jsx): `client/src/pages/recruiter/UnifiedRecruiterDashboard.jsx`

### Core API

- [Express API runtime](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/server.js): `server/server.js`
- [Authentication](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/controllers/authController.js): `server/controllers/authController.js`
- [Session guard](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/middlewares/authMiddleware.js): `server/middlewares/authMiddleware.js`
- [Candidate API](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/controllers/candidateController.js): `server/controllers/candidateController.js`
- [Recruiter applications](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/controllers/recruiterApplicationController.js): `server/controllers/recruiterApplicationController.js`
- [Analysis adapter](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/services/resumeAnalysisClient.js): `server/services/resumeAnalysisClient.js`
- [Application consistency](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/server/services/consistencyJob.js): `server/services/consistencyJob.js`

### Persistent data

- [MongoDB records](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/tree/main/server/models): `server/models`

### Resume analysis

- [Analysis endpoints](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/api/routes.py): `resume-analysis-service/backend/api/routes.py`
- [Resume parsing](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/resume_parser.py): `resume-analysis-service/backend/services/resume_parser.py`
- [Resume scoring](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/resume_analyzer.py): `resume-analysis-service/backend/services/resume_analyzer.py`
- [Analysis feedback](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/feedback_engine.py): `resume-analysis-service/backend/services/feedback_engine.py`
- [Recommendations](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/recommendation_engine.py): `resume-analysis-service/backend/services/recommendation_engine.py`
- [PDF reporting](https://github.com/manthan-parekh7/jobcortex-ai-powered-full-stack-job-portal/blob/main/resume-analysis-service/backend/services/pdf_export.py): `resume-analysis-service/backend/services/pdf_export.py`

### External services

- **Cloudinary storage**
- **Groq LLM**
- **SMTP email**

### Other components

- **Candidate**
- **Recruiter**

## Connections

- Candidate → React application: uses (evidence: `README.md`)
- Recruiter → React application: uses (evidence: `README.md`)
- React application → Candidate workflows: routes to (evidence: `client/src/App.jsx`)
- React application → Recruiter workflows: routes to (evidence: `client/src/App.jsx`)
- Candidate workflows → Resume analysis UI: includes (evidence: `client/src/App.jsx`)
- Recruiter workflows → Applicant review: includes (evidence: `client/src/App.jsx`)
- Recruiter workflows → Recruiter dashboard: includes (evidence: `client/src/App.jsx`)
- React application → Express API runtime: calls (evidence: `README.md`)
- Express API runtime → Authentication: routes requests (evidence: `server/server.js`)
- Express API runtime → Candidate API: routes requests (evidence: `server/server.js`)
- Express API runtime → Recruiter applications: routes requests (evidence: `server/server.js`)
- Candidate API → MongoDB records: reads and writes (evidence: `server/controllers/candidateController.js`)
- Recruiter applications → MongoDB records: reads and writes (evidence: `server/controllers/recruiterApplicationController.js`)
- Express API runtime → MongoDB records: connects (evidence: `server/server.js`)
- Session guard → MongoDB records: loads user (evidence: `server/middlewares/authMiddleware.js`)
- Candidate API → Analysis adapter: requests analysis (evidence: `server/controllers/candidateController.js`)
- Candidate API → Analysis adapter: requests PDF (evidence: `server/controllers/candidateController.js`)
- Analysis adapter → Analysis endpoints: calls service (evidence: `README.md`)
- Analysis endpoints → Resume parsing: parses resume (evidence: `resume-analysis-service/backend/api/routes.py`)
- Analysis endpoints → Resume scoring: analyzes resume (evidence: `resume-analysis-service/backend/api/routes.py`)
- Analysis endpoints → PDF reporting: generates PDF (evidence: `resume-analysis-service/backend/api/routes.py`)
- Analysis endpoints → Analysis feedback: uses feedback
- Analysis endpoints → Recommendations: uses suggestions
- Analysis endpoints → Groq LLM: uses LLM
- Candidate API → Cloudinary storage: downloads resume (evidence: `README.md`)
- Recruiter applications → SMTP email: schedules status email (evidence: `server/controllers/recruiterApplicationController.js`)
- Recruiter applications → MongoDB records: stores shortlist (evidence: `server/controllers/recruiterApplicationController.js`)
- Express API runtime → Application consistency: starts job (evidence: `server/server.js`)
- Application consistency → MongoDB records: checks records (evidence: `server/services/consistencyJob.js`)
