# nayyyr/celoe_webdev architecture

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

- Interactive diagram: https://gitdiagram.com/nayyyr/celoe_webdev
- Repository: https://github.com/nayyyr/celoe_webdev

## Overview

Celoe contains two separate ticketing products: a Laravel session-based application with RBAC and MySQL/MongoDB persistence, and a standalone Vue SPA whose data is simulated locally. The principal Laravel flow runs from role-specific ticket actions through TicketService into ticket, thread, attachment, and activity records. The Vue flow routes users to dashboard, board, activity, user, and profile screens backed by a Pinia store. Laravel ticket and authentication sources were sampled; Vue behavior and other Laravel subsystems are represented from the README and tree, so uncertain internal wiring is omitted.

Main entry points: [`laravel/app/Services/TicketService.php`](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Services/TicketService.php) (Ticket service), [`laravel/routes/web.php`](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/routes/web.php) (Web routes), [`vue/src/router/index.js`](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/router/index.js) (Route selection), [`laravel/app/Models/TicketThread.php`](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/TicketThread.php) (Ticket threads)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_laravel_web["Laravel Web"]
  node_web_routes["Web routes<br/>[web.php]"]
  node_auth["Authentication<br/>[AuthController.php]"]
  node_dashboard["Role dashboards"]
  node_access_control["RBAC middleware"]
  node_admin_ops["Admin management<br/>[UserController.php]"]
end

subgraph group_ticket_domain["Ticket Workflow"]
  node_user_tickets["User tickets"]
  node_employee_tickets["Employee tickets"]
  node_admin_tickets["Admin ticketing"]
  node_superadmin_tickets["Superadmin ticketing"]
  node_ticket_service["Ticket service<br/>[TicketService.php]"]
  node_attachments["Attachment delivery"]
  node_auto_close["Resolved-ticket closure"]
end

subgraph group_laravel_data["Laravel Data"]
  node_ticket_model["Ticket records<br/>[Ticket.php]"]
  node_identity_models["Users and access<br/>[User.php]"]
  node_thread_model["Ticket threads<br/>[TicketThread.php]"]
  node_activity_model["Activity history<br/>[ActivityLog.php]"]
  node_mysql[("MySQL")]
  node_mongodb[("MongoDB")]
end

subgraph group_vue_app["Standalone Vue SPA"]
  node_spa_entry["Vue entry<br/>[main.js]"]
  node_spa_app["App shell<br/>[App.vue]"]
  node_spa_router["Route selection<br/>[index.js]"]
  node_spa_layout["Dashboard layout"]
  node_spa_views["Ticket and admin views<br/>[BoardView.vue]"]
  node_spa_dashboard["Dashboard view<br/>[DashboardView.vue]"]
  node_spa_activity["Activity view"]
  node_spa_users["Users and profile<br/>[UsersView.vue]"]
  node_spa_store["Simulated ticket state<br/>[ticketStore.js]"]
end

node_visitor(("Web user"))
node_spa_user(("SPA user"))

