# thareesh2311/ai-skill-gap-analyzer architecture

> Architecture diagram of the GitHub repository thareesh2311/ai-skill-gap-analyzer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/thareesh2311/ai-skill-gap-analyzer
- Repository: https://github.com/thareesh2311/ai-skill-gap-analyzer

## Overview

This is a career-readiness platform whose main journey is account access, resume upload and parsing, skill extraction and job-requirement comparison, followed by assessments, readiness analytics, and personalized learning with progress tracking. The graph emphasizes the documented React-to-Express workflow and sampled controller behavior; several service implementations are unsampled, so uncertain internal calls are omitted. The Python/Ollama service is shown as a separate optional capability: the README says the deployed flow centers on Node/Express and does not establish that it is wired into that flow.

Main entry points: [`client/src/App.jsx`](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/App.jsx) (React application), [`server/server.js`](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/server.js) (Express API), [`client/src/services/api.js`](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/services/api.js) (API services), [`server/config/db.js`](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/config/db.js) (MongoDB)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web application"]
  node_web["React application<br/>[App.jsx]"]
  node_auth["Authentication UI<br/>[AuthContext.jsx]"]
  node_resume_ui["Resume workflow<br/>[Resume.jsx]"]
  node_assess_ui["Assessment pages<br/>[Assessments.jsx]"]
  node_analytics_ui["Analytics page<br/>[Analytics.jsx]"]
  node_learning_ui["Learning page<br/>[Learning.jsx]"]
  node_api_client["API services<br/>[api.js]"]
end

subgraph group_api["API and career analysis"]
  node_express["Express API<br/>[server.js]"]
  node_auth_routes["Auth routes<br/>[authRoutes.js]"]
  node_resume_routes["Resume routes<br/>[resumeRoutes.js]"]
  node_resume_parse["Resume parsing"]
  node_skill_extract["Skill extraction"]
  node_skill_gap["Skill gap analysis"]
  node_job_data["Company and role data"]
end

subgraph group_assessment["Assessment and insight"]
  node_assessment_routes["Assessment routes"]
  node_assessment_logic["Assessment workflow"]
  node_assessment_exec["Code and SQL runners"]
  node_analytics["Readiness and analytics"]
end

subgraph group_learning["Learning journey"]
  node_learning_routes["Learning routes<br/>[learningRoutes.js]"]
  node_learning_logic["Learning plan and progress"]
  node_recommend["Roadmap recommendations"]
  node_resources["Learning resources"]
end

subgraph group_storage["Persistent data"]
  node_mongo[("MongoDB<br/>[db.js]")]
end

node_user(("Career seeker"))
node_youtube["YouTube Data API"]
node_python_ai["Python insight service<br/>[main.py]"]
node_ollama["Ollama model"]

node_user -->|"uses"| node_web
node_web -->|"renders"| node_auth
node_web -->|"routes to"| node_resume_ui
node_web -->|"routes to"| node_assess_ui
node_web -->|"routes to"| node_analytics_ui
node_web -->|"routes to"| node_learning_ui
node_auth -->|"requests"| node_api_client
node_resume_ui -->|"requests"| node_api_client
node_assess_ui -->|"requests"| node_api_client
node_analytics_ui -->|"requests"| node_api_client
node_learning_ui -->|"requests"| node_api_client
node_api_client -->|"sends API calls"| node_express
node_express -->|"connects"| node_mongo
node_express -->|"mounts"| node_auth_routes
node_express -->|"mounts"| node_resume_routes
node_express -->|"mounts"| node_assessment_routes
node_express -->|"mounts"| node_learning_routes
node_resume_routes -->|"dispatches"| node_resume_parse
node_resume_routes -->|"dispatches"| node_skill_extract
node_resume_routes -->|"dispatches"| node_skill_gap
node_resume_parse -->|"saves resume"| node_mongo
node_resume_parse -->|"looks up role"| node_job_data
node_skill_extract -->|"uses resume data"| node_mongo
node_skill_gap -->|"reads requirements"| node_mongo
node_assessment_routes -->|"dispatches"| node_assessment_logic
node_assessment_logic -->|"reads and saves attempts"| node_mongo
node_assessment_logic -->|"executes submissions"| node_assessment_exec
node_assessment_logic -->|"serves readiness"| node_analytics
node_assessment_routes -->|"dispatches analytics"| node_analytics
node_learning_routes -->|"dispatches"| node_learning_logic
node_learning_logic -->|"generates plans"| node_recommend
node_learning_logic -->|"gets resources"| node_resources
node_learning_logic -->|"tracks progress"| node_mongo
node_recommend -->|"attaches resources"| node_resources
node_resources -.->|"fetches videos"| node_youtube
node_python_ai -.->|"requests generation"| node_ollama

