# artaxerxesnazareno/ovia architecture

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

- Interactive diagram: https://gitdiagram.com/artaxerxesnazareno/ovia
- Repository: https://github.com/artaxerxesnazareno/ovia

## Overview

This is a Laravel/Inertia career-guidance application. A signed-in user completes a question-based assessment; the backend saves responses, queues processing, uses an LLM to generate career/course recommendations and a roadmap, then presents results and dashboard views. The graph separates the web experience, assessment processing, guidance data, and account access. Some routes and frontend page wiring were not excerpted, so uncertain links are omitted; the LLM provider call and recommendation persistence are directly visible in sampled source.

Main entry points: [`app/Http/Controllers/AssessmentController.php`](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Http/Controllers/AssessmentController.php) (Assessment handler), [`app/Jobs/ProcessAssessmentJob.php`](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Jobs/ProcessAssessmentJob.php) (Assessment job), [`app/Services/Assessment/RecommendationService.php`](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Services/Assessment/RecommendationService.php) (Recommendation writer), [`app/Models/Assessment.php`](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Assessment.php) (Assessment)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_assessment_pages["Assessment screens<br/>[Assessment.tsx]"]
  node_question_pages["Question flow<br/>[Questions.tsx]"]
  node_processing_page["Processing view<br/>[Processing.tsx]"]
  node_results_page["Results<br/>[Results.tsx]"]
  node_course_details["Course details"]
  node_dashboard_page["Dashboard<br/>[dashboard.tsx]"]
end

subgraph group_assessment["Assessment processing"]
  node_assessment_controller["Assessment handler"]
  node_assessment_job["Assessment job"]
  node_prompt_service["Prompt builder"]
  node_llm_service["LLM adapter<br/>[LLMService.php]"]
  node_recommendation_service["Recommendation writer"]
end

subgraph group_guidance["Career guidance data"]
  node_assessment_model[("Assessment<br/>[Assessment.php]")]
  node_response_model[("Assessment responses")]
  node_question_model[("Question bank<br/>[Question.php]")]
  node_course_model[("Course catalog<br/>[Course.php]")]
  node_career_path_model[("Career paths<br/>[CareerPath.php]")]
  node_recommendation_model[("Recommendations<br/>[Recommendation.php]")]
  node_roadmap_model[("Roadmaps<br/>[Roadmap.php]")]
  node_courses_seed["Course catalog seed<br/>[CoursesSeeder.php]"]
  node_questions_seed["Question seed"]
end

subgraph group_identity["Accounts and access"]
  node_auth_routes["Authentication routes<br/>[auth.php]"]
  node_session_controller["Session controller"]
  node_user_model[("User account<br/>[User.php]")]
end

node_user(("User"))
node_llm_provider{{"LLM provider"}}

node_user -.->|"starts assessment"| node_assessment_pages
node_assessment_pages -.->|"continues to"| node_question_pages
node_question_pages -.->|"submits answers"| node_assessment_controller
node_assessment_controller -->|"loads questions"| node_question_model
node_assessment_controller -->|"reads and saves"| node_response_model
node_assessment_controller -->|"loads assessment"| node_assessment_model
node_assessment_controller -->|"dispatches processing"| node_assessment_job
node_assessment_job -->|"loads assessment"| node_assessment_model
node_assessment_job -->|"builds prompt"| node_prompt_service
node_assessment_job -->|"requests generation"| node_llm_service
node_assessment_job -->|"saves guidance"| node_recommendation_service
node_llm_service -->|"sends HTTP request"| node_llm_provider
node_recommendation_service -->|"matches courses"| node_course_model
node_recommendation_service -->|"creates recommendations"| node_recommendation_model
node_recommendation_service -->|"creates roadmaps"| node_roadmap_model
node_user -.->|"views results"| node_results_page
node_user -.->|"opens dashboard"| node_dashboard_page
node_user -.->|"authenticates"| node_auth_routes
node_auth_routes -->|"routes sessions"| node_session_controller
node_session_controller -->|"checks account role"| node_user_model
node_assessment_model -->|"has recommendations"| node_recommendation_model
node_recommendation_model -->|"has roadmap"| node_roadmap_model
node_course_model -->|"has career paths"| node_career_path_model