node_visitor -->|"requests pages"| node_web_routes
node_web_routes -->|"dispatches auth"| node_auth
node_web_routes -->|"dispatches dashboard"| node_dashboard
node_web_routes -->|"dispatches tickets"| node_user_tickets
node_web_routes -->|"dispatches tickets"| node_employee_tickets
node_web_routes -->|"dispatches tickets"| node_admin_tickets
node_web_routes -->|"dispatches tickets"| node_superadmin_tickets
node_web_routes -->|"checks access"| node_access_control
node_auth -->|"reads and creates users"| node_identity_models
node_auth -->|"reads and writes"| node_mysql
node_dashboard -->|"queries summaries"| node_ticket_model
node_dashboard -->|"queries counts"| node_identity_models
node_admin_ops -->|"manages accounts"| node_identity_models
node_admin_ops -->|"reads and writes"| node_mysql
node_user_tickets -->|"invokes actions"| node_ticket_service
node_employee_tickets -->|"invokes actions"| node_ticket_service
node_admin_tickets -->|"invokes actions"| node_ticket_service
node_superadmin_tickets -->|"invokes actions"| node_ticket_service
node_user_tickets -->|"reads threads"| node_thread_model
node_user_tickets -->|"reads history"| node_activity_model
node_employee_tickets -->|"reads threads"| node_thread_model
node_employee_tickets -->|"reads history"| node_activity_model
node_admin_tickets -->|"reads threads"| node_thread_model
node_admin_tickets -->|"reads history"| node_activity_model
node_superadmin_tickets -->|"reads threads"| node_thread_model
node_superadmin_tickets -->|"reads history"| node_activity_model
node_ticket_service -->|"creates and updates"| node_ticket_model
node_ticket_service -->|"creates threads"| node_thread_model
node_ticket_service -->|"records actions"| node_activity_model
node_ticket_service -->|"checks assignees"| node_identity_models
node_ticket_model -->|"persists tickets"| node_mysql
node_identity_models -->|"persists identities"| node_mysql
node_thread_model -->|"persists conversations"| node_mongodb
node_activity_model -->|"persists history"| node_mongodb
node_attachments -.->|"stores uploads"| node_ticket_service
node_auto_close -.->|"updates resolved tickets"| node_ticket_model
node_spa_user -->|"opens application"| node_spa_entry
node_spa_entry -->|"installs router"| node_spa_router
node_spa_entry -->|"mounts application"| node_spa_app
node_spa_app -->|"renders route"| node_spa_router
node_spa_app -->|"wraps pages"| node_spa_layout
node_spa_router -->|"selects ticket views"| node_spa_views
node_spa_router -->|"selects dashboard"| node_spa_dashboard
node_spa_router -->|"selects activity"| node_spa_activity
node_spa_router -->|"selects user pages"| node_spa_users
node_spa_views -->|"reads and mutates state"| node_spa_store
node_spa_dashboard -->|"reads summaries"| node_spa_store
node_spa_activity -->|"reads activity"| node_spa_store

