# vroa74/laravel-tools-ai architecture

> Architecture diagram of the GitHub repository vroa74/laravel-tools-ai, 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/vroa74/laravel-tools-ai
- Repository: https://github.com/vroa74/laravel-tools-ai

## Overview

Tools AI is a private, single-administrator catalog for AI resources. The main workflow is to sign in, browse or search the catalog, inspect a resource, and optionally produce a private PDF with a QR code; the administrator also manages categories, platforms, and resources through MoonShine. The graph preserves these documented stages and the resource validation/model layer. Some routing and Livewire implementation files were not sampled, so those relationships are documented or left unverified rather than inferred from imports alone.

Main entry points: [`app/Models/Resource.php`](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/Resource.php) (Resource model), [`resources/views/livewire/admin-dashboard.blade.php`](https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/livewire/admin-dashboard.blade.php) (Admin screens), [`app/MoonShine/Resources/ResourceResource.php`](https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Resources/ResourceResource.php) (Resource CRUD), [`app/Services/ResourcePdf.php`](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Services/ResourcePdf.php) (PDF and QR)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and privacy"]
  node_login["Sign-in<br/>[AuthController.php]"]
  node_privacy["Private responses"]
  node_admin_guard["Admin guard"]
end

subgraph group_catalog["Catalog experience"]
  node_catalog_ui["Catalog browser"]
  node_resource_view["Resource detail"]
end

subgraph group_management["Administration"]
  node_admin_ui["Admin screens"]
  node_resource_admin["Resource CRUD"]
  node_resource_form["Resource form"]
  node_category_admin["Category CRUD"]
  node_platform_admin["Platform CRUD"]
end

subgraph group_domain["Resource domain"]
  node_resource["Resource model<br/>[Resource.php]"]
  node_resource_types["Resource types<br/>[ResourceType.php]"]
  node_validation["Resource rules<br/>[ResourceRules.php]"]
  node_category["Category model<br/>[Category.php]"]
  node_platform["Platform model<br/>[AiPlatform.php]"]
  node_user["Admin identity<br/>[User.php]"]
end

subgraph group_outputs["Resource export"]
  node_pdf_controller["PDF endpoint"]
  node_pdf_service["PDF and QR<br/>[ResourcePdf.php]"]
  node_pdf_template["PDF template<br/>[resource.blade.php]"]
end

node_admin(("Administrator"))

node_admin -.->|"signs in"| node_login
node_admin -.->|"browses"| node_catalog_ui
node_catalog_ui -.->|"reads catalog"| node_resource
node_admin -.->|"opens resource"| node_resource_view
node_admin -.->|"manages catalog"| node_admin_ui
node_admin_ui -.->|"opens CRUD"| node_resource_admin
node_resource_admin -->|"manages"| node_resource
node_resource_admin -->|"uses form"| node_resource_form
node_admin_ui -.->|"manages categories"| node_category_admin
node_category_admin -->|"manages"| node_category
node_admin_ui -.->|"manages platforms"| node_platform_admin
node_platform_admin -->|"manages"| node_platform
node_resource -->|"validates with"| node_validation
node_resource -->|"casts type"| node_resource_types
node_resource -->|"belongs to"| node_category
node_resource -->|"associates platforms"| node_platform
node_user -->|"owns resources"| node_resource
node_admin -.->|"requests PDF"| node_pdf_controller
node_pdf_controller -->|"generates"| node_pdf_service
node_pdf_service -->|"loads resource"| node_resource
node_pdf_service -.->|"renders"| node_pdf_template
node_admin_guard -.->|"checks identity"| node_user
node_admin -.->|"uses private session"| node_privacy