click node_assessment_pages "https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/Assessment.tsx"
click node_question_pages "https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/Questions.tsx"
click node_processing_page "https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/Processing.tsx"
click node_results_page "https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/Results.tsx"
click node_course_details "https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/ResultCourseDetails.tsx"
click node_dashboard_page "https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/dashboard.tsx"
click node_assessment_controller "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Http/Controllers/AssessmentController.php"
click node_assessment_job "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Jobs/ProcessAssessmentJob.php"
click node_prompt_service "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Services/Assessment/AssessmentPromptService.php"
click node_llm_service "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Services/LLM/LLMService.php"
click node_recommendation_service "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Services/Assessment/RecommendationService.php"
click node_assessment_model "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Assessment.php"
click node_response_model "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/AssessmentResponse.php"
click node_question_model "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Question.php"
click node_course_model "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Course.php"
click node_career_path_model "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/CareerPath.php"
click node_recommendation_model "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Recommendation.php"
click node_roadmap_model "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Roadmap.php"
click node_courses_seed "https://github.com/artaxerxesnazareno/ovia/blob/main/database/seeders/CoursesSeeder.php"
click node_questions_seed "https://github.com/artaxerxesnazareno/ovia/blob/main/database/seeders/QuestionsSeeder.php"
click node_auth_routes "https://github.com/artaxerxesnazareno/ovia/blob/main/routes/auth.php"
click node_session_controller "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php"
click node_user_model "https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/User.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_assessment_pages,node_question_pages,node_processing_page,node_results_page,node_course_details,node_dashboard_page,node_user toneBlue
class node_assessment_controller,node_assessment_job,node_prompt_service,node_llm_service,node_recommendation_service toneAmber
class node_assessment_model,node_response_model,node_question_model,node_course_model,node_career_path_model,node_recommendation_model,node_roadmap_model,node_courses_seed,node_questions_seed toneMint
class node_auth_routes,node_session_controller,node_user_model toneRose
class node_llm_provider toneIndigo
```

## Components

### User experience

- [Assessment screens](https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/Assessment.tsx): `resources/js/pages/Assessment.tsx`
- [Question flow](https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/Questions.tsx): `resources/js/pages/Questions.tsx`
- [Processing view](https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/Processing.tsx): `resources/js/pages/Processing.tsx`
- [Results](https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/Results.tsx): `resources/js/pages/Results.tsx`
- [Course details](https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/ResultCourseDetails.tsx): `resources/js/pages/ResultCourseDetails.tsx`
- [Dashboard](https://github.com/artaxerxesnazareno/ovia/blob/main/resources/js/pages/dashboard.tsx): `resources/js/pages/dashboard.tsx`

### Assessment processing

- [Assessment handler](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Http/Controllers/AssessmentController.php): `app/Http/Controllers/AssessmentController.php`
- [Assessment job](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Jobs/ProcessAssessmentJob.php): `app/Jobs/ProcessAssessmentJob.php`
- [Prompt builder](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Services/Assessment/AssessmentPromptService.php): `app/Services/Assessment/AssessmentPromptService.php`
- [LLM adapter](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Services/LLM/LLMService.php): `app/Services/LLM/LLMService.php`
- [Recommendation writer](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Services/Assessment/RecommendationService.php): `app/Services/Assessment/RecommendationService.php`

### Career guidance data

- [Assessment](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Assessment.php): `app/Models/Assessment.php`
- [Assessment responses](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/AssessmentResponse.php): `app/Models/AssessmentResponse.php`
- [Question bank](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Question.php): `app/Models/Question.php`
- [Course catalog](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Course.php): `app/Models/Course.php`
- [Career paths](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/CareerPath.php): `app/Models/CareerPath.php`
- [Recommendations](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Recommendation.php): `app/Models/Recommendation.php`
- [Roadmaps](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/Roadmap.php): `app/Models/Roadmap.php`
- [Course catalog seed](https://github.com/artaxerxesnazareno/ovia/blob/main/database/seeders/CoursesSeeder.php): `database/seeders/CoursesSeeder.php`
- [Question seed](https://github.com/artaxerxesnazareno/ovia/blob/main/database/seeders/QuestionsSeeder.php): `database/seeders/QuestionsSeeder.php`

### Accounts and access

- [Authentication routes](https://github.com/artaxerxesnazareno/ovia/blob/main/routes/auth.php): `routes/auth.php`
- [Session controller](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php): `app/Http/Controllers/Auth/AuthenticatedSessionController.php`
- [User account](https://github.com/artaxerxesnazareno/ovia/blob/main/app/Models/User.php): `app/Models/User.php`

### Other components

- **User**
- **LLM provider**

## Connections

- User → Assessment screens: starts assessment
- Assessment screens → Question flow: continues to
- Question flow → Assessment handler: submits answers
- Assessment handler → Question bank: loads questions (evidence: `app/Http/Controllers/AssessmentController.php`)
- Assessment handler → Assessment responses: reads and saves (evidence: `app/Http/Controllers/AssessmentController.php`)
- Assessment handler → Assessment: loads assessment (evidence: `app/Http/Controllers/AssessmentController.php`)
- Assessment handler → Assessment job: dispatches processing (evidence: `app/Http/Controllers/AssessmentController.php`)
- Assessment job → Assessment: loads assessment (evidence: `app/Jobs/ProcessAssessmentJob.php`)
- Assessment job → Prompt builder: builds prompt (evidence: `app/Jobs/ProcessAssessmentJob.php`)
- Assessment job → LLM adapter: requests generation (evidence: `app/Jobs/ProcessAssessmentJob.php`)
- Assessment job → Recommendation writer: saves guidance (evidence: `app/Jobs/ProcessAssessmentJob.php`)
- LLM adapter → LLM provider: sends HTTP request (evidence: `app/Services/LLM/LLMService.php`)
- Recommendation writer → Course catalog: matches courses (evidence: `app/Services/Assessment/RecommendationService.php`)
- Recommendation writer → Recommendations: creates recommendations (evidence: `app/Services/Assessment/RecommendationService.php`)
- Recommendation writer → Roadmaps: creates roadmaps (evidence: `app/Services/Assessment/RecommendationService.php`)
- User → Results: views results
- User → Dashboard: opens dashboard
- User → Authentication routes: authenticates
- Authentication routes → Session controller: routes sessions (evidence: `routes/auth.php`)
- Session controller → User account: checks account role (evidence: `app/Http/Controllers/Auth/AuthenticatedSessionController.php`)
- Assessment → Recommendations: has recommendations (evidence: `app/Models/Assessment.php`)
- Recommendations → Roadmaps: has roadmap (evidence: `app/Models/Recommendation.php`)
- Course catalog → Career paths: has career paths (evidence: `app/Models/Course.php`)
