# yuijin01/raflora-system architecture

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

- Interactive diagram: https://gitdiagram.com/yuijin01/raflora-system
- Repository: https://github.com/yuijin01/raflora-system

## Overview

Raflora appears to be an event-floristry booking and operations application: clients or guests request event designs, receive quotations, and proceed through payment and event fulfillment. Staff track event work and returns; administrators manage bookings, inventory, quotations, and reporting. The README is the stock Laravel introduction rather than product documentation, so capabilities and relationships here are grounded in the file tree and sampled controller/service excerpts; unsampled feature wiring is kept conservative.

Main entry points: [`app/Models/Booking.php`](https://github.com/yuijin01/raflora-system/blob/main/app/Models/Booking.php) (Booking records), [`app/Http/Controllers/BookingController.php`](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/BookingController.php) (Client bookings), [`app/Http/Controllers/GuestBookingController.php`](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/GuestBookingController.php) (Guest bookings), [`app/Http/Controllers/Admin/BookingController.php`](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Admin/BookingController.php) (Booking administration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_booking["Booking workflow"]
  node_client_booking["Client bookings"]
  node_guest_booking["Guest bookings"]
  node_claim_booking["Claim guest booking"]
  node_booking_views["Booking screens"]
  node_guest_views["Guest screens"]
  node_quotation["Quotation issuance"]
  node_pricing["Quotation pricing"]
  node_booking_data[("Booking records<br/>[Booking.php]")]
end

subgraph group_operations["Event operations"]
  node_admin_booking["Booking administration"]
  node_inventory["Inventory management"]
  node_staff_events["Event fulfillment"]
  node_returns["Asset return tracking"]
  node_operations_views["Operations screens"]
  node_staff_views["Staff screens"]
  node_inventory_data[("Inventory records<br/>[InventoryItem.php]")]
end

subgraph group_identity["Identity and access"]
  node_auth["Authentication<br/>[AuthController.php]"]
  node_device_verify["Device verification"]
  node_email_verify["Email verification"]
  node_users_data[("User records<br/>[User.php]")]
end

subgraph group_internal["Application services"]
  node_ai_vision["Design image analysis"]
  node_otp["OTP service<br/>[OtpService.php]"]
  node_mailer["Email delivery"]
end

node_client(("Client"))
node_guest(("Guest"))
node_admin(("Administrator"))
node_staff(("Event staff"))
node_gemini{{"Gemini AI"}}
node_database[("Application database")]

node_client -->|"requests booking"| node_client_booking
node_guest -->|"requests booking"| node_guest_booking
node_client -->|"signs in"| node_auth
node_admin -->|"signs in"| node_auth
node_staff -->|"signs in"| node_auth
node_client_booking -->|"renders"| node_booking_views
node_guest_booking -->|"renders"| node_guest_views
node_client_booking -.->|"analyzes image"| node_ai_vision
node_guest_booking -.->|"analyzes image"| node_ai_vision
node_ai_vision -.->|"sends image"| node_gemini
node_client_booking -->|"calculates quote"| node_pricing
node_guest_booking -->|"calculates quote"| node_pricing
node_client_booking -->|"creates booking"| node_booking_data
node_guest_booking -->|"creates booking"| node_booking_data
node_claim_booking -->|"claims booking"| node_booking_data
node_client -->|"claims request"| node_claim_booking
node_admin -->|"manages bookings"| node_admin_booking
node_admin_booking -->|"issues quotation"| node_quotation
node_admin_booking -->|"renders"| node_operations_views
node_admin_booking -->|"reads and updates"| node_booking_data
node_admin -->|"manages stock"| node_inventory
node_inventory -->|"updates stock"| node_inventory_data
node_staff -->|"records event work"| node_staff_events
node_staff_events -->|"adjusts stock"| node_inventory_data
node_staff_events -->|"reads booking"| node_booking_data
node_staff_events -->|"renders"| node_staff_views
node_admin -->|"tracks returns"| node_returns
node_returns -->|"renders"| node_operations_views
node_auth -->|"authenticates"| node_users_data
node_device_verify -->|"verifies code"| node_otp
node_email_verify -->|"verifies code"| node_otp
node_otp -->|"sends code"| node_mailer
node_device_verify -->|"loads user"| node_users_data
node_email_verify -->|"loads user"| node_users_data
node_booking_data -->|"persists"| node_database
node_inventory_data -->|"persists"| node_database
node_users_data -->|"persists"| node_database

click node_client_booking "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/BookingController.php"
click node_guest_booking "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/GuestBookingController.php"
click node_claim_booking "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Client/ClaimGuestBookingController.php"
click node_booking_views "https://github.com/yuijin01/raflora-system/tree/main/resources/views/client"
click node_guest_views "https://github.com/yuijin01/raflora-system/tree/main/resources/views/guest"
click node_quotation "https://github.com/yuijin01/raflora-system/blob/main/app/Services/QuotationIssuanceService.php"
click node_pricing "https://github.com/yuijin01/raflora-system/blob/main/app/Services/QuotationPricingService.php"
click node_booking_data "https://github.com/yuijin01/raflora-system/blob/main/app/Models/Booking.php"
click node_ai_vision "https://github.com/yuijin01/raflora-system/blob/main/app/Services/GeminiVisionService.php"
click node_admin_booking "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Admin/BookingController.php"
click node_inventory "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Admin/InventoryController.php"
click node_staff_events "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Staff/EventController.php"
click node_returns "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Admin/ReturnTrackingController.php"
click node_operations_views "https://github.com/yuijin01/raflora-system/tree/main/resources/views/admin"
click node_staff_views "https://github.com/yuijin01/raflora-system/tree/main/resources/views/staff"
click node_inventory_data "https://github.com/yuijin01/raflora-system/blob/main/app/Models/InventoryItem.php"
click node_auth "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/AuthController.php"
click node_device_verify "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Auth/DeviceVerificationController.php"
click node_email_verify "https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Auth/EmailVerificationController.php"
click node_otp "https://github.com/yuijin01/raflora-system/blob/main/app/Services/OtpService.php"
click node_mailer "https://github.com/yuijin01/raflora-system/blob/main/app/Services/PhpMailerService.php"
click node_users_data "https://github.com/yuijin01/raflora-system/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_client_booking,node_guest_booking,node_claim_booking,node_booking_views,node_guest_views,node_quotation,node_pricing,node_booking_data,node_client toneBlue
class node_admin_booking,node_inventory,node_staff_events,node_returns,node_operations_views,node_staff_views,node_inventory_data,node_database toneAmber
class node_auth,node_device_verify,node_email_verify,node_users_data toneMint
class node_ai_vision,node_otp,node_mailer toneRose
class node_guest,node_admin,node_staff,node_gemini toneIndigo
```

## Components

### Booking workflow

- [Client bookings](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/BookingController.php): `app/Http/Controllers/BookingController.php`
- [Guest bookings](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/GuestBookingController.php): `app/Http/Controllers/GuestBookingController.php`
- [Claim guest booking](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Client/ClaimGuestBookingController.php): `app/Http/Controllers/Client/ClaimGuestBookingController.php`
- [Booking screens](https://github.com/yuijin01/raflora-system/tree/main/resources/views/client): `resources/views/client`
- [Guest screens](https://github.com/yuijin01/raflora-system/tree/main/resources/views/guest): `resources/views/guest`
- [Quotation issuance](https://github.com/yuijin01/raflora-system/blob/main/app/Services/QuotationIssuanceService.php): `app/Services/QuotationIssuanceService.php`
- [Quotation pricing](https://github.com/yuijin01/raflora-system/blob/main/app/Services/QuotationPricingService.php): `app/Services/QuotationPricingService.php`
- [Booking records](https://github.com/yuijin01/raflora-system/blob/main/app/Models/Booking.php): `app/Models/Booking.php`

### Event operations

- [Booking administration](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Admin/BookingController.php): `app/Http/Controllers/Admin/BookingController.php`
- [Inventory management](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Admin/InventoryController.php): `app/Http/Controllers/Admin/InventoryController.php`
- [Event fulfillment](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Staff/EventController.php): `app/Http/Controllers/Staff/EventController.php`
- [Asset return tracking](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Admin/ReturnTrackingController.php): `app/Http/Controllers/Admin/ReturnTrackingController.php`
- [Operations screens](https://github.com/yuijin01/raflora-system/tree/main/resources/views/admin): `resources/views/admin`
- [Staff screens](https://github.com/yuijin01/raflora-system/tree/main/resources/views/staff): `resources/views/staff`
- [Inventory records](https://github.com/yuijin01/raflora-system/blob/main/app/Models/InventoryItem.php): `app/Models/InventoryItem.php`

### Identity and access

- [Authentication](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/AuthController.php): `app/Http/Controllers/AuthController.php`
- [Device verification](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Auth/DeviceVerificationController.php): `app/Http/Controllers/Auth/DeviceVerificationController.php`
- [Email verification](https://github.com/yuijin01/raflora-system/blob/main/app/Http/Controllers/Auth/EmailVerificationController.php): `app/Http/Controllers/Auth/EmailVerificationController.php`
- [User records](https://github.com/yuijin01/raflora-system/blob/main/app/Models/User.php): `app/Models/User.php`

### Application services

- [Design image analysis](https://github.com/yuijin01/raflora-system/blob/main/app/Services/GeminiVisionService.php): `app/Services/GeminiVisionService.php`
- [OTP service](https://github.com/yuijin01/raflora-system/blob/main/app/Services/OtpService.php): `app/Services/OtpService.php`
- [Email delivery](https://github.com/yuijin01/raflora-system/blob/main/app/Services/PhpMailerService.php): `app/Services/PhpMailerService.php`

### Other components

- **Client**
- **Guest**
- **Administrator**
- **Event staff**
- **Gemini AI**
- **Application database**

## Connections

- Client → Client bookings: requests booking
- Guest → Guest bookings: requests booking
- Client → Authentication: signs in
- Administrator → Authentication: signs in
- Event staff → Authentication: signs in
- Client bookings → Booking screens: renders
- Guest bookings → Guest screens: renders
- Client bookings → Design image analysis: analyzes image
- Guest bookings → Design image analysis: analyzes image
- Design image analysis → Gemini AI: sends image
- Client bookings → Quotation pricing: calculates quote
- Guest bookings → Quotation pricing: calculates quote
- Client bookings → Booking records: creates booking
- Guest bookings → Booking records: creates booking
- Claim guest booking → Booking records: claims booking
- Client → Claim guest booking: claims request
- Administrator → Booking administration: manages bookings
- Booking administration → Quotation issuance: issues quotation
- Booking administration → Operations screens: renders
- Booking administration → Booking records: reads and updates
- Administrator → Inventory management: manages stock
- Inventory management → Inventory records: updates stock
- Event staff → Event fulfillment: records event work
- Event fulfillment → Inventory records: adjusts stock
- Event fulfillment → Booking records: reads booking
- Event fulfillment → Staff screens: renders
- Administrator → Asset return tracking: tracks returns
- Asset return tracking → Operations screens: renders
- Authentication → User records: authenticates
- Device verification → OTP service: verifies code
- Email verification → OTP service: verifies code
- OTP service → Email delivery: sends code
- Device verification → User records: loads user
- Email verification → User records: loads user
- Booking records → Application database: persists
- Inventory records → Application database: persists
- User records → Application database: persists
