# tatogi/foodies-cms architecture

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

- Interactive diagram: https://gitdiagram.com/tatogi/foodies-cms
- Repository: https://github.com/tatogi/foodies-cms

## Overview

This is a Laravel commerce and content-management application: administrators maintain localized pages, posts, menus, media, products, and orders; website visitors discover content and products, manage carts, and complete checkout. It also exposes POS device/menu synchronization and AI chat/content capabilities. The sampled sources and README support the checkout, media, menu, chat, and POS links shown; other documented or tree-visible subsystems are included, but their internal calls are left unasserted where source was not sampled.

Main entry points: [`app/Services/Payments/CheckoutService.php`](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Payments/CheckoutService.php) (Payment flow), [`app/Http/Controllers/Checkout/CheckoutController.php`](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Checkout/CheckoutController.php) (Checkout entry), [`app/Services/Website/WebsiteCartService.php`](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Website/WebsiteCartService.php) (Shopping cart), [`app/Http/Controllers/Website/PageController.php`](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Website/PageController.php) (Website pages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Website experience"]
  node_website["Website pages<br/>[PageController.php]"]
  node_content_read["Content queries"]
  node_menu_read["Menu queries"]
  node_search["Website search"]
end

subgraph group_commerce["Commerce and POS"]
  node_cart["Shopping cart"]
  node_checkout_entry["Checkout entry"]
  node_payments["Payment flow"]
  node_orders["Order management"]
  node_pos_api["POS endpoints"]
  node_pos_sync["POS menu sync"]
end

subgraph group_cms["Content management"]
  node_admin["CMS administration<br/>[PageController.php]"]
  node_page_service["Page workflows<br/>[PageService.php]"]
  node_menu_admin["Menu editing<br/>[MenuController.php]"]
  node_slug_sync["Menu slug sync"]
  node_media_admin["Media library"]
  node_media_upload["Media uploads"]
end

subgraph group_platform["Shared capabilities"]
  node_ai_chat["AI chat endpoint"]
  node_chat_service["Chat service<br/>[ChatService.php]"]
  node_embeddings["Text embeddings"]
  node_contact["Contact submissions"]
  node_whatsapp["WhatsApp notifications"]
  node_database[("Application database")]
end

node_visitor(("Visitor"))
node_bog{{"BOG gateway"}}
node_gemini{{"Gemini embedding API"}}

node_visitor -->|"requests pages"| node_website
node_website -.->|"queries content"| node_content_read
node_visitor -.->|"requests navigation"| node_menu_read
node_visitor -.->|"searches catalog"| node_search
node_visitor -.->|"adds items"| node_cart
node_visitor -->|"starts checkout"| node_checkout_entry
node_checkout_entry -->|"reads cart"| node_cart
node_checkout_entry -->|"starts payment"| node_payments
node_payments -->|"redirects / callback"| node_bog
node_payments -.->|"records outcome"| node_orders
node_pos_api -.->|"uses device service"| node_pos_sync
node_admin -.->|"manages pages"| node_page_service
node_menu_admin -->|"synchronizes slugs"| node_slug_sync
node_media_admin -->|"uploads files"| node_media_upload
node_ai_chat -->|"handles chat"| node_chat_service
node_chat_service -.->|"retrieves context"| node_embeddings
node_embeddings -->|"requests vectors"| node_gemini
node_contact -->|"sends notification"| node_whatsapp
node_content_read -.->|"reads content"| node_database
node_menu_read -->|"reads menu data"| node_database
node_cart -.->|"persists cart"| node_database
node_payments -->|"stores payment state"| node_database

click node_website "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Website/PageController.php"
click node_content_read "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Repositories/Eloquent/EloquentWebsitePageRepository.php"
click node_menu_read "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Repositories/Eloquent/EloquentWebsiteMenuRepository.php"
click node_search "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Website/WebsiteSearchService.php"
click node_cart "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Website/WebsiteCartService.php"
click node_checkout_entry "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Checkout/CheckoutController.php"
click node_payments "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Payments/CheckoutService.php"
click node_orders "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Admin/OrderController.php"
click node_pos_api "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Pos/PosHeartbeatController.php"
click node_pos_sync "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Pos/PosMenuSyncService.php"
click node_admin "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Admin/PageController.php"
click node_page_service "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/PageService.php"
click node_menu_admin "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Admin/MenuController.php"
click node_slug_sync "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/MenuPageSlugSyncService.php"
click node_media_admin "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Admin/MediaController.php"
click node_media_upload "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/MediaUploadService.php"
click node_ai_chat "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/AiChatController.php"
click node_chat_service "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/AiChat/ChatService.php"
click node_embeddings "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/AiChat/EmbeddingService.php"
click node_contact "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Website/ContactSubmissionController.php"
click node_whatsapp "https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Notifications/WhatsAppService.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_website,node_content_read,node_menu_read,node_search toneBlue
class node_cart,node_checkout_entry,node_payments,node_orders,node_pos_api,node_pos_sync toneAmber
class node_admin,node_page_service,node_menu_admin,node_slug_sync,node_media_admin,node_media_upload,node_gemini toneMint
class node_ai_chat,node_chat_service,node_embeddings,node_contact,node_whatsapp,node_database toneRose
class node_visitor,node_bog toneIndigo
```

## Components

### Website experience

- [Website pages](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Website/PageController.php): `app/Http/Controllers/Website/PageController.php`
- [Content queries](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Repositories/Eloquent/EloquentWebsitePageRepository.php): `app/Repositories/Eloquent/EloquentWebsitePageRepository.php`
- [Menu queries](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Repositories/Eloquent/EloquentWebsiteMenuRepository.php): `app/Repositories/Eloquent/EloquentWebsiteMenuRepository.php`
- [Website search](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Website/WebsiteSearchService.php): `app/Services/Website/WebsiteSearchService.php`

### Commerce and POS

- [Shopping cart](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Website/WebsiteCartService.php): `app/Services/Website/WebsiteCartService.php`
- [Checkout entry](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Checkout/CheckoutController.php): `app/Http/Controllers/Checkout/CheckoutController.php`
- [Payment flow](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Payments/CheckoutService.php): `app/Services/Payments/CheckoutService.php`
- [Order management](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Admin/OrderController.php): `app/Http/Controllers/Admin/OrderController.php`
- [POS endpoints](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Pos/PosHeartbeatController.php): `app/Http/Controllers/Pos/PosHeartbeatController.php`
- [POS menu sync](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Pos/PosMenuSyncService.php): `app/Services/Pos/PosMenuSyncService.php`

### Content management

- [CMS administration](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Admin/PageController.php): `app/Http/Controllers/Admin/PageController.php`
- [Page workflows](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/PageService.php): `app/Services/PageService.php`
- [Menu editing](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Admin/MenuController.php): `app/Http/Controllers/Admin/MenuController.php`
- [Menu slug sync](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/MenuPageSlugSyncService.php): `app/Services/MenuPageSlugSyncService.php`
- [Media library](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Admin/MediaController.php): `app/Http/Controllers/Admin/MediaController.php`
- [Media uploads](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/MediaUploadService.php): `app/Services/MediaUploadService.php`

### Shared capabilities

- [AI chat endpoint](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/AiChatController.php): `app/Http/Controllers/AiChatController.php`
- [Chat service](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/AiChat/ChatService.php): `app/Services/AiChat/ChatService.php`
- [Text embeddings](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/AiChat/EmbeddingService.php): `app/Services/AiChat/EmbeddingService.php`
- [Contact submissions](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Http/Controllers/Website/ContactSubmissionController.php): `app/Http/Controllers/Website/ContactSubmissionController.php`
- [WhatsApp notifications](https://github.com/tatogi/foodies-cms/blob/pos-menu-sync/app/Services/Notifications/WhatsAppService.php): `app/Services/Notifications/WhatsAppService.php`
- **Application database**

### Other components

- **Visitor**
- **BOG gateway**
- **Gemini embedding API**

## Connections

- Visitor → Website pages: requests pages
- Website pages → Content queries: queries content
- Visitor → Menu queries: requests navigation
- Visitor → Website search: searches catalog
- Visitor → Shopping cart: adds items
- Visitor → Checkout entry: starts checkout (evidence: `README.md`)
- Checkout entry → Shopping cart: reads cart (evidence: `app/Http/Controllers/Checkout/CheckoutController.php`)
- Checkout entry → Payment flow: starts payment (evidence: `app/Http/Controllers/Checkout/CheckoutController.php`)
- Payment flow → BOG gateway: redirects / callback (evidence: `README.md`)
- Payment flow → Order management: records outcome
- POS endpoints → POS menu sync: uses device service
- CMS administration → Page workflows: manages pages
- Menu editing → Menu slug sync: synchronizes slugs (evidence: `app/Http/Controllers/Admin/MenuController.php`)
- Media library → Media uploads: uploads files (evidence: `app/Http/Controllers/Admin/MediaController.php`)
- AI chat endpoint → Chat service: handles chat (evidence: `app/Http/Controllers/AiChatController.php`)
- Chat service → Text embeddings: retrieves context
- Text embeddings → Gemini embedding API: requests vectors (evidence: `app/Services/AiChat/EmbeddingService.php`)
- Contact submissions → WhatsApp notifications: sends notification (evidence: `app/Http/Controllers/Website/ContactSubmissionController.php`)
- Content queries → Application database: reads content
- Menu queries → Application database: reads menu data (evidence: `app/Repositories/Eloquent/EloquentWebsiteMenuRepository.php`)
- Shopping cart → Application database: persists cart
- Payment flow → Application database: stores payment state (evidence: `README.md`)
