# coderaryan1008/careerforge-ai architecture

> Architecture diagram of the GitHub repository coderaryan1008/careerforge-ai, 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/coderaryan1008/careerforge-ai
- Repository: https://github.com/coderaryan1008/careerforge-ai

## Overview

CareerForge-AI is a career-preparation web app. A user signs in, submits a resume or profile description plus a job description, and receives an AI-generated interview report with match scoring, questions, skill gaps, and a preparation plan; reports can be revisited and used to generate a tailored PDF resume. The graph follows the sampled auth and report-generation code. Interview route and frontend API implementations were not sampled, so their internal request wiring is not expanded.

Main entry points: [`Frontend/src/main.jsx`](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/main.jsx) (App router), [`Frontend/src/features/interview/hooks/useInterview.js`](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/hooks/useInterview.js) (Interview hook), [`Backend/src/controllers/Interview.controller.js`](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/controllers/Interview.controller.js) (Report controller), [`Backend/src/routes/auth.routes.js`](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/routes/auth.routes.js) (Auth routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_router["App router<br/>[main.jsx]"]
  node_authpages["Auth pages<br/>[Login.jsx]"]
  node_authhook["Auth hook<br/>[useAuth.js]"]
  node_authapi["Auth API client<br/>[auth.api.js]"]
  node_home["Interview workspace<br/>[Home.jsx]"]
  node_interviewhook["Interview hook<br/>[useInterview.js]"]
  node_interviewapi["Interview API client<br/>[interview.api.js]"]
  node_reportpage["Report view"]
  node_reportlist["Saved reports<br/>[GetReports.jsx]"]
end

subgraph group_backend["API and workflow"]
  node_app["Express app<br/>[app.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_authcontroller["Auth controller"]
  node_authmiddleware["Token middleware<br/>[auth.middleware.js]"]
  node_interviewroutes["Interview routes<br/>[interview.ai.js]"]
  node_interviewcontroller["Report controller"]
end

subgraph group_data["Persistent data"]
  node_userdb[("User records<br/>[user.model.js]")]
  node_reportdb[("Interview reports")]
  node_blacklistdb[("Token blacklist<br/>[blacklist.model.js]")]
end

subgraph group_ai["AI generation"]
  node_aiservice["AI and PDF service<br/>[ai.service.js]"]
end

node_user(("Career candidate"))
node_gemini{{"Gemini AI"}}
node_candidateinputs["Resume and job details"]
node_pdfparser["PDF text extraction"]
node_pdfengine{{"Chromium PDF renderer"}}

node_user -->|"uses"| node_router
node_router -->|"routes"| node_authpages
node_router -->|"routes"| node_home
node_router -->|"routes"| node_reportpage
node_router -->|"routes"| node_reportlist
node_authpages -->|"auth actions"| node_authhook
node_authhook -->|"calls"| node_authapi
node_app -->|"mounts"| node_authroutes
node_app -->|"mounts"| node_interviewroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_authroutes -->|"protects profile"| node_authmiddleware
node_authcontroller -->|"reads and writes"| node_userdb
node_authcontroller -->|"blacklists token"| node_blacklistdb
node_authmiddleware -->|"checks token"| node_blacklistdb
node_home -->|"submits inputs"| node_interviewhook
node_interviewhook -->|"calls"| node_interviewapi
node_interviewhook -->|"sets report"| node_reportpage
node_interviewhook -->|"loads reports"| node_reportlist
node_interviewcontroller -->|"extracts resume text"| node_pdfparser
node_interviewcontroller -->|"requests report or resume"| node_aiservice
node_aiservice -->|"generates content"| node_gemini
node_interviewcontroller -->|"stores and reads reports"| node_reportdb
node_aiservice -->|"renders resume PDF"| node_pdfengine

click node_router "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/main.jsx"
click node_authpages "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/auth/pages/Login.jsx"
click node_authhook "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/auth/hooks/useAuth.js"
click node_authapi "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/auth/services/auth.api.js"
click node_home "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/pages/Home.jsx"
click node_interviewhook "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/hooks/useInterview.js"
click node_interviewapi "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/services/interview.api.js"
click node_reportpage "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/pages/InterviewReport.jsx"
click node_reportlist "https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/pages/GetReports.jsx"
click node_app "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/app.js"
click node_authroutes "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/routes/auth.routes.js"
click node_authcontroller "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/controllers/auth.controllers.js"
click node_authmiddleware "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/middlewares/auth.middleware.js"
click node_interviewroutes "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/routes/interview.ai.js"
click node_interviewcontroller "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/controllers/Interview.controller.js"
click node_userdb "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/models/user.model.js"
click node_reportdb "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/models/interviewReport.model.js"
click node_blacklistdb "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/models/blacklist.model.js"
click node_aiservice "https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/routes/services/ai.service.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_router,node_authpages,node_authhook,node_authapi,node_home,node_interviewhook,node_interviewapi,node_reportpage,node_reportlist toneBlue
class node_app,node_authroutes,node_authcontroller,node_authmiddleware,node_interviewroutes,node_interviewcontroller toneAmber
class node_userdb,node_reportdb,node_blacklistdb toneMint
class node_aiservice toneRose
class node_user,node_gemini,node_candidateinputs,node_pdfparser,node_pdfengine toneIndigo
```

## Components

### Web application

- [App router](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/main.jsx): `Frontend/src/main.jsx`
- [Auth pages](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/auth/pages/Login.jsx): `Frontend/src/features/auth/pages/Login.jsx`
- [Auth hook](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/auth/hooks/useAuth.js): `Frontend/src/features/auth/hooks/useAuth.js`
- [Auth API client](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/auth/services/auth.api.js): `Frontend/src/features/auth/services/auth.api.js`
- [Interview workspace](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/pages/Home.jsx): `Frontend/src/features/interview/pages/Home.jsx`
- [Interview hook](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/hooks/useInterview.js): `Frontend/src/features/interview/hooks/useInterview.js`
- [Interview API client](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/services/interview.api.js): `Frontend/src/features/interview/services/interview.api.js`
- [Report view](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/pages/InterviewReport.jsx): `Frontend/src/features/interview/pages/InterviewReport.jsx`
- [Saved reports](https://github.com/coderaryan1008/careerforge-ai/blob/main/Frontend/src/features/interview/pages/GetReports.jsx): `Frontend/src/features/interview/pages/GetReports.jsx`

### API and workflow

- [Express app](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/app.js): `Backend/src/app.js`
- [Auth routes](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/routes/auth.routes.js): `Backend/src/routes/auth.routes.js`
- [Auth controller](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/controllers/auth.controllers.js): `Backend/src/controllers/auth.controllers.js`
- [Token middleware](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/middlewares/auth.middleware.js): `Backend/src/middlewares/auth.middleware.js`
- [Interview routes](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/routes/interview.ai.js): `Backend/src/routes/interview.ai.js`
- [Report controller](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/controllers/Interview.controller.js): `Backend/src/controllers/Interview.controller.js`

### Persistent data

- [User records](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/models/user.model.js): `Backend/src/models/user.model.js`
- [Interview reports](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/models/interviewReport.model.js): `Backend/src/models/interviewReport.model.js`
- [Token blacklist](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/models/blacklist.model.js): `Backend/src/models/blacklist.model.js`

### AI generation

- [AI and PDF service](https://github.com/coderaryan1008/careerforge-ai/blob/main/Backend/src/routes/services/ai.service.js): `Backend/src/routes/services/ai.service.js`

### Other components

- **Career candidate**
- **Gemini AI**
- **Resume and job details**
- **PDF text extraction**
- **Chromium PDF renderer**

## Connections

- Career candidate → App router: uses
- App router → Auth pages: routes
- App router → Interview workspace: routes
- App router → Report view: routes
- App router → Saved reports: routes
- Auth pages → Auth hook: auth actions
- Auth hook → Auth API client: calls
- Express app → Auth routes: mounts
- Express app → Interview routes: mounts
- Auth routes → Auth controller: dispatches
- Auth routes → Token middleware: protects profile
- Auth controller → User records: reads and writes
- Auth controller → Token blacklist: blacklists token
- Token middleware → Token blacklist: checks token
- Interview workspace → Interview hook: submits inputs
- Interview hook → Interview API client: calls
- Interview hook → Report view: sets report
- Interview hook → Saved reports: loads reports
- Report controller → PDF text extraction: extracts resume text
- Report controller → AI and PDF service: requests report or resume
- AI and PDF service → Gemini AI: generates content
- Report controller → Interview reports: stores and reads reports
- AI and PDF service → Chromium PDF renderer: renders resume PDF
