# lawaggg/skillpath architecture

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

## Overview

SkillPath is a web and Android-capable learning platform. Learners discover skills, generate a personalized roadmap, track topic progress, take phase quizzes, and request AI feedback or roadmap evaluation; admins manage platform content and users. The React app routes these workflows and calls a Laravel REST API, whose controllers coordinate domain models and AI services. README documents the broader product capabilities; several page and controller implementations were not sampled, so those branches are represented at their supported paths without asserting unverified internal calls.

Main entry points: [`sp-backend/routes/api.php`](https://github.com/lawaggg/skillpath/blob/main/sp-backend/routes/api.php) (API routes), [`sp-backend/app/Http/Controllers/RoadmapController.php`](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/RoadmapController.php) (Roadmap workflow), [`sp-backend/app/Http/Controllers/QuizzController.php`](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/QuizzController.php) (Quiz workflow), [`sp-backend/app/Models/Roadmap.php`](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/Roadmap.php) (Roadmap data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_routes["App routes<br/>[App.jsx]"]
  node_learner_pages["Learning pages"]
  node_admin_pages["Admin pages"]
  node_api_client["API client<br/>[api.js]"]
  node_auth_utils["Token utilities<br/>[uttils.jsx]"]
end

subgraph group_api["Laravel API"]
  node_api_routes["API routes<br/>[api.php]"]
  node_auth_controller["Authentication<br/>[AuthController.php]"]
  node_roadmap_controller["Roadmap workflow"]
  node_quiz_controller["Quiz workflow"]
  node_feedback_controller["AI feedback"]
  node_topic_controller["Topic progress"]
  node_skill_controller["Skill catalog"]
  node_user_controller["User management<br/>[UserController.php]"]
  node_admin_guard["Admin access"]
end

subgraph group_learning["Learning domain"]
  node_roadmap_data[("Roadmap data<br/>[Roadmap.php]")]
  node_phase_data[("Phase data<br/>[RoadmapPhase.php]")]
  node_topic_data[("Topic and resources<br/>[RoadmapTopic.php]")]
  node_skill_data[("Skill catalog data<br/>[Skill.php]")]
  node_quiz_data[("Quiz data<br/>[Quizz.php]")]
  node_quiz_questions[("Quiz questions<br/>[QuizzQuestion.php]")]
  node_quiz_answers[("Quiz answers<br/>[QuizzAnswer.php]")]
  node_feedback_data[("Feedback records<br/>[AiFeedback.php]")]
  node_sp_resource[("Topic resources<br/>[TopicResource.php]")]
end

subgraph group_ai["AI services"]
  node_gemini["Gemini workflows<br/>[GeminiService.php]"]
  node_tavily["Resource enrichment<br/>[TavilyService.php]"]
end

subgraph group_admin["Administration"]
end

node_learner(("Learner"))
node_admin_actor(("Administrator"))
node_gemini_api{{"Google Gemini"}}
node_tavily_api{{"Tavily search"}}
node_database[("SQL database")]

node_learner -->|"uses"| node_routes
node_admin_actor -->|"uses"| node_routes
node_routes -->|"routes to"| node_learner_pages
node_routes -->|"routes to"| node_admin_pages
node_learner_pages -.->|"calls"| node_api_client
node_admin_pages -->|"calls"| node_api_client
node_api_client -->|"uses"| node_auth_utils
node_api_client -->|"HTTP requests"| node_api_routes
node_api_routes -->|"routes to"| node_auth_controller
node_api_routes -->|"routes to"| node_roadmap_controller
node_api_routes -->|"routes to"| node_quiz_controller
node_api_routes -->|"routes to"| node_feedback_controller
node_api_routes -->|"routes to"| node_topic_controller
node_api_routes -->|"routes to"| node_skill_controller
node_api_routes -->|"routes to"| node_user_controller
node_api_routes -->|"protects"| node_admin_guard
node_roadmap_controller -->|"generates and evaluates"| node_gemini
node_roadmap_controller -->|"reads and writes"| node_roadmap_data
node_roadmap_controller -->|"loads roadmap phases"| node_phase_data
node_roadmap_controller -->|"loads topic details"| node_topic_data
node_roadmap_controller -->|"validates skill"| node_skill_data
node_quiz_controller -->|"generates and scores"| node_gemini
node_quiz_controller -->|"checks phase progress"| node_phase_data
node_quiz_controller -->|"reads and writes"| node_quiz_data
node_quiz_controller -->|"loads questions"| node_quiz_questions
node_feedback_controller -->|"requests feedback"| node_gemini
node_feedback_controller -->|"loads roadmap"| node_roadmap_data
node_feedback_controller -->|"saves feedback"| node_feedback_data
node_skill_controller -->|"manages skills"| node_skill_data
node_user_controller -->|"reads roadmaps"| node_roadmap_data
node_gemini -->|"calls"| node_gemini_api
node_gemini -->|"enriches resources"| node_tavily
node_tavily -.->|"searches"| node_tavily_api
node_roadmap_data -->|"has many"| node_phase_data
node_phase_data -->|"has many"| node_topic_data
node_topic_data -->|"has resources"| node_sp_resource
node_phase_data -->|"has quizzes"| node_quiz_data
node_quiz_data -->|"has questions"| node_quiz_questions
node_quiz_data -->|"has answers"| node_quiz_answers
node_roadmap_data -.->|"persists through ORM"| node_database

click node_routes "https://github.com/lawaggg/skillpath/blob/main/sp-frontend/src/App.jsx"
click node_learner_pages "https://github.com/lawaggg/skillpath/tree/main/sp-frontend/src/pages"
click node_admin_pages "https://github.com/lawaggg/skillpath/tree/main/sp-frontend/src/pages/admin"
click node_api_client "https://github.com/lawaggg/skillpath/blob/main/sp-frontend/src/api/api.js"
click node_auth_utils "https://github.com/lawaggg/skillpath/blob/main/sp-frontend/src/utils/uttils.jsx"
click node_api_routes "https://github.com/lawaggg/skillpath/blob/main/sp-backend/routes/api.php"
click node_auth_controller "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/AuthController.php"
click node_roadmap_controller "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/RoadmapController.php"
click node_quiz_controller "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/QuizzController.php"
click node_feedback_controller "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/AiFeedbackController.php"
click node_topic_controller "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/RoadmapTopicController.php"
click node_skill_controller "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/SkillController.php"
click node_user_controller "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/UserController.php"
click node_admin_guard "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Middleware/AdminMiddleware.php"
click node_roadmap_data "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/Roadmap.php"
click node_phase_data "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/RoadmapPhase.php"
click node_topic_data "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/RoadmapTopic.php"
click node_skill_data "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/Skill.php"
click node_quiz_data "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/Quizz.php"
click node_quiz_questions "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/QuizzQuestion.php"
click node_quiz_answers "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/QuizzAnswer.php"
click node_feedback_data "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/AiFeedback.php"
click node_gemini "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Services/GeminiService.php"
click node_tavily "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Services/TavilyService.php"
click node_sp_resource "https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/TopicResource.php"

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_routes,node_learner_pages,node_admin_pages,node_api_client,node_auth_utils toneBlue
class node_api_routes,node_auth_controller,node_roadmap_controller,node_quiz_controller,node_feedback_controller,node_topic_controller,node_skill_controller,node_user_controller,node_admin_guard,node_database toneAmber
class node_roadmap_data,node_phase_data,node_topic_data,node_skill_data,node_quiz_data,node_quiz_questions,node_quiz_answers,node_feedback_data,node_sp_resource toneMint
class node_gemini,node_tavily toneRose
class node_learner,node_admin_actor,node_gemini_api,node_tavily_api toneIndigo
```

## Components

### React client

- [App routes](https://github.com/lawaggg/skillpath/blob/main/sp-frontend/src/App.jsx): `sp-frontend/src/App.jsx`
- [Learning pages](https://github.com/lawaggg/skillpath/tree/main/sp-frontend/src/pages): `sp-frontend/src/pages`
- [Admin pages](https://github.com/lawaggg/skillpath/tree/main/sp-frontend/src/pages/admin): `sp-frontend/src/pages/admin`
- [API client](https://github.com/lawaggg/skillpath/blob/main/sp-frontend/src/api/api.js): `sp-frontend/src/api/api.js`
- [Token utilities](https://github.com/lawaggg/skillpath/blob/main/sp-frontend/src/utils/uttils.jsx): `sp-frontend/src/utils/uttils.jsx`

### Laravel API

- [API routes](https://github.com/lawaggg/skillpath/blob/main/sp-backend/routes/api.php): `sp-backend/routes/api.php`
- [Authentication](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/AuthController.php): `sp-backend/app/Http/Controllers/AuthController.php`
- [Roadmap workflow](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/RoadmapController.php): `sp-backend/app/Http/Controllers/RoadmapController.php`
- [Quiz workflow](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/QuizzController.php): `sp-backend/app/Http/Controllers/QuizzController.php`
- [AI feedback](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/AiFeedbackController.php): `sp-backend/app/Http/Controllers/AiFeedbackController.php`
- [Topic progress](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/RoadmapTopicController.php): `sp-backend/app/Http/Controllers/RoadmapTopicController.php`
- [Skill catalog](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/SkillController.php): `sp-backend/app/Http/Controllers/SkillController.php`
- [User management](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Controllers/UserController.php): `sp-backend/app/Http/Controllers/UserController.php`
- [Admin access](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Http/Middleware/AdminMiddleware.php): `sp-backend/app/Http/Middleware/AdminMiddleware.php`

### Learning domain

- [Roadmap data](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/Roadmap.php): `sp-backend/app/Models/Roadmap.php`
- [Phase data](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/RoadmapPhase.php): `sp-backend/app/Models/RoadmapPhase.php`
- [Topic and resources](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/RoadmapTopic.php): `sp-backend/app/Models/RoadmapTopic.php`
- [Skill catalog data](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/Skill.php): `sp-backend/app/Models/Skill.php`
- [Quiz data](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/Quizz.php): `sp-backend/app/Models/Quizz.php`
- [Quiz questions](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/QuizzQuestion.php): `sp-backend/app/Models/QuizzQuestion.php`
- [Quiz answers](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/QuizzAnswer.php): `sp-backend/app/Models/QuizzAnswer.php`
- [Feedback records](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/AiFeedback.php): `sp-backend/app/Models/AiFeedback.php`
- [Topic resources](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Models/TopicResource.php): `sp-backend/app/Models/TopicResource.php`

### AI services

- [Gemini workflows](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Services/GeminiService.php): `sp-backend/app/Services/GeminiService.php`
- [Resource enrichment](https://github.com/lawaggg/skillpath/blob/main/sp-backend/app/Services/TavilyService.php): `sp-backend/app/Services/TavilyService.php`

### Other components

- **Learner**
- **Administrator**
- **Google Gemini**
- **Tavily search**
- **SQL database**

## Connections

- Learner → App routes: uses (evidence: `sp-frontend/src/App.jsx`)
- Administrator → App routes: uses (evidence: `sp-frontend/src/App.jsx`)
- App routes → Learning pages: routes to (evidence: `sp-frontend/src/App.jsx`)
- App routes → Admin pages: routes to (evidence: `sp-frontend/src/App.jsx`)
- Learning pages → API client: calls (evidence: `sp-frontend/src/pages/admin/SkillManage.jsx`)
- Admin pages → API client: calls (evidence: `sp-frontend/src/pages/admin/SkillManage.jsx`)
- API client → Token utilities: uses (evidence: `sp-frontend/src/api/api.js`)
- API client → API routes: HTTP requests (evidence: `README.md`)
- API routes → Authentication: routes to (evidence: `sp-backend/routes/api.php`)
- API routes → Roadmap workflow: routes to (evidence: `sp-backend/routes/api.php`)
- API routes → Quiz workflow: routes to (evidence: `sp-backend/routes/api.php`)
- API routes → AI feedback: routes to (evidence: `sp-backend/routes/api.php`)
- API routes → Topic progress: routes to (evidence: `sp-backend/routes/api.php`)
- API routes → Skill catalog: routes to (evidence: `sp-backend/routes/api.php`)
- API routes → User management: routes to (evidence: `sp-backend/routes/api.php`)
- API routes → Admin access: protects (evidence: `sp-backend/routes/api.php`)
- Roadmap workflow → Gemini workflows: generates and evaluates (evidence: `sp-backend/app/Http/Controllers/RoadmapController.php`)
- Roadmap workflow → Roadmap data: reads and writes (evidence: `sp-backend/app/Http/Controllers/RoadmapController.php`)
- Roadmap workflow → Phase data: loads roadmap phases (evidence: `sp-backend/app/Http/Controllers/RoadmapController.php`)
- Roadmap workflow → Topic and resources: loads topic details (evidence: `sp-backend/app/Http/Controllers/RoadmapController.php`)
- Roadmap workflow → Skill catalog data: validates skill (evidence: `sp-backend/app/Http/Controllers/RoadmapController.php`)
- Quiz workflow → Gemini workflows: generates and scores (evidence: `sp-backend/app/Http/Controllers/QuizzController.php`)
- Quiz workflow → Phase data: checks phase progress (evidence: `sp-backend/app/Http/Controllers/QuizzController.php`)
- Quiz workflow → Quiz data: reads and writes (evidence: `sp-backend/app/Http/Controllers/QuizzController.php`)
- Quiz workflow → Quiz questions: loads questions (evidence: `sp-backend/app/Http/Controllers/QuizzController.php`)
- AI feedback → Gemini workflows: requests feedback (evidence: `sp-backend/app/Http/Controllers/AiFeedbackController.php`)
- AI feedback → Roadmap data: loads roadmap (evidence: `sp-backend/app/Http/Controllers/AiFeedbackController.php`)
- AI feedback → Feedback records: saves feedback (evidence: `sp-backend/app/Http/Controllers/AiFeedbackController.php`)
- Skill catalog → Skill catalog data: manages skills (evidence: `sp-backend/app/Http/Controllers/SkillController.php`)
- User management → Roadmap data: reads roadmaps (evidence: `sp-backend/app/Http/Controllers/UserController.php`)
- Gemini workflows → Google Gemini: calls (evidence: `sp-backend/app/Services/GeminiService.php`)
- Gemini workflows → Resource enrichment: enriches resources (evidence: `sp-backend/app/Services/GeminiService.php`)
- Resource enrichment → Tavily search: searches
- Roadmap data → Phase data: has many (evidence: `sp-backend/app/Models/Roadmap.php`)
- Phase data → Topic and resources: has many (evidence: `sp-backend/app/Models/RoadmapPhase.php`)
- Topic and resources → Topic resources: has resources (evidence: `sp-backend/app/Models/RoadmapTopic.php`)
- Phase data → Quiz data: has quizzes (evidence: `sp-backend/app/Models/RoadmapPhase.php`)
- Quiz data → Quiz questions: has questions (evidence: `sp-backend/app/Models/Quizz.php`)
- Quiz data → Quiz answers: has answers (evidence: `sp-backend/app/Models/Quizz.php`)
- Roadmap data → SQL database: persists through ORM (evidence: `README.md`)
