# ty202502125-cyber/pri_mech-rlm architecture

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

- Interactive diagram: https://gitdiagram.com/ty202502125-cyber/pri_mech-rlm
- Repository: https://github.com/ty202502125-cyber/pri_mech-rlm

## Overview

Spoke & Wrench is a bicycle-service booking and workshop-management application: customers discover services, authenticate, manage bicycles, request individual or grouped appointments, submit payments, and follow repairs; mechanics administer schedules, bookings, repairs, and content. The React app calls a Laravel API backed by the existing MySQL database, with Sanctum sessions. The graph retains the documented payment, photo, notification, and admin capabilities. Some frontend pages and backend controllers were not sampled, so their internal interactions are not inferred.

Main entry points: [`BACKEND/routes/api.php`](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/routes/api.php) (API routing), [`BACKEND/app/Http/Controllers/Api/BookingController.php`](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/BookingController.php) (Booking requests), [`FRONTEND/src/services/api.js`](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/services/api.js) (API client), [`BACKEND/app/Http/Controllers/Api/AdminController.php`](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/AdminController.php) (Admin scheduling)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_customer_ui["Customer experience"]
  node_app["React application<br/>[App.jsx]"]
  node_service_list["Service catalogue<br/>[ServiceList.jsx]"]
  node_booking_ui["Booking and account"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_workshop_ui["Workshop interface"]
  node_repair_ui["Repair workspace"]
end

subgraph group_api["Laravel API"]
  node_api_routes["API routing<br/>[api.php]"]
  node_auth["Authentication<br/>[AuthController.php]"]
  node_customer_profile["Customer profiles"]
  node_services["Service and availability reads"]
  node_public_content["Public content"]
  node_notifications["Notifications"]
  node_user_model["User and roles<br/>[User.php]"]
end

subgraph group_booking["Booking operations"]
  node_bookings["Booking requests"]
  node_availability["Availability rules"]
  node_workflow["Booking workflow"]
  node_payments["Payment verification"]
end

subgraph group_workshop["Workshop operations"]
  node_repairs["Repair management"]
  node_photos["Booking photos"]
  node_private_files["Private file access"]
  node_admin_ops["Admin scheduling"]
  node_admin_content["Admin content"]
end

node_customer(("Customer"))
node_workshop_staff(("Mechanic / admin"))
node_mysql[("MySQL database")]

node_customer -->|"uses"| node_app
node_workshop_staff -->|"uses"| node_app
node_service_list -->|"requests services"| node_api_client
node_booking_ui -.->|"uses API"| node_api_client
node_repair_ui -->|"uses API"| node_api_client
node_api_client -->|"sends API requests"| node_api_routes
node_api_routes -->|"routes to"| node_auth
node_api_routes -->|"routes to"| node_customer_profile
node_api_routes -->|"routes to"| node_services
node_api_routes -->|"routes to"| node_bookings
node_api_routes -->|"routes to"| node_payments
node_api_routes -->|"routes to"| node_repairs
node_api_routes -->|"routes to"| node_photos
node_api_routes -->|"routes to"| node_admin_ops
node_api_routes -->|"routes to"| node_admin_content
node_api_routes -->|"routes to"| node_public_content
node_api_routes -->|"routes to"| node_notifications
node_bookings -->|"checks slots"| node_availability
node_bookings -->|"sends notifications"| node_workflow
node_admin_ops -->|"checks closures"| node_availability
node_services -.->|"reads schedules"| node_mysql
node_availability -->|"reads capacity data"| node_mysql
node_admin_ops -->|"reads and writes"| node_mysql
node_bookings -->|"writes bookings"| node_mysql
node_auth -->|"uses user"| node_user_model
node_payments -.->|"manages proof files"| node_private_files
node_photos -->|"uses file service"| node_private_files

click node_app "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/App.jsx"
click node_service_list "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/components/ServiceList.jsx"
click node_booking_ui "https://github.com/ty202502125-cyber/pri_mech-rlm/tree/main/FRONTEND/src/pages"
click node_repair_ui "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/components/RepairWorkspace.jsx"
click node_api_client "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/services/api.js"
click node_api_routes "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/routes/api.php"
click node_auth "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/AuthController.php"
click node_customer_profile "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/CustomerController.php"
click node_services "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/ServiceController.php"
click node_bookings "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/BookingController.php"
click node_availability "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Services/AvailabilityService.php"
click node_workflow "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Services/BookingWorkflowService.php"
click node_payments "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/PaymentController.php"
click node_repairs "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/RepairController.php"
click node_photos "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/BookingPhotoController.php"
click node_private_files "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Services/PrivateFileService.php"
click node_admin_ops "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/AdminController.php"
click node_admin_content "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/AdminContentController.php"
click node_public_content "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/PublicContentController.php"
click node_notifications "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/NotificationController.php"
click node_user_model "https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/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_app,node_service_list,node_booking_ui,node_api_client toneBlue
class node_repair_ui,node_mysql toneAmber
class node_api_routes,node_auth,node_customer_profile,node_services,node_public_content,node_notifications,node_user_model toneMint
class node_bookings,node_availability,node_workflow,node_payments toneRose
class node_repairs,node_photos,node_private_files,node_admin_ops,node_admin_content,node_customer,node_workshop_staff toneIndigo
```

## Components

### Customer experience

- [React application](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/App.jsx): `FRONTEND/src/App.jsx`
- [Service catalogue](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/components/ServiceList.jsx): `FRONTEND/src/components/ServiceList.jsx`
- [Booking and account](https://github.com/ty202502125-cyber/pri_mech-rlm/tree/main/FRONTEND/src/pages): `FRONTEND/src/pages`
- [API client](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/services/api.js): `FRONTEND/src/services/api.js`

### Workshop interface

- [Repair workspace](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/FRONTEND/src/components/RepairWorkspace.jsx): `FRONTEND/src/components/RepairWorkspace.jsx`

### Laravel API

- [API routing](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/routes/api.php): `BACKEND/routes/api.php`
- [Authentication](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/AuthController.php): `BACKEND/app/Http/Controllers/Api/AuthController.php`
- [Customer profiles](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/CustomerController.php): `BACKEND/app/Http/Controllers/Api/CustomerController.php`
- [Service and availability reads](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/ServiceController.php): `BACKEND/app/Http/Controllers/Api/ServiceController.php`
- [Public content](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/PublicContentController.php): `BACKEND/app/Http/Controllers/Api/PublicContentController.php`
- [Notifications](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/NotificationController.php): `BACKEND/app/Http/Controllers/Api/NotificationController.php`
- [User and roles](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Models/User.php): `BACKEND/app/Models/User.php`

### Booking operations

- [Booking requests](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/BookingController.php): `BACKEND/app/Http/Controllers/Api/BookingController.php`
- [Availability rules](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Services/AvailabilityService.php): `BACKEND/app/Services/AvailabilityService.php`
- [Booking workflow](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Services/BookingWorkflowService.php): `BACKEND/app/Services/BookingWorkflowService.php`
- [Payment verification](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/PaymentController.php): `BACKEND/app/Http/Controllers/Api/PaymentController.php`

### Workshop operations

- [Repair management](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/RepairController.php): `BACKEND/app/Http/Controllers/Api/RepairController.php`
- [Booking photos](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/BookingPhotoController.php): `BACKEND/app/Http/Controllers/Api/BookingPhotoController.php`
- [Private file access](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Services/PrivateFileService.php): `BACKEND/app/Services/PrivateFileService.php`
- [Admin scheduling](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/AdminController.php): `BACKEND/app/Http/Controllers/Api/AdminController.php`
- [Admin content](https://github.com/ty202502125-cyber/pri_mech-rlm/blob/main/BACKEND/app/Http/Controllers/Api/AdminContentController.php): `BACKEND/app/Http/Controllers/Api/AdminContentController.php`

### Other components

- **Customer**
- **Mechanic / admin**
- **MySQL database**

## Connections

- Customer → React application: uses (evidence: `README.md`)
- Mechanic / admin → React application: uses (evidence: `README.md`)
- Service catalogue → API client: requests services (evidence: `FRONTEND/src/components/ServiceList.jsx`)
- Booking and account → API client: uses API (evidence: `FRONTEND/src/pages/AuthPage.jsx`)
- Repair workspace → API client: uses API (evidence: `FRONTEND/src/components/RepairWorkspace.jsx`)
- API client → API routing: sends API requests (evidence: `README.md`)
- API routing → Authentication: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Customer profiles: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Service and availability reads: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Booking requests: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Payment verification: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Repair management: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Booking photos: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Admin scheduling: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Admin content: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Public content: routes to (evidence: `BACKEND/routes/api.php`)
- API routing → Notifications: routes to (evidence: `BACKEND/routes/api.php`)
- Booking requests → Availability rules: checks slots (evidence: `BACKEND/app/Http/Controllers/Api/BookingController.php`)
- Booking requests → Booking workflow: sends notifications (evidence: `BACKEND/app/Http/Controllers/Api/BookingController.php`)
- Admin scheduling → Availability rules: checks closures (evidence: `BACKEND/app/Http/Controllers/Api/AdminController.php`)
- Service and availability reads → MySQL database: reads schedules
- Availability rules → MySQL database: reads capacity data (evidence: `BACKEND/app/Services/AvailabilityService.php`)
- Admin scheduling → MySQL database: reads and writes (evidence: `BACKEND/app/Http/Controllers/Api/AdminController.php`)
- Booking requests → MySQL database: writes bookings (evidence: `BACKEND/app/Http/Controllers/Api/BookingController.php`)
- Authentication → User and roles: uses user (evidence: `BACKEND/app/Http/Controllers/Api/AuthController.php`)
- Payment verification → Private file access: manages proof files (evidence: `BACKEND/app/Http/Controllers/Api/PaymentController.php`)
- Booking photos → Private file access: uses file service (evidence: `BACKEND/app/Http/Controllers/Api/BookingPhotoController.php`)
