# rakib304832/jobserch-portel-serve-site architecture

> Architecture diagram of the GitHub repository rakib304832/jobserch-portel-serve-site, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rakib304832/jobserch-portel-serve-site
- Repository: https://github.com/rakib304832/jobserch-portel-serve-site

## Overview

HireLoop is an Express REST API for a job portal. The implemented user-facing workflow covers account registration or sign-in, cookie-based session checks, profile lookup, and browsing or viewing public jobs; administrators can query a protected user directory. MongoDB is the shared persistence layer. The README also describes applications, company profiles, saved jobs, subscriptions, and notifications, but the sampled runtime code does not show their handlers, so they are represented only as documented database capabilities. Some wiring is supported by the source index rather than excerpts.

Main entry points: [`src/controllers/auth.controller.js`](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/controllers/auth.controller.js) (Account Handlers), [`src/db/mongo.js`](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/db/mongo.js) (Mongo Collections), [`src/app.js`](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/app.js) (Express App), [`src/routes/index.js`](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/index.js) (Route Mounts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["HTTP Runtime"]
  node_server["HTTP Lifecycle<br/>[server.js]"]
  node_app["Express App<br/>[app.js]"]
  node_routes["Route Mounts<br/>[index.js]"]
  node_errors["Error Handling<br/>[errorHandler.js]"]
  node_env["Validated Config<br/>[env.js]"]
end

subgraph group_identity["Identity &amp; Access"]
  node_authroutes["Auth Routes<br/>[auth.routes.js]"]
  node_authctl["Account Handlers<br/>[auth.controller.js]"]
  node_authguard["Session &amp; Roles<br/>[auth.js]"]
  node_ratelimit["Auth Rate Limit<br/>[rateLimit.js]"]
  node_tokens["JWT Cookies<br/>[token.js]"]
  node_validation["Auth Validation<br/>[auth.schema.js]"]
end

subgraph group_portal["Portal API"]
  node_userctl["User Handlers<br/>[user.controller.js]"]
  node_userroutes["User Routes<br/>[user.routes.js]"]
  node_jobroutes["Job Routes<br/>[job.routes.js]"]
  node_jobctl["Job Search &amp; Detail<br/>[job.controller.js]"]
  node_publicuser["Safe User View<br/>[publicUser.js]"]
end

subgraph group_persistence["Persistence"]
  node_mongo[("Mongo Collections<br/>[mongo.js]")]
  node_seed["Job Seed Data<br/>[seedJobs.js]"]
  node_jobdata["Starter Jobs<br/>[jobs.json]"]
end

node_client(("Next.js Client"))
node_google["Google Identity"]

node_client -->|"calls API"| node_app
node_server -->|"reads config"| node_env
node_server -->|"connects and closes"| node_mongo
node_server -->|"starts listener"| node_app
node_app -->|"configures CORS"| node_env
node_app -->|"mounts routes"| node_routes
node_app -->|"registers handlers"| node_errors
node_routes -->|"mounts"| node_authroutes
node_routes -->|"mounts"| node_userroutes
node_routes -->|"mounts"| node_jobroutes
node_authroutes -->|"limits attempts"| node_ratelimit
node_authroutes -->|"dispatches"| node_authctl
node_authctl -->|"validates input"| node_validation
node_authctl -->|"reads and writes users"| node_mongo
node_authctl -->|"issues or clears"| node_tokens
node_authctl -->|"formats response"| node_publicuser
node_authctl -->|"verifies ID token"| node_google
node_authctl -->|"throws HTTP errors"| node_errors
node_userroutes -->|"guards requests"| node_authguard
node_userroutes -->|"dispatches"| node_userctl
node_authguard -->|"verifies cookie"| node_tokens
node_authguard -->|"loads current user"| node_mongo
node_userctl -->|"queries users"| node_mongo
node_userctl -->|"filters response"| node_publicuser
node_jobroutes -->|"dispatches"| node_jobctl
node_jobctl -->|"queries jobs"| node_mongo
node_jobctl -->|"throws HTTP errors"| node_errors
node_seed -->|"loads records"| node_jobdata
node_seed -->|"writes jobs"| node_mongo

click node_server "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/server.js"
click node_app "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/app.js"
click node_routes "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/index.js"
click node_errors "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/middlewares/errorHandler.js"
click node_env "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/config/env.js"
click node_authroutes "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/auth.routes.js"
click node_authctl "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/controllers/auth.controller.js"
click node_authguard "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/middlewares/auth.js"
click node_ratelimit "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/middlewares/rateLimit.js"
click node_tokens "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/utils/token.js"
click node_validation "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/validators/auth.schema.js"
click node_userctl "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/controllers/user.controller.js"
click node_userroutes "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/user.routes.js"
click node_jobroutes "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/job.routes.js"
click node_jobctl "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/controllers/job.controller.js"
click node_publicuser "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/utils/publicUser.js"
click node_mongo "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/db/mongo.js"
click node_seed "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/scripts/seedJobs.js"
click node_jobdata "https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/data/jobs.json"

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_server,node_app,node_routes,node_errors,node_env,node_client toneBlue
class node_authroutes,node_authctl,node_authguard,node_ratelimit,node_tokens,node_validation toneAmber
class node_userctl,node_userroutes,node_jobroutes,node_jobctl,node_publicuser toneMint
class node_mongo,node_seed,node_jobdata toneRose
class node_google toneIndigo
```

## Components

### HTTP Runtime

- [HTTP Lifecycle](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/server.js): `src/server.js`
- [Express App](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/app.js): `src/app.js`
- [Route Mounts](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/index.js): `src/routes/index.js`
- [Error Handling](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/middlewares/errorHandler.js): `src/middlewares/errorHandler.js`
- [Validated Config](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/config/env.js): `src/config/env.js`

### Identity & Access

- [Auth Routes](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/auth.routes.js): `src/routes/auth.routes.js`
- [Account Handlers](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/controllers/auth.controller.js): `src/controllers/auth.controller.js`
- [Session & Roles](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/middlewares/auth.js): `src/middlewares/auth.js`
- [Auth Rate Limit](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/middlewares/rateLimit.js): `src/middlewares/rateLimit.js`
- [JWT Cookies](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/utils/token.js): `src/utils/token.js`
- [Auth Validation](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/validators/auth.schema.js): `src/validators/auth.schema.js`

### Portal API

- [User Handlers](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/controllers/user.controller.js): `src/controllers/user.controller.js`
- [User Routes](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/user.routes.js): `src/routes/user.routes.js`
- [Job Routes](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/routes/job.routes.js): `src/routes/job.routes.js`
- [Job Search & Detail](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/controllers/job.controller.js): `src/controllers/job.controller.js`
- [Safe User View](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/utils/publicUser.js): `src/utils/publicUser.js`

### Persistence

- [Mongo Collections](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/db/mongo.js): `src/db/mongo.js`
- [Job Seed Data](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/scripts/seedJobs.js): `src/scripts/seedJobs.js`
- [Starter Jobs](https://github.com/rakib304832/jobserch-portel-serve-site/blob/main/src/data/jobs.json): `src/data/jobs.json`

### Other components

- **Next.js Client**
- **Google Identity**

## Connections

- Next.js Client → Express App: calls API (evidence: `README.md`)
- HTTP Lifecycle → Validated Config: reads config (evidence: `src/server.js`)
- HTTP Lifecycle → Mongo Collections: connects and closes (evidence: `src/server.js`)
- HTTP Lifecycle → Express App: starts listener (evidence: `src/server.js`)
- Express App → Validated Config: configures CORS (evidence: `src/app.js`)
- Express App → Route Mounts: mounts routes (evidence: `src/app.js`)
- Express App → Error Handling: registers handlers (evidence: `src/app.js`)
- Route Mounts → Auth Routes: mounts (evidence: `src/routes/index.js`)
- Route Mounts → User Routes: mounts (evidence: `src/routes/index.js`)
- Route Mounts → Job Routes: mounts (evidence: `src/routes/index.js`)
- Auth Routes → Auth Rate Limit: limits attempts (evidence: `src/routes/auth.routes.js`)
- Auth Routes → Account Handlers: dispatches (evidence: `src/routes/auth.routes.js`)
- Account Handlers → Auth Validation: validates input (evidence: `src/controllers/auth.controller.js`)
- Account Handlers → Mongo Collections: reads and writes users (evidence: `src/controllers/auth.controller.js`)
- Account Handlers → JWT Cookies: issues or clears (evidence: `src/controllers/auth.controller.js`)
- Account Handlers → Safe User View: formats response (evidence: `src/controllers/auth.controller.js`)
- Account Handlers → Google Identity: verifies ID token (evidence: `src/controllers/auth.controller.js`)
- Account Handlers → Error Handling: throws HTTP errors (evidence: `src/controllers/auth.controller.js`)
- User Routes → Session & Roles: guards requests (evidence: `src/routes/user.routes.js`)
- User Routes → User Handlers: dispatches (evidence: `src/routes/user.routes.js`)
- Session & Roles → JWT Cookies: verifies cookie (evidence: `src/middlewares/auth.js`)
- Session & Roles → Mongo Collections: loads current user (evidence: `src/middlewares/auth.js`)
- User Handlers → Mongo Collections: queries users (evidence: `src/controllers/user.controller.js`)
- User Handlers → Safe User View: filters response (evidence: `src/controllers/user.controller.js`)
- Job Routes → Job Search & Detail: dispatches (evidence: `src/routes/job.routes.js`)
- Job Search & Detail → Mongo Collections: queries jobs (evidence: `src/controllers/job.controller.js`)
- Job Search & Detail → Error Handling: throws HTTP errors (evidence: `src/controllers/job.controller.js`)
- Job Seed Data → Starter Jobs: loads records (evidence: `src/scripts/seedJobs.js`)
- Job Seed Data → Mongo Collections: writes jobs (evidence: `src/scripts/seedJobs.js`)
