# placement-portal-team/placement-portal-server architecture

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

- Interactive diagram: https://gitdiagram.com/placement-portal-team/placement-portal-server
- Repository: https://github.com/placement-portal-team/placement-portal-server

## Overview

PlaceMentor is a REST backend for tracking job applications and preparing for interviews. The main workflow is an authenticated client managing applications and interview stages, uploading a resume, then requesting stage-specific or full AI preparation that combines application, resume, and event context. The API also exposes pipeline analytics, profile operations, and preparation history. Routes and models establish most wiring; README capabilities fill in unsampled areas, so links to those areas are limited to documented behavior.

Main entry points: [`src/routes/aiRoutes.js`](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/aiRoutes.js) (Preparation and history), [`services/geminiService.js`](https://github.com/placement-portal-team/placement-portal-server/blob/main/services/geminiService.js) (AI generation service), [`src/app.js`](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/app.js) (Express app), [`src/routes/resumeRoutes.js`](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/resumeRoutes.js) (Resume routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and access"]
  node_app["Express app<br/>[app.js]"]
  node_server["HTTP server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_authcontroller["Authentication<br/>[authController.js]"]
  node_authmiddleware["JWT protection<br/>[authMiddleware.js]"]
end

subgraph group_placement["Placement tracking"]
  node_applicationroutes["Application routes"]
  node_applicationcontroller["Applications and analytics"]
  node_resume["Resume processing"]
  node_resumeroutes["Resume routes<br/>[resumeRoutes.js]"]
  node_upload["PDF upload<br/>[resumeUpload.js]"]
end

subgraph group_preparation["Interview preparation"]
  node_airoutes["Preparation and history<br/>[aiRoutes.js]"]
  node_gemini["AI generation service<br/>[geminiService.js]"]
  node_roadmap["Roadmap prompt<br/>[roadmapAgent.js]"]
  node_oa["OA prompt<br/>[oaAgent.js]"]
  node_technical["Technical prompt<br/>[technicalAgent.js]"]
  node_hr["HR prompt<br/>[hrAgent.js]"]
end

subgraph group_persistence["Data persistence"]
  node_users[("User records<br/>[user.js]")]
  node_applications[("Application records<br/>[applications.js]")]
  node_resumemodel[("Resume records<br/>[resume.js]")]
  node_preparations[("Preparation cache<br/>[AIPreparation.js]")]
  node_dbconfig["Database connection<br/>[db.js]"]
end

node_client(("Placement user"))
node_mongo[("MongoDB Atlas")]
node_geminiservice{{"Gemini API"}}

node_client -->|"sends requests"| node_app
node_server -->|"serves"| node_app
node_app -->|"mounts"| node_authroutes
node_app -->|"mounts"| node_applicationroutes
node_app -->|"mounts"| node_resumeroutes
node_app -->|"mounts"| node_airoutes
node_authroutes -->|"dispatches"| node_authcontroller
node_applicationroutes -->|"protects"| node_authmiddleware
node_applicationroutes -->|"dispatches"| node_applicationcontroller
node_resumeroutes -->|"protects"| node_authmiddleware
node_resumeroutes -->|"parses upload"| node_upload
node_resumeroutes -->|"dispatches"| node_resume
node_airoutes -->|"protects"| node_authmiddleware
node_airoutes -->|"reads"| node_applications
node_airoutes -->|"reads"| node_resumemodel
node_airoutes -->|"reads and writes"| node_preparations
node_airoutes -->|"requests generation"| node_gemini
node_gemini -->|"builds prompts"| node_roadmap
node_gemini -->|"builds prompts"| node_oa
node_gemini -->|"builds prompts"| node_technical
node_gemini -->|"builds prompts"| node_hr
node_gemini -->|"generates content"| node_geminiservice
node_authcontroller -->|"reads and writes"| node_users
node_applicationcontroller -->|"reads and writes"| node_applications
node_resume -->|"reads and writes"| node_resumemodel
node_dbconfig -->|"connects"| node_mongo
node_users -->|"persists records"| node_mongo
node_applications -->|"persists records"| node_mongo
node_resumemodel -->|"persists records"| node_mongo
node_preparations -->|"persists cache"| node_mongo

click node_app "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/app.js"
click node_server "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/server.js"
click node_authroutes "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/authRoutes.js"
click node_authcontroller "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/controllers/authController.js"
click node_authmiddleware "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/middleware/authMiddleware.js"
click node_applicationroutes "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/applicationRoutes.js"
click node_applicationcontroller "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/controllers/applicationController.js"
click node_resume "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/controllers/resumeController.js"
click node_resumeroutes "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/resumeRoutes.js"
click node_upload "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/middleware/resumeUpload.js"
click node_airoutes "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/aiRoutes.js"
click node_gemini "https://github.com/placement-portal-team/placement-portal-server/blob/main/services/geminiService.js"
click node_roadmap "https://github.com/placement-portal-team/placement-portal-server/blob/main/prompts/roadmapAgent.js"
click node_oa "https://github.com/placement-portal-team/placement-portal-server/blob/main/prompts/oaAgent.js"
click node_technical "https://github.com/placement-portal-team/placement-portal-server/blob/main/prompts/technicalAgent.js"
click node_hr "https://github.com/placement-portal-team/placement-portal-server/blob/main/prompts/hrAgent.js"
click node_users "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/models/user.js"
click node_applications "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/models/applications.js"
click node_resumemodel "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/models/resume.js"
click node_preparations "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/models/AIPreparation.js"
click node_dbconfig "https://github.com/placement-portal-team/placement-portal-server/blob/main/src/config/db.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_server,node_authroutes,node_authcontroller,node_authmiddleware,node_client toneBlue
class node_applicationroutes,node_applicationcontroller,node_resume,node_resumeroutes,node_upload,node_mongo toneAmber
class node_airoutes,node_gemini,node_roadmap,node_oa,node_technical,node_hr,node_geminiservice toneMint
class node_users,node_applications,node_resumemodel,node_preparations,node_dbconfig toneRose
```

## Components

### API and access

- [Express app](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/app.js): `src/app.js`
- [HTTP server](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/server.js): `src/server.js`
- [Auth routes](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/authRoutes.js): `src/routes/authRoutes.js`
- [Authentication](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/controllers/authController.js): `src/controllers/authController.js`
- [JWT protection](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/middleware/authMiddleware.js): `src/middleware/authMiddleware.js`

### Placement tracking

- [Application routes](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/applicationRoutes.js): `src/routes/applicationRoutes.js`
- [Applications and analytics](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/controllers/applicationController.js): `src/controllers/applicationController.js`
- [Resume processing](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/controllers/resumeController.js): `src/controllers/resumeController.js`
- [Resume routes](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/resumeRoutes.js): `src/routes/resumeRoutes.js`
- [PDF upload](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/middleware/resumeUpload.js): `src/middleware/resumeUpload.js`

### Interview preparation

- [Preparation and history](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/routes/aiRoutes.js): `src/routes/aiRoutes.js`
- [AI generation service](https://github.com/placement-portal-team/placement-portal-server/blob/main/services/geminiService.js): `services/geminiService.js`
- [Roadmap prompt](https://github.com/placement-portal-team/placement-portal-server/blob/main/prompts/roadmapAgent.js): `prompts/roadmapAgent.js`
- [OA prompt](https://github.com/placement-portal-team/placement-portal-server/blob/main/prompts/oaAgent.js): `prompts/oaAgent.js`
- [Technical prompt](https://github.com/placement-portal-team/placement-portal-server/blob/main/prompts/technicalAgent.js): `prompts/technicalAgent.js`
- [HR prompt](https://github.com/placement-portal-team/placement-portal-server/blob/main/prompts/hrAgent.js): `prompts/hrAgent.js`

### Data persistence

- [User records](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/models/user.js): `src/models/user.js`
- [Application records](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/models/applications.js): `src/models/applications.js`
- [Resume records](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/models/resume.js): `src/models/resume.js`
- [Preparation cache](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/models/AIPreparation.js): `src/models/AIPreparation.js`
- [Database connection](https://github.com/placement-portal-team/placement-portal-server/blob/main/src/config/db.js): `src/config/db.js`

### Other components

- **Placement user**
- **MongoDB Atlas**
- **Gemini API**

## Connections

- Placement user → Express app: sends requests
- HTTP server → Express app: serves
- Express app → Auth routes: mounts
- Express app → Application routes: mounts
- Express app → Resume routes: mounts
- Express app → Preparation and history: mounts
- Auth routes → Authentication: dispatches
- Application routes → JWT protection: protects
- Application routes → Applications and analytics: dispatches
- Resume routes → JWT protection: protects
- Resume routes → PDF upload: parses upload
- Resume routes → Resume processing: dispatches
- Preparation and history → JWT protection: protects
- Preparation and history → Application records: reads
- Preparation and history → Resume records: reads
- Preparation and history → Preparation cache: reads and writes
- Preparation and history → AI generation service: requests generation
- AI generation service → Roadmap prompt: builds prompts
- AI generation service → OA prompt: builds prompts
- AI generation service → Technical prompt: builds prompts
- AI generation service → HR prompt: builds prompts
- AI generation service → Gemini API: generates content
- Authentication → User records: reads and writes
- Applications and analytics → Application records: reads and writes
- Resume processing → Resume records: reads and writes
- Database connection → MongoDB Atlas: connects
- User records → MongoDB Atlas: persists records
- Application records → MongoDB Atlas: persists records
- Resume records → MongoDB Atlas: persists records
- Preparation cache → MongoDB Atlas: persists cache