click node_web "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/App.jsx"
click node_auth "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/context/AuthContext.jsx"
click node_resume_ui "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/pages/Resume.jsx"
click node_assess_ui "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/pages/Assessments.jsx"
click node_analytics_ui "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/pages/Analytics.jsx"
click node_learning_ui "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/pages/Learning.jsx"
click node_api_client "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/services/api.js"
click node_express "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/server.js"
click node_auth_routes "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/routes/authRoutes.js"
click node_resume_routes "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/routes/resumeRoutes.js"
click node_resume_parse "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/resumeController.js"
click node_skill_extract "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/skillAnalysisController.js"
click node_skill_gap "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/skillGapController.js"
click node_job_data "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/jobRequirementController.js"
click node_assessment_routes "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/routes/assessmentRoutes.js"
click node_assessment_logic "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/assessmentController.js"
click node_assessment_exec "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/services/codeExecutionService.js"
click node_analytics "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/services/finalJobReadinessService.js"
click node_learning_routes "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/routes/learningRoutes.js"
click node_learning_logic "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/learningController.js"
click node_recommend "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/services/learningRecommendationService.js"
click node_resources "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/services/learningResourceService.js"
click node_mongo "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/config/db.js"
click node_python_ai "https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/ai-service/main.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_web,node_auth,node_resume_ui,node_assess_ui,node_analytics_ui,node_learning_ui,node_api_client toneBlue
class node_express,node_auth_routes,node_resume_routes,node_resume_parse,node_skill_extract,node_skill_gap,node_job_data toneAmber
class node_assessment_routes,node_assessment_logic,node_assessment_exec,node_analytics,node_youtube toneMint
class node_learning_routes,node_learning_logic,node_recommend,node_resources toneRose
class node_mongo,node_user,node_ollama toneIndigo
class node_python_ai toneTeal
```

## Components

### Web application

- [React application](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Authentication UI](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/context/AuthContext.jsx): `client/src/context/AuthContext.jsx`
- [Resume workflow](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/pages/Resume.jsx): `client/src/pages/Resume.jsx`
- [Assessment pages](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/pages/Assessments.jsx): `client/src/pages/Assessments.jsx`
- [Analytics page](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/pages/Analytics.jsx): `client/src/pages/Analytics.jsx`
- [Learning page](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/pages/Learning.jsx): `client/src/pages/Learning.jsx`
- [API services](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/client/src/services/api.js): `client/src/services/api.js`

### API and career analysis

- [Express API](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/server.js): `server/server.js`
- [Auth routes](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/routes/authRoutes.js): `server/routes/authRoutes.js`
- [Resume routes](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/routes/resumeRoutes.js): `server/routes/resumeRoutes.js`
- [Resume parsing](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/resumeController.js): `server/controllers/resumeController.js`
- [Skill extraction](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/skillAnalysisController.js): `server/controllers/skillAnalysisController.js`
- [Skill gap analysis](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/skillGapController.js): `server/controllers/skillGapController.js`
- [Company and role data](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/jobRequirementController.js): `server/controllers/jobRequirementController.js`

### Assessment and insight

- [Assessment routes](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/routes/assessmentRoutes.js): `server/routes/assessmentRoutes.js`
- [Assessment workflow](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/assessmentController.js): `server/controllers/assessmentController.js`
- [Code and SQL runners](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/services/codeExecutionService.js): `server/services/codeExecutionService.js`
- [Readiness and analytics](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/services/finalJobReadinessService.js): `server/services/finalJobReadinessService.js`

### Learning journey

- [Learning routes](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/routes/learningRoutes.js): `server/routes/learningRoutes.js`
- [Learning plan and progress](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/controllers/learningController.js): `server/controllers/learningController.js`
- [Roadmap recommendations](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/services/learningRecommendationService.js): `server/services/learningRecommendationService.js`
- [Learning resources](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/services/learningResourceService.js): `server/services/learningResourceService.js`

### Persistent data

- [MongoDB](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/server/config/db.js): `server/config/db.js`

### Other components

- **Career seeker**
- **YouTube Data API**
- [Python insight service](https://github.com/thareesh2311/ai-skill-gap-analyzer/blob/main/ai-service/main.py): `ai-service/main.py`
- **Ollama model**

## Connections

- Career seeker → React application: uses
- React application → Authentication UI: renders
- React application → Resume workflow: routes to
- React application → Assessment pages: routes to
- React application → Analytics page: routes to
- React application → Learning page: routes to
- Authentication UI → API services: requests
- Resume workflow → API services: requests
- Assessment pages → API services: requests
- Analytics page → API services: requests
- Learning page → API services: requests
- API services → Express API: sends API calls
- Express API → MongoDB: connects
- Express API → Auth routes: mounts
- Express API → Resume routes: mounts
- Express API → Assessment routes: mounts
- Express API → Learning routes: mounts
- Resume routes → Resume parsing: dispatches
- Resume routes → Skill extraction: dispatches
- Resume routes → Skill gap analysis: dispatches
- Resume parsing → MongoDB: saves resume
- Resume parsing → Company and role data: looks up role
- Skill extraction → MongoDB: uses resume data
- Skill gap analysis → MongoDB: reads requirements
- Assessment routes → Assessment workflow: dispatches
- Assessment workflow → MongoDB: reads and saves attempts
- Assessment workflow → Code and SQL runners: executes submissions
- Assessment workflow → Readiness and analytics: serves readiness
- Assessment routes → Readiness and analytics: dispatches analytics
- Learning routes → Learning plan and progress: dispatches
- Learning plan and progress → Roadmap recommendations: generates plans
- Learning plan and progress → Learning resources: gets resources
- Learning plan and progress → MongoDB: tracks progress
- Roadmap recommendations → Learning resources: attaches resources
- Learning resources → YouTube Data API: fetches videos
- Python insight service → Ollama model: requests generation