click node_web_routes "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/routes/web.php"
click node_auth "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/AuthController.php"
click node_dashboard "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/DashboardController.php"
click node_access_control "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Middleware/CheckPermission.php"
click node_admin_ops "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/SuperAdmin/UserController.php"
click node_user_tickets "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/User/TicketController.php"
click node_employee_tickets "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/Employee/TicketController.php"
click node_admin_tickets "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/Admin/TicketController.php"
click node_superadmin_tickets "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/SuperAdmin/TicketController.php"
click node_ticket_service "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Services/TicketService.php"
click node_attachments "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/AttachmentController.php"
click node_auto_close "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Console/Commands/AutoCloseResolvedTickets.php"
click node_ticket_model "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/Ticket.php"
click node_identity_models "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/User.php"
click node_thread_model "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/TicketThread.php"
click node_activity_model "https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/ActivityLog.php"
click node_spa_entry "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/main.js"
click node_spa_app "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/App.vue"
click node_spa_router "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/router/index.js"
click node_spa_layout "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/components/layout/AppDashboardLayout.vue"
click node_spa_views "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/views/BoardView.vue"
click node_spa_dashboard "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/views/DashboardView.vue"
click node_spa_activity "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/views/ActivityLogView.vue"
click node_spa_users "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/views/UsersView.vue"
click node_spa_store "https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/stores/ticketStore.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_web_routes,node_auth,node_dashboard,node_access_control,node_admin_ops,node_visitor,node_spa_user toneBlue
class node_user_tickets,node_employee_tickets,node_admin_tickets,node_superadmin_tickets,node_ticket_service,node_attachments,node_auto_close toneAmber
class node_ticket_model,node_identity_models,node_thread_model,node_activity_model,node_mysql,node_mongodb toneMint
class node_spa_entry,node_spa_app,node_spa_router,node_spa_layout,node_spa_views,node_spa_dashboard,node_spa_activity,node_spa_users,node_spa_store toneRose
```

## Components

### Laravel Web

- [Web routes](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/routes/web.php): `laravel/routes/web.php`
- [Authentication](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/AuthController.php): `laravel/app/Http/Controllers/Web/AuthController.php`
- [Role dashboards](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/DashboardController.php): `laravel/app/Http/Controllers/Web/DashboardController.php`
- [RBAC middleware](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Middleware/CheckPermission.php): `laravel/app/Http/Middleware/CheckPermission.php`
- [Admin management](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/SuperAdmin/UserController.php): `laravel/app/Http/Controllers/Web/SuperAdmin/UserController.php`

### Ticket Workflow

- [User tickets](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/User/TicketController.php): `laravel/app/Http/Controllers/Web/User/TicketController.php`
- [Employee tickets](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/Employee/TicketController.php): `laravel/app/Http/Controllers/Web/Employee/TicketController.php`
- [Admin ticketing](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/Admin/TicketController.php): `laravel/app/Http/Controllers/Web/Admin/TicketController.php`
- [Superadmin ticketing](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/SuperAdmin/TicketController.php): `laravel/app/Http/Controllers/Web/SuperAdmin/TicketController.php`
- [Ticket service](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Services/TicketService.php): `laravel/app/Services/TicketService.php`
- [Attachment delivery](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Http/Controllers/Web/AttachmentController.php): `laravel/app/Http/Controllers/Web/AttachmentController.php`
- [Resolved-ticket closure](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Console/Commands/AutoCloseResolvedTickets.php): `laravel/app/Console/Commands/AutoCloseResolvedTickets.php`

### Laravel Data

- [Ticket records](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/Ticket.php): `laravel/app/Models/Ticket.php`
- [Users and access](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/User.php): `laravel/app/Models/User.php`
- [Ticket threads](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/TicketThread.php): `laravel/app/Models/TicketThread.php`
- [Activity history](https://github.com/nayyyr/celoe_webdev/blob/main/laravel/app/Models/ActivityLog.php): `laravel/app/Models/ActivityLog.php`
- **MySQL**
- **MongoDB**

### Standalone Vue SPA

- [Vue entry](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/main.js): `vue/src/main.js`
- [App shell](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/App.vue): `vue/src/App.vue`
- [Route selection](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/router/index.js): `vue/src/router/index.js`
- [Dashboard layout](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/components/layout/AppDashboardLayout.vue): `vue/src/components/layout/AppDashboardLayout.vue`
- [Ticket and admin views](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/views/BoardView.vue): `vue/src/views/BoardView.vue`
- [Dashboard view](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/views/DashboardView.vue): `vue/src/views/DashboardView.vue`
- [Activity view](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/views/ActivityLogView.vue): `vue/src/views/ActivityLogView.vue`
- [Users and profile](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/views/UsersView.vue): `vue/src/views/UsersView.vue`
- [Simulated ticket state](https://github.com/nayyyr/celoe_webdev/blob/main/vue/src/stores/ticketStore.js): `vue/src/stores/ticketStore.js`

### Other components

- **Web user**
- **SPA user**

## Connections

- Web user → Web routes: requests pages
- Web routes → Authentication: dispatches auth
- Web routes → Role dashboards: dispatches dashboard
- Web routes → User tickets: dispatches tickets
- Web routes → Employee tickets: dispatches tickets
- Web routes → Admin ticketing: dispatches tickets
- Web routes → Superadmin ticketing: dispatches tickets
- Web routes → RBAC middleware: checks access
- Authentication → Users and access: reads and creates users
- Authentication → MySQL: reads and writes
- Role dashboards → Ticket records: queries summaries
- Role dashboards → Users and access: queries counts
- Admin management → Users and access: manages accounts
- Admin management → MySQL: reads and writes
- User tickets → Ticket service: invokes actions
- Employee tickets → Ticket service: invokes actions
- Admin ticketing → Ticket service: invokes actions
- Superadmin ticketing → Ticket service: invokes actions
- User tickets → Ticket threads: reads threads
- User tickets → Activity history: reads history
- Employee tickets → Ticket threads: reads threads
- Employee tickets → Activity history: reads history
- Admin ticketing → Ticket threads: reads threads
- Admin ticketing → Activity history: reads history
- Superadmin ticketing → Ticket threads: reads threads
- Superadmin ticketing → Activity history: reads history
- Ticket service → Ticket records: creates and updates
- Ticket service → Ticket threads: creates threads
- Ticket service → Activity history: records actions
- Ticket service → Users and access: checks assignees
- Ticket records → MySQL: persists tickets
- Users and access → MySQL: persists identities
- Ticket threads → MongoDB: persists conversations
- Activity history → MongoDB: persists history
- Attachment delivery → Ticket service: stores uploads
- Resolved-ticket closure → Ticket records: updates resolved tickets
- SPA user → Vue entry: opens application
- Vue entry → Route selection: installs router
- Vue entry → App shell: mounts application
- App shell → Route selection: renders route
- App shell → Dashboard layout: wraps pages
- Route selection → Ticket and admin views: selects ticket views
- Route selection → Dashboard view: selects dashboard
- Route selection → Activity view: selects activity
- Route selection → Users and profile: selects user pages
- Ticket and admin views → Simulated ticket state: reads and mutates state
- Dashboard view → Simulated ticket state: reads summaries
- Activity view → Simulated ticket state: reads activity