click node_login "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Http/Controllers/AuthController.php"
click node_privacy "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Http/Middleware/PrivateResponse.php"
click node_admin_guard "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Http/Middleware/EnsurePersonalAdmin.php"
click node_catalog_ui "https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/livewire/resource-catalog.blade.php"
click node_resource_view "https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/livewire/resource-show.blade.php"
click node_admin_ui "https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/livewire/admin-dashboard.blade.php"
click node_resource_admin "https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Resources/ResourceResource.php"
click node_resource_form "https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Pages/ResourceFormPage.php"
click node_category_admin "https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Resources/CategoryResource.php"
click node_platform_admin "https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Resources/AiPlatformResource.php"
click node_resource "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/Resource.php"
click node_resource_types "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Enums/ResourceType.php"
click node_validation "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Support/ResourceRules.php"
click node_category "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/Category.php"
click node_platform "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/AiPlatform.php"
click node_user "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/User.php"
click node_pdf_controller "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Http/Controllers/ResourcePdfController.php"
click node_pdf_service "https://github.com/vroa74/laravel-tools-ai/blob/main/app/Services/ResourcePdf.php"
click node_pdf_template "https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/pdf/resource.blade.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_login,node_privacy,node_admin_guard toneBlue
class node_catalog_ui,node_resource_view toneAmber
class node_admin_ui,node_resource_admin,node_resource_form,node_category_admin,node_platform_admin toneMint
class node_resource,node_resource_types,node_validation,node_category,node_platform,node_user toneRose
class node_pdf_controller,node_pdf_service,node_pdf_template,node_admin toneIndigo
```

## Components

### Access and privacy

- [Sign-in](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Http/Controllers/AuthController.php): `app/Http/Controllers/AuthController.php`
- [Private responses](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Http/Middleware/PrivateResponse.php): `app/Http/Middleware/PrivateResponse.php`
- [Admin guard](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Http/Middleware/EnsurePersonalAdmin.php): `app/Http/Middleware/EnsurePersonalAdmin.php`

### Catalog experience

- [Catalog browser](https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/livewire/resource-catalog.blade.php): `resources/views/livewire/resource-catalog.blade.php`
- [Resource detail](https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/livewire/resource-show.blade.php): `resources/views/livewire/resource-show.blade.php`

### Administration

- [Admin screens](https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/livewire/admin-dashboard.blade.php): `resources/views/livewire/admin-dashboard.blade.php`
- [Resource CRUD](https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Resources/ResourceResource.php): `app/MoonShine/Resources/ResourceResource.php`
- [Resource form](https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Pages/ResourceFormPage.php): `app/MoonShine/Pages/ResourceFormPage.php`
- [Category CRUD](https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Resources/CategoryResource.php): `app/MoonShine/Resources/CategoryResource.php`
- [Platform CRUD](https://github.com/vroa74/laravel-tools-ai/blob/main/app/MoonShine/Resources/AiPlatformResource.php): `app/MoonShine/Resources/AiPlatformResource.php`

### Resource domain

- [Resource model](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/Resource.php): `app/Models/Resource.php`
- [Resource types](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Enums/ResourceType.php): `app/Enums/ResourceType.php`
- [Resource rules](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Support/ResourceRules.php): `app/Support/ResourceRules.php`
- [Category model](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/Category.php): `app/Models/Category.php`
- [Platform model](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/AiPlatform.php): `app/Models/AiPlatform.php`
- [Admin identity](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Models/User.php): `app/Models/User.php`

### Resource export

- [PDF endpoint](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Http/Controllers/ResourcePdfController.php): `app/Http/Controllers/ResourcePdfController.php`
- [PDF and QR](https://github.com/vroa74/laravel-tools-ai/blob/main/app/Services/ResourcePdf.php): `app/Services/ResourcePdf.php`
- [PDF template](https://github.com/vroa74/laravel-tools-ai/blob/main/resources/views/pdf/resource.blade.php): `resources/views/pdf/resource.blade.php`

### Other components

- **Administrator**

## Connections

- Administrator → Sign-in: signs in
- Administrator → Catalog browser: browses
- Catalog browser → Resource model: reads catalog (evidence: `resources/views/livewire/resource-catalog.blade.php`)
- Administrator → Resource detail: opens resource
- Administrator → Admin screens: manages catalog
- Admin screens → Resource CRUD: opens CRUD
- Resource CRUD → Resource model: manages (evidence: `app/MoonShine/Resources/ResourceResource.php`)
- Resource CRUD → Resource form: uses form (evidence: `app/MoonShine/Resources/ResourceResource.php`)
- Admin screens → Category CRUD: manages categories
- Category CRUD → Category model: manages (evidence: `app/MoonShine/Resources/CategoryResource.php`)
- Admin screens → Platform CRUD: manages platforms
- Platform CRUD → Platform model: manages (evidence: `app/MoonShine/Resources/AiPlatformResource.php`)
- Resource model → Resource rules: validates with (evidence: `app/Models/Resource.php`)
- Resource model → Resource types: casts type (evidence: `app/Models/Resource.php`)
- Resource model → Category model: belongs to (evidence: `app/Models/Resource.php`)
- Resource model → Platform model: associates platforms (evidence: `app/Models/Resource.php`)
- Admin identity → Resource model: owns resources (evidence: `app/Models/User.php`)
- Administrator → PDF endpoint: requests PDF
- PDF endpoint → PDF and QR: generates (evidence: `app/Http/Controllers/ResourcePdfController.php`)
- PDF and QR → Resource model: loads resource (evidence: `app/Services/ResourcePdf.php`)
- PDF and QR → PDF template: renders
- Admin guard → Admin identity: checks identity
- Administrator → Private responses: uses private session
