# abhi-0605/skillbridge_ai architecture

> Architecture diagram of the GitHub repository abhi-0605/skillbridge_ai, 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/abhi-0605/skillbridge_ai
- Repository: https://github.com/abhi-0605/skillbridge_ai

## Overview

SkillBridge AI lets job seekers submit a resume and job description, then view an ATS compatibility analysis and recommendations. The client extracts resume text in-browser; the backend stores it and runs keyword extraction, skill matching, ATS scoring, and report generation. The graph also includes authentication, dashboards/history, and the provider abstraction. Edges reflect shown calls or README-documented behavior; provider selection and some client-to-API links rely on README statements because their implementation excerpts were not supplied.

Main entry points: [`server/src/controllers/analysisController.js`](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/analysisController.js) (Analysis orchestration), [`client/src/App.jsx`](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/App.jsx) (App routing), [`server/src/app.js`](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/app.js) (Express application), [`client/src/features/analysis/analysisApi.js`](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/features/analysis/analysisApi.js) (Analysis API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client experience"]
  node_app["App routing<br/>[App.jsx]"]
  node_upload["Resume and JD upload<br/>[UploadPage.jsx]"]
  node_resumeparse["Resume text extraction"]
  node_analysisapi["Analysis API client<br/>[analysisApi.js]"]
  node_dashboard["Dashboard and history<br/>[DashboardPage.jsx]"]
  node_detail["Analysis detail"]
end

subgraph group_auth["Identity"]
  node_authui["Login and registration<br/>[LoginPage.jsx]"]
  node_oauthui["OAuth completion"]
  node_authstate["Client auth state<br/>[AuthContext.jsx]"]
  node_authclient["Auth API client<br/>[authApi.js]"]
end

subgraph group_api["API workflows"]
  node_serverapp["Express application<br/>[app.js]"]
  node_authroutes["Auth routes<br/>[authRoutes.js]"]
  node_resumeroutes["Resume routes<br/>[resumeRoutes.js]"]
  node_jdroutes["Job description routes<br/>[jdRoutes.js]"]
  node_analysisroutes["Analysis routes<br/>[analysisRoutes.js]"]
  node_authcontroller["Authentication handlers<br/>[authController.js]"]
  node_resumecontroller["Resume handlers"]
  node_jdcontroller["Job description handlers<br/>[jdController.js]"]
end

subgraph group_analysis["Analysis pipeline"]
  node_analysiscontroller["Analysis orchestration"]
  node_keywords["Keyword extraction"]
  node_skills["Skill matching<br/>[skillMatcher.js]"]
  node_ats["ATS scoring<br/>[atsScorer.js]"]
  node_reportgen["Report generation<br/>[reportGenerator.js]"]
end

subgraph group_data["Persistence and AI"]
  node_ai["AI provider interface<br/>[aiProvider.js]"]
  node_resume[("Resume records<br/>[Resume.js]")]
  node_jd[("Job description records<br/>[JobDescription.js]")]
  node_analysisstore[("Analysis records<br/>[Analysis.js]")]
  node_reportstore[("Report records<br/>[Report.js]")]
  node_users[("User records<br/>[User.js]")]
end

node_jobseeker(("Job seeker"))
node_mongo[("MongoDB")]
node_provider{{"Configured AI model"}}

node_jobseeker -->|"uses"| node_app
node_app -->|"routes to"| node_upload
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_detail
node_app -->|"routes to"| node_authui
node_app -->|"routes to"| node_oauthui
node_upload -->|"extracts text"| node_resumeparse
node_upload -->|"submits analysis"| node_analysisapi
node_dashboard -->|"fetches history"| node_analysisapi
node_detail -->|"fetches result"| node_analysisapi
node_authui -->|"calls"| node_authclient
node_oauthui -->|"updates session"| node_authstate
node_authstate -->|"loads current user"| node_authclient
node_authclient -->|"sends API requests"| node_serverapp
node_analysisapi -->|"sends API requests"| node_serverapp
node_serverapp -->|"mounts"| node_authroutes
node_serverapp -->|"mounts"| node_resumeroutes
node_serverapp -->|"mounts"| node_jdroutes
node_serverapp -->|"mounts"| node_analysisroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_resumeroutes -->|"dispatches"| node_resumecontroller
node_jdroutes -->|"dispatches"| node_jdcontroller
node_analysisroutes -->|"dispatches"| node_analysiscontroller
node_analysiscontroller -->|"reads"| node_resume
node_analysiscontroller -->|"reads"| node_jd
node_analysiscontroller -->|"creates and updates"| node_analysisstore
node_analysiscontroller -->|"extracts keywords"| node_keywords
node_analysiscontroller -->|"matches skills"| node_skills
node_analysiscontroller -->|"calculates score"| node_ats
node_analysiscontroller -->|"generates report"| node_reportgen
node_analysiscontroller -->|"creates and reads"| node_reportstore
node_keywords -->|"requests generation"| node_ai
node_ai -.->|"selects provider"| node_provider
node_authcontroller -->|"reads and creates"| node_users
node_resumecontroller -->|"reads and creates"| node_resume
node_jdcontroller -->|"reads and creates"| node_jd
node_resume -.->|"persists"| node_mongo
node_jd -.->|"persists"| node_mongo
node_analysisstore -.->|"persists"| node_mongo
node_reportstore -.->|"persists"| node_mongo
node_users -.->|"persists"| node_mongo

click node_app "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/App.jsx"
click node_upload "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/UploadPage.jsx"
click node_resumeparse "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/lib/extractResumeText.js"
click node_analysisapi "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/features/analysis/analysisApi.js"
click node_dashboard "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/DashboardPage.jsx"
click node_detail "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/AnalysisDetailPage.jsx"
click node_authui "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/LoginPage.jsx"
click node_oauthui "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/OAuthSuccessPage.jsx"
click node_authstate "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/store/AuthContext.jsx"
click node_authclient "https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/features/auth/authApi.js"
click node_serverapp "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/app.js"
click node_authroutes "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/routes/authRoutes.js"
click node_resumeroutes "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/routes/resumeRoutes.js"
click node_jdroutes "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/routes/jdRoutes.js"
click node_analysisroutes "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/routes/analysisRoutes.js"
click node_authcontroller "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/authController.js"
click node_resumecontroller "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/resumeController.js"
click node_jdcontroller "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/jdController.js"
click node_analysiscontroller "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/analysisController.js"
click node_keywords "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/agents/keywordExtractor.js"
click node_skills "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/agents/skillMatcher.js"
click node_ats "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/agents/atsScorer.js"
click node_reportgen "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/agents/reportGenerator.js"
click node_ai "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/ai/aiProvider.js"
click node_resume "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/Resume.js"
click node_jd "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/JobDescription.js"
click node_analysisstore "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/Analysis.js"
click node_reportstore "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/Report.js"
click node_users "https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/User.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_upload,node_resumeparse,node_analysisapi,node_dashboard,node_detail toneBlue
class node_authui,node_oauthui,node_authstate,node_authclient,node_mongo toneAmber
class node_serverapp,node_authroutes,node_resumeroutes,node_jdroutes,node_analysisroutes,node_authcontroller,node_resumecontroller,node_jdcontroller toneMint
class node_analysiscontroller,node_keywords,node_skills,node_ats,node_reportgen toneRose
class node_ai,node_resume,node_jd,node_analysisstore,node_reportstore,node_users,node_jobseeker,node_provider toneIndigo
```

## Components

### Client experience

- [App routing](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Resume and JD upload](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/UploadPage.jsx): `client/src/pages/UploadPage.jsx`
- [Resume text extraction](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/lib/extractResumeText.js): `client/src/lib/extractResumeText.js`
- [Analysis API client](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/features/analysis/analysisApi.js): `client/src/features/analysis/analysisApi.js`
- [Dashboard and history](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/DashboardPage.jsx): `client/src/pages/DashboardPage.jsx`
- [Analysis detail](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/AnalysisDetailPage.jsx): `client/src/pages/AnalysisDetailPage.jsx`

### Identity

- [Login and registration](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/LoginPage.jsx): `client/src/pages/LoginPage.jsx`
- [OAuth completion](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/pages/OAuthSuccessPage.jsx): `client/src/pages/OAuthSuccessPage.jsx`
- [Client auth state](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/store/AuthContext.jsx): `client/src/store/AuthContext.jsx`
- [Auth API client](https://github.com/abhi-0605/skillbridge_ai/blob/main/client/src/features/auth/authApi.js): `client/src/features/auth/authApi.js`

### API workflows

- [Express application](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/app.js): `server/src/app.js`
- [Auth routes](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/routes/authRoutes.js): `server/src/routes/authRoutes.js`
- [Resume routes](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/routes/resumeRoutes.js): `server/src/routes/resumeRoutes.js`
- [Job description routes](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/routes/jdRoutes.js): `server/src/routes/jdRoutes.js`
- [Analysis routes](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/routes/analysisRoutes.js): `server/src/routes/analysisRoutes.js`
- [Authentication handlers](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/authController.js): `server/src/controllers/authController.js`
- [Resume handlers](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/resumeController.js): `server/src/controllers/resumeController.js`
- [Job description handlers](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/jdController.js): `server/src/controllers/jdController.js`

### Analysis pipeline

- [Analysis orchestration](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/controllers/analysisController.js): `server/src/controllers/analysisController.js`
- [Keyword extraction](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/agents/keywordExtractor.js): `server/src/services/agents/keywordExtractor.js`
- [Skill matching](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/agents/skillMatcher.js): `server/src/services/agents/skillMatcher.js`
- [ATS scoring](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/agents/atsScorer.js): `server/src/services/agents/atsScorer.js`
- [Report generation](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/agents/reportGenerator.js): `server/src/services/agents/reportGenerator.js`

### Persistence and AI

- [AI provider interface](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/services/ai/aiProvider.js): `server/src/services/ai/aiProvider.js`
- [Resume records](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/Resume.js): `server/src/models/Resume.js`
- [Job description records](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/JobDescription.js): `server/src/models/JobDescription.js`
- [Analysis records](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/Analysis.js): `server/src/models/Analysis.js`
- [Report records](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/Report.js): `server/src/models/Report.js`
- [User records](https://github.com/abhi-0605/skillbridge_ai/blob/main/server/src/models/User.js): `server/src/models/User.js`

### Other components

- **Job seeker**
- **MongoDB**
- **Configured AI model**

## Connections

- Job seeker → App routing: uses (evidence: `README.md`)
- App routing → Resume and JD upload: routes to (evidence: `client/src/App.jsx`)
- App routing → Dashboard and history: routes to (evidence: `client/src/App.jsx`)
- App routing → Analysis detail: routes to (evidence: `client/src/App.jsx`)
- App routing → Login and registration: routes to (evidence: `client/src/App.jsx`)
- App routing → OAuth completion: routes to (evidence: `client/src/App.jsx`)
- Resume and JD upload → Resume text extraction: extracts text (evidence: `client/src/pages/UploadPage.jsx`)
- Resume and JD upload → Analysis API client: submits analysis (evidence: `README.md`)
- Dashboard and history → Analysis API client: fetches history (evidence: `client/src/pages/DashboardPage.jsx`)
- Analysis detail → Analysis API client: fetches result (evidence: `client/src/pages/AnalysisDetailPage.jsx`)
- Login and registration → Auth API client: calls (evidence: `client/src/features/auth/authApi.js`)
- OAuth completion → Client auth state: updates session (evidence: `client/src/pages/OAuthSuccessPage.jsx`)
- Client auth state → Auth API client: loads current user (evidence: `client/src/store/AuthContext.jsx`)
- Auth API client → Express application: sends API requests (evidence: `client/src/features/auth/authApi.js`)
- Analysis API client → Express application: sends API requests (evidence: `README.md`)
- Express application → Auth routes: mounts (evidence: `server/src/app.js`)
- Express application → Resume routes: mounts (evidence: `server/src/app.js`)
- Express application → Job description routes: mounts (evidence: `server/src/app.js`)
- Express application → Analysis routes: mounts (evidence: `server/src/app.js`)
- Auth routes → Authentication handlers: dispatches (evidence: `server/src/routes/authRoutes.js`)
- Resume routes → Resume handlers: dispatches (evidence: `server/src/routes/resumeRoutes.js`)
- Job description routes → Job description handlers: dispatches (evidence: `server/src/routes/jdRoutes.js`)
- Analysis routes → Analysis orchestration: dispatches (evidence: `server/src/routes/analysisRoutes.js`)
- Analysis orchestration → Resume records: reads (evidence: `server/src/controllers/analysisController.js`)
- Analysis orchestration → Job description records: reads (evidence: `server/src/controllers/analysisController.js`)
- Analysis orchestration → Analysis records: creates and updates (evidence: `server/src/controllers/analysisController.js`)
- Analysis orchestration → Keyword extraction: extracts keywords (evidence: `server/src/controllers/analysisController.js`)
- Analysis orchestration → Skill matching: matches skills (evidence: `server/src/controllers/analysisController.js`)
- Analysis orchestration → ATS scoring: calculates score (evidence: `server/src/controllers/analysisController.js`)
- Analysis orchestration → Report generation: generates report (evidence: `server/src/controllers/analysisController.js`)
- Analysis orchestration → Report records: creates and reads (evidence: `server/src/controllers/analysisController.js`)
- Keyword extraction → AI provider interface: requests generation (evidence: `server/src/services/agents/keywordExtractor.js`)
- AI provider interface → Configured AI model: selects provider (evidence: `README.md`)
- Authentication handlers → User records: reads and creates (evidence: `server/src/controllers/authController.js`)
- Resume handlers → Resume records: reads and creates (evidence: `server/src/controllers/resumeController.js`)
- Job description handlers → Job description records: reads and creates (evidence: `server/src/controllers/jdController.js`)
- Resume records → MongoDB: persists (evidence: `README.md`)
- Job description records → MongoDB: persists (evidence: `README.md`)
- Analysis records → MongoDB: persists (evidence: `README.md`)
- Report records → MongoDB: persists (evidence: `README.md`)
- User records → MongoDB: persists (evidence: `README.md`)
