# yaoming-dev/eventmmt architecture

> Architecture diagram of the GitHub repository yaoming-dev/eventmmt, 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/yaoming-dev/eventmmt
- Repository: https://github.com/yaoming-dev/eventmmt

## Overview

MMT’s site presents two related offerings—corporate events and weddings—and converts visitor interest into contact leads. Visitors browse overview and service pages, then submit a form or ask the chat assistant; the backend handles lead operations, image delivery, and chat responses. Admin routes support lead management. The sampled source confirms the lead email and Gemini integrations and image-file handling; several frontend pages and backend services were not sampled, so their internal wiring is shown only where supported by the tree or excerpts.

Main entry points: [`frontend/src/App.jsx`](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/App.jsx) (Site router), [`frontend/src/components/shared/ContactForm.jsx`](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/shared/ContactForm.jsx) (Contact form), [`backend/src/main/java/com/mmt/eventwedding/service/LeadService.java`](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/LeadService.java) (Lead service), [`backend/src/main/java/com/mmt/eventwedding/controller/LeadController.java`](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/controller/LeadController.java) (Lead endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_site["Public website"]
  node_app["Site router<br/>[App.jsx]"]
  node_event["Event pages<br/>[EventPage.jsx]"]
  node_wedding["Wedding pages<br/>[WeddingPage.jsx]"]
  node_eventservices["Event services"]
  node_weddingservices["Wedding services"]
  node_contactform["Contact form<br/>[ContactForm.jsx]"]
  node_chatwidget["Chat widget<br/>[ChatWidget.jsx]"]
  node_adminpage["Admin page<br/>[AdminPage.jsx]"]
end

subgraph group_leadops["Lead operations"]
  node_leadapi["Lead endpoints"]
  node_leadservice["Lead service<br/>[LeadService.java]"]
  node_leadrepo["Lead repository"]
  node_leaddb[("Lead store")]
end

subgraph group_backend["Backend services"]
  node_chatapi["Chat endpoint"]
  node_chatservice["Chat service<br/>[ChatService.java]"]
  node_imageapi["Image endpoints"]
  node_imageservice["Image service<br/>[ImageService.java]"]
end

subgraph group_integrations["External services"]
  node_emailservice["Email service<br/>[EmailService.java]"]
end

node_visitor(("Visitor"))
node_resend{{"Resend"}}
node_gemini{{"Gemini API"}}
node_imagefiles[("Image files")]

node_visitor -->|"browses"| node_app
node_app -->|"routes to"| node_event
node_app -->|"routes to"| node_wedding
node_app -->|"routes to"| node_eventservices
node_app -->|"routes to"| node_weddingservices
node_app -->|"routes to"| node_adminpage
node_event -->|"offers form"| node_contactform
node_wedding -->|"offers form"| node_contactform
node_eventservices -->|"offers form"| node_contactform
node_weddingservices -->|"offers form"| node_contactform
node_app -->|"renders"| node_chatwidget
node_contactform -->|"submits lead"| node_leadapi
node_adminpage -->|"manages leads"| node_leadapi
node_leadapi -->|"delegates"| node_leadservice
node_leadservice -->|"accesses leads"| node_leadrepo
node_leadrepo -->|"reads/writes"| node_leaddb
node_leadservice -->|"sends notifications"| node_emailservice
node_emailservice -->|"sends email"| node_resend
node_chatwidget -->|"requests reply"| node_chatapi
node_chatapi -->|"delegates"| node_chatservice
node_chatservice -->|"requests completion"| node_gemini
node_imageapi -->|"delegates"| node_imageservice
node_imageservice -->|"lists/loads"| node_imagefiles

click node_app "https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/App.jsx"
click node_event "https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/pages/EventPage.jsx"
click node_wedding "https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/pages/WeddingPage.jsx"
click node_eventservices "https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/event/EventServicePage.jsx"
click node_weddingservices "https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/wedding/WeddingServicePage.jsx"
click node_contactform "https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/shared/ContactForm.jsx"
click node_chatwidget "https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/layout/ChatWidget.jsx"
click node_adminpage "https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/pages/AdminPage.jsx"
click node_leadapi "https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/controller/LeadController.java"
click node_leadservice "https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/LeadService.java"
click node_leadrepo "https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/repository/LeadRepository.java"
click node_emailservice "https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/EmailService.java"
click node_chatapi "https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/controller/ChatController.java"
click node_chatservice "https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/ChatService.java"
click node_imageapi "https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/controller/ImageController.java"
click node_imageservice "https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/ImageService.java"

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_event,node_wedding,node_eventservices,node_weddingservices,node_contactform,node_chatwidget,node_adminpage toneBlue
class node_leadapi,node_leadservice,node_leadrepo,node_leaddb,node_imagefiles toneAmber
class node_chatapi,node_chatservice,node_imageapi,node_imageservice,node_gemini toneMint
class node_emailservice toneRose
class node_visitor,node_resend toneIndigo
```

## Components

### Public website

- [Site router](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Event pages](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/pages/EventPage.jsx): `frontend/src/pages/EventPage.jsx`
- [Wedding pages](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/pages/WeddingPage.jsx): `frontend/src/pages/WeddingPage.jsx`
- [Event services](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/event/EventServicePage.jsx): `frontend/src/components/event/EventServicePage.jsx`
- [Wedding services](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/wedding/WeddingServicePage.jsx): `frontend/src/components/wedding/WeddingServicePage.jsx`
- [Contact form](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/shared/ContactForm.jsx): `frontend/src/components/shared/ContactForm.jsx`
- [Chat widget](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/components/layout/ChatWidget.jsx): `frontend/src/components/layout/ChatWidget.jsx`
- [Admin page](https://github.com/yaoming-dev/eventmmt/blob/main/frontend/src/pages/AdminPage.jsx): `frontend/src/pages/AdminPage.jsx`

### Lead operations

- [Lead endpoints](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/controller/LeadController.java): `backend/src/main/java/com/mmt/eventwedding/controller/LeadController.java`
- [Lead service](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/LeadService.java): `backend/src/main/java/com/mmt/eventwedding/service/LeadService.java`
- [Lead repository](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/repository/LeadRepository.java): `backend/src/main/java/com/mmt/eventwedding/repository/LeadRepository.java`
- **Lead store**

### Backend services

- [Chat endpoint](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/controller/ChatController.java): `backend/src/main/java/com/mmt/eventwedding/controller/ChatController.java`
- [Chat service](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/ChatService.java): `backend/src/main/java/com/mmt/eventwedding/service/ChatService.java`
- [Image endpoints](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/controller/ImageController.java): `backend/src/main/java/com/mmt/eventwedding/controller/ImageController.java`
- [Image service](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/ImageService.java): `backend/src/main/java/com/mmt/eventwedding/service/ImageService.java`

### External services

- [Email service](https://github.com/yaoming-dev/eventmmt/blob/main/backend/src/main/java/com/mmt/eventwedding/service/EmailService.java): `backend/src/main/java/com/mmt/eventwedding/service/EmailService.java`

### Other components

- **Visitor**
- **Resend**
- **Gemini API**
- **Image files**

## Connections

- Visitor → Site router: browses
- Site router → Event pages: routes to
- Site router → Wedding pages: routes to
- Site router → Event services: routes to
- Site router → Wedding services: routes to
- Site router → Admin page: routes to
- Event pages → Contact form: offers form
- Wedding pages → Contact form: offers form
- Event services → Contact form: offers form
- Wedding services → Contact form: offers form
- Site router → Chat widget: renders
- Contact form → Lead endpoints: submits lead
- Admin page → Lead endpoints: manages leads
- Lead endpoints → Lead service: delegates
- Lead service → Lead repository: accesses leads
- Lead repository → Lead store: reads/writes
- Lead service → Email service: sends notifications
- Email service → Resend: sends email
- Chat widget → Chat endpoint: requests reply
- Chat endpoint → Chat service: delegates
- Chat service → Gemini API: requests completion
- Image endpoints → Image service: delegates
- Image service → Image files: lists/loads
