# irsyamokta/gabara architecture

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

## Overview

Gabara is a role-based learning management system for students, mentors, and administrators. The main learner journey is account access, joining a class, then using its learning content and completing assignments; mentors manage classes and learning activities, while administrators oversee users and announcements. Laravel controllers provide Inertia pages and interact with Eloquent models backed by relational storage. The README documents email verification, role permissions, profile management, and Cloudinary media storage. Some domain modules are represented from the file tree; their internal wiring was not sampled, so uncertain links are omitted.

Main entry points: [`routes/web.php`](https://github.com/irsyamokta/gabara/blob/main/routes/web.php) (Web Routes), [`app/Models`](https://github.com/irsyamokta/gabara/tree/main/app/Models) (Learning Records), [`app/Http/Middleware/HandleInertiaRequests.php`](https://github.com/irsyamokta/gabara/blob/main/app/Http/Middleware/HandleInertiaRequests.php) (Inertia Bridge), [`app/Http/Controllers/ClassController.php`](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/ClassController.php) (Class Management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Public Entry"]
  node_routes["Web Routes<br/>[web.php]"]
  node_homepage["Homepage"]
  node_homepage_ui["Homepage UI<br/>[Homepage.tsx]"]
end

subgraph group_identity["Accounts and Roles"]
  node_auth_ui["Auth Screens<br/>[Login.tsx]"]
  node_login["Session Access"]
  node_registration["Registration"]
  node_user_store[("User Records<br/>[User.php]")]
  node_verification["Email Verification"]
  node_profile["Profile Management"]
end

subgraph group_learning["Classes and Learning"]
  node_class_controller["Class Management"]
  node_class_ui["Class Pages<br/>[ClassDetail.tsx]"]
  node_enrollment["Class Enrollment"]
  node_learning_content["Course Content<br/>[Material.php]"]
  node_meeting_controller["Meetings"]
end

subgraph group_engagement["Learning Activity"]
  node_assignment_controller["Assignments"]
  node_submission_controller["Submissions"]
  node_discussion["Class Discussions<br/>[Discussion.php]"]
end

subgraph group_platform["Application Core"]
  node_dashboard["Role Dashboard"]
  node_dashboard_ui["Dashboard Screens<br/>[Dashboard.tsx]"]
  node_announcement_controller["Announcements"]
  node_models[("Learning Records")]
  node_inertia["Inertia Bridge"]
end

node_visitor(("Learner or Staff"))
node_mysql[("MySQL")]
node_cloudinary[("Cloudinary Media")]

node_visitor -->|"browses"| node_homepage_ui
node_homepage_ui -->|"navigates"| node_routes
node_visitor -->|"signs in"| node_auth_ui
node_auth_ui -->|"submits credentials"| node_routes
node_routes -->|"dispatches"| node_login
node_routes -->|"dispatches"| node_registration
node_registration -->|"creates user"| node_user_store
node_registration -->|"assigns role"| node_user_store
node_routes -->|"dispatches"| node_verification
node_visitor -->|"requests pages"| node_routes
node_routes -->|"dispatches"| node_homepage
node_homepage -->|"renders page"| node_inertia
node_routes -->|"dispatches"| node_dashboard
node_dashboard -->|"reads role data"| node_models
node_dashboard -->|"renders dashboard"| node_inertia
node_inertia -->|"delivers props"| node_dashboard_ui
node_routes -->|"dispatches"| node_class_controller
node_class_controller -->|"reads and writes"| node_models
node_class_controller -->|"renders class pages"| node_inertia
node_inertia -->|"delivers props"| node_class_ui
node_routes -->|"dispatches"| node_enrollment
node_enrollment -->|"checks and creates enrollment"| node_models
node_routes -->|"dispatches"| node_meeting_controller
node_routes -->|"dispatches"| node_assignment_controller
node_routes -->|"dispatches"| node_submission_controller
node_routes -->|"dispatches"| node_announcement_controller
node_routes -->|"dispatches"| node_profile
node_meeting_controller -->|"reads and writes"| node_models
node_assignment_controller -->|"reads and writes"| node_models
node_submission_controller -->|"reads and writes"| node_models
node_announcement_controller -->|"reads and writes"| node_models
node_profile -->|"updates profile"| node_user_store
node_class_controller -.->|"uploads media"| node_cloudinary
node_models -->|"persists records"| node_mysql

click node_routes "https://github.com/irsyamokta/gabara/blob/main/routes/web.php"
click node_homepage "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/HomepageController.php"
click node_homepage_ui "https://github.com/irsyamokta/gabara/blob/main/resources/js/Pages/Homepage.tsx"
click node_auth_ui "https://github.com/irsyamokta/gabara/blob/main/resources/js/Pages/Auth/Login.tsx"
click node_login "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php"
click node_registration "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/Auth/RegisteredUserController.php"
click node_user_store "https://github.com/irsyamokta/gabara/blob/main/app/Models/User.php"
click node_verification "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/Auth/VerifyEmailController.php"
click node_dashboard "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/DashboardController.php"
click node_dashboard_ui "https://github.com/irsyamokta/gabara/blob/main/resources/js/Pages/Student/Dashboard.tsx"
click node_class_controller "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/ClassController.php"
click node_class_ui "https://github.com/irsyamokta/gabara/blob/main/resources/js/Pages/Classes/ClassDetail.tsx"
click node_enrollment "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/EnrollmentController.php"
click node_learning_content "https://github.com/irsyamokta/gabara/blob/main/app/Models/Material.php"
click node_meeting_controller "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/MeetingController.php"
click node_assignment_controller "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/AssignmentController.php"
click node_submission_controller "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/SubmissionController.php"
click node_discussion "https://github.com/irsyamokta/gabara/blob/main/app/Models/Discussion.php"
click node_announcement_controller "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/AnnouncementController.php"
click node_profile "https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/ProfileController.php"
click node_models "https://github.com/irsyamokta/gabara/tree/main/app/Models"
click node_inertia "https://github.com/irsyamokta/gabara/blob/main/app/Http/Middleware/HandleInertiaRequests.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_homepage,node_homepage_ui toneBlue
class node_auth_ui,node_login,node_registration,node_user_store,node_verification,node_profile,node_mysql,node_cloudinary toneAmber
class node_class_controller,node_class_ui,node_enrollment,node_learning_content,node_meeting_controller toneMint
class node_assignment_controller,node_submission_controller,node_discussion toneRose
class node_dashboard,node_dashboard_ui,node_announcement_controller,node_models,node_inertia,node_visitor toneIndigo
```

## Components

### Public Entry

- [Web Routes](https://github.com/irsyamokta/gabara/blob/main/routes/web.php): `routes/web.php`
- [Homepage](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/HomepageController.php): `app/Http/Controllers/HomepageController.php`
- [Homepage UI](https://github.com/irsyamokta/gabara/blob/main/resources/js/Pages/Homepage.tsx): `resources/js/Pages/Homepage.tsx`

### Accounts and Roles

- [Auth Screens](https://github.com/irsyamokta/gabara/blob/main/resources/js/Pages/Auth/Login.tsx): `resources/js/Pages/Auth/Login.tsx`
- [Session Access](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/Auth/AuthenticatedSessionController.php): `app/Http/Controllers/Auth/AuthenticatedSessionController.php`
- [Registration](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/Auth/RegisteredUserController.php): `app/Http/Controllers/Auth/RegisteredUserController.php`
- [User Records](https://github.com/irsyamokta/gabara/blob/main/app/Models/User.php): `app/Models/User.php`
- [Email Verification](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/Auth/VerifyEmailController.php): `app/Http/Controllers/Auth/VerifyEmailController.php`
- [Profile Management](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/ProfileController.php): `app/Http/Controllers/ProfileController.php`

### Classes and Learning

- [Class Management](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/ClassController.php): `app/Http/Controllers/ClassController.php`
- [Class Pages](https://github.com/irsyamokta/gabara/blob/main/resources/js/Pages/Classes/ClassDetail.tsx): `resources/js/Pages/Classes/ClassDetail.tsx`
- [Class Enrollment](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/EnrollmentController.php): `app/Http/Controllers/EnrollmentController.php`
- [Course Content](https://github.com/irsyamokta/gabara/blob/main/app/Models/Material.php): `app/Models/Material.php`
- [Meetings](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/MeetingController.php): `app/Http/Controllers/MeetingController.php`

### Learning Activity

- [Assignments](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/AssignmentController.php): `app/Http/Controllers/AssignmentController.php`
- [Submissions](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/SubmissionController.php): `app/Http/Controllers/SubmissionController.php`
- [Class Discussions](https://github.com/irsyamokta/gabara/blob/main/app/Models/Discussion.php): `app/Models/Discussion.php`

### Application Core

- [Role Dashboard](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/DashboardController.php): `app/Http/Controllers/DashboardController.php`
- [Dashboard Screens](https://github.com/irsyamokta/gabara/blob/main/resources/js/Pages/Student/Dashboard.tsx): `resources/js/Pages/Student/Dashboard.tsx`
- [Announcements](https://github.com/irsyamokta/gabara/blob/main/app/Http/Controllers/AnnouncementController.php): `app/Http/Controllers/AnnouncementController.php`
- [Learning Records](https://github.com/irsyamokta/gabara/tree/main/app/Models): `app/Models`
- [Inertia Bridge](https://github.com/irsyamokta/gabara/blob/main/app/Http/Middleware/HandleInertiaRequests.php): `app/Http/Middleware/HandleInertiaRequests.php`

### Other components

- **Learner or Staff**
- **MySQL**
- **Cloudinary Media**

## Connections

- Learner or Staff → Homepage UI: browses
- Homepage UI → Web Routes: navigates
- Learner or Staff → Auth Screens: signs in
- Auth Screens → Web Routes: submits credentials
- Web Routes → Session Access: dispatches
- Web Routes → Registration: dispatches
- Registration → User Records: creates user
- Registration → User Records: assigns role
- Web Routes → Email Verification: dispatches
- Learner or Staff → Web Routes: requests pages
- Web Routes → Homepage: dispatches
- Homepage → Inertia Bridge: renders page
- Web Routes → Role Dashboard: dispatches
- Role Dashboard → Learning Records: reads role data
- Role Dashboard → Inertia Bridge: renders dashboard
- Inertia Bridge → Dashboard Screens: delivers props
- Web Routes → Class Management: dispatches
- Class Management → Learning Records: reads and writes
- Class Management → Inertia Bridge: renders class pages
- Inertia Bridge → Class Pages: delivers props
- Web Routes → Class Enrollment: dispatches
- Class Enrollment → Learning Records: checks and creates enrollment
- Web Routes → Meetings: dispatches
- Web Routes → Assignments: dispatches
- Web Routes → Submissions: dispatches
- Web Routes → Announcements: dispatches
- Web Routes → Profile Management: dispatches
- Meetings → Learning Records: reads and writes
- Assignments → Learning Records: reads and writes
- Submissions → Learning Records: reads and writes
- Announcements → Learning Records: reads and writes
- Profile Management → User Records: updates profile
- Class Management → Cloudinary Media: uploads media
- Learning Records → MySQL: persists records
