# ming-flowbetter/palonaai-food-recommendation architecture

> Architecture diagram of the GitHub repository ming-flowbetter/palonaai-food-recommendation, 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/ming-flowbetter/palonaai-food-recommendation
- Repository: https://github.com/ming-flowbetter/palonaai-food-recommendation

## Overview

PalonaAI is a food-discovery application whose main workflow is a user chatting about preferences, receiving AI-generated recommendations, and exploring a searchable dish catalog. The React pages call a FastAPI API; its routes delegate conversational work to the AI service and menu operations to the menu service. The README also documents intent, emotion and entity analysis, feedback, and conversation metrics. Those capabilities are represented, though some route implementations were not sampled. The menu service excerpt shows in-memory sample dishes, not a persistent store; external AI integration is documented but its call path was not shown.

Main entry points: [`backend/app/api/routes.py`](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/api/routes.py) (API routes), [`backend/app/services/ai_service.py`](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/ai_service.py) (AI conversation service), [`frontend/src/App.tsx`](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/App.tsx) (Routed app), [`frontend/src/pages/Chat.tsx`](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/pages/Chat.tsx) (Chat page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_app["Routed app<br/>[App.tsx]"]
  node_chat["Chat page<br/>[Chat.tsx]"]
  node_menu_page["Menu browser<br/>[Menu.tsx]"]
  node_analysis_view["Analysis display<br/>[AIAnalysis.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_api["API layer"]
  node_routes["API routes<br/>[routes.py]"]
  node_schemas["Request schemas<br/>[schemas.py]"]
  node_server["FastAPI server<br/>[main.py]"]
  node_config["App settings<br/>[config.py]"]
end

subgraph group_recommend["Conversation and recommendations"]
  node_ai_service["AI conversation service<br/>[ai_service.py]"]
  node_analysis["Intent emotion entities<br/>[ai_service.py]"]
  node_session_metrics["Sessions and metrics<br/>[ai_service.py]"]
  node_feedback["User feedback<br/>[routes.py]"]
end

subgraph group_catalog["Menu catalog"]
  node_menu_service["Menu and search<br/>[menu_service.py]"]
end

node_diner(("Diner"))
node_llm{{"OpenAI GPT"}}

node_diner -.->|"uses"| node_app
node_app -->|"routes to"| node_chat
node_app -->|"routes to"| node_menu_page
node_chat -->|"requests chat"| node_api_client
node_chat -->|"renders"| node_analysis_view
node_menu_page -->|"loads and searches"| node_api_client
node_api_client -->|"calls endpoints"| node_routes
node_server -->|"mounts routes"| node_routes
node_server -->|"loads settings"| node_config
node_routes -->|"uses models"| node_schemas
node_routes -->|"delegates chat"| node_ai_service
node_routes -->|"delegates menu"| node_menu_service
node_routes -->|"requests analysis"| node_analysis
node_routes -->|"gets session metrics"| node_session_metrics
node_routes -->|"accepts feedback"| node_feedback
node_ai_service -->|"analyzes messages"| node_analysis
node_ai_service -->|"tracks sessions"| node_session_metrics
node_ai_service -->|"uses menu data"| node_menu_service
node_ai_service -->|"reads settings"| node_config
node_ai_service -.->|"generates responses"| node_llm

click node_app "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/App.tsx"
click node_chat "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/pages/Chat.tsx"
click node_menu_page "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/pages/Menu.tsx"
click node_analysis_view "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/components/AIAnalysis.tsx"
click node_api_client "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/services/api.ts"
click node_routes "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/api/routes.py"
click node_schemas "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/models/schemas.py"
click node_server "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/main.py"
click node_config "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/core/config.py"
click node_ai_service "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/ai_service.py"
click node_analysis "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/ai_service.py"
click node_session_metrics "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/ai_service.py"
click node_feedback "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/api/routes.py"
click node_menu_service "https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/menu_service.py"

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_chat,node_menu_page,node_analysis_view,node_api_client toneBlue
class node_routes,node_schemas,node_server,node_config toneAmber
class node_ai_service,node_analysis,node_session_metrics,node_feedback toneMint
class node_menu_service toneRose
class node_diner,node_llm toneIndigo
```

## Components

### Web experience

- [Routed app](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Chat page](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/pages/Chat.tsx): `frontend/src/pages/Chat.tsx`
- [Menu browser](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/pages/Menu.tsx): `frontend/src/pages/Menu.tsx`
- [Analysis display](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/components/AIAnalysis.tsx): `frontend/src/components/AIAnalysis.tsx`
- [API client](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/frontend/src/services/api.ts): `frontend/src/services/api.ts`

### API layer

- [API routes](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/api/routes.py): `backend/app/api/routes.py`
- [Request schemas](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/models/schemas.py): `backend/app/models/schemas.py`
- [FastAPI server](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/main.py): `backend/main.py`
- [App settings](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/core/config.py): `backend/app/core/config.py`

### Conversation and recommendations

- [AI conversation service](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/ai_service.py): `backend/app/services/ai_service.py`
- [Intent emotion entities](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/ai_service.py): `backend/app/services/ai_service.py`
- [Sessions and metrics](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/ai_service.py): `backend/app/services/ai_service.py`
- [User feedback](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/api/routes.py): `backend/app/api/routes.py`

### Menu catalog

- [Menu and search](https://github.com/ming-flowbetter/palonaai-food-recommendation/blob/clean-master/backend/app/services/menu_service.py): `backend/app/services/menu_service.py`

### Other components

- **Diner**
- **OpenAI GPT**

## Connections

- Diner → Routed app: uses
- Routed app → Chat page: routes to (evidence: `frontend/src/App.tsx`)
- Routed app → Menu browser: routes to (evidence: `frontend/src/App.tsx`)
- Chat page → API client: requests chat (evidence: `frontend/src/pages/Chat.tsx`)
- Chat page → Analysis display: renders (evidence: `frontend/src/pages/Chat.tsx`)
- Menu browser → API client: loads and searches (evidence: `frontend/src/pages/Menu.tsx`)
- API client → API routes: calls endpoints (evidence: `frontend/src/services/api.ts`)
- FastAPI server → API routes: mounts routes (evidence: `backend/main.py`)
- FastAPI server → App settings: loads settings (evidence: `backend/main.py`)
- API routes → Request schemas: uses models (evidence: `backend/app/api/routes.py`)
- API routes → AI conversation service: delegates chat (evidence: `backend/app/api/routes.py`)
- API routes → Menu and search: delegates menu (evidence: `backend/app/api/routes.py`)
- API routes → Intent emotion entities: requests analysis (evidence: `README.md`)
- API routes → Sessions and metrics: gets session metrics (evidence: `backend/app/api/routes.py`)
- API routes → User feedback: accepts feedback (evidence: `README.md`)
- AI conversation service → Intent emotion entities: analyzes messages (evidence: `backend/app/services/ai_service.py`)
- AI conversation service → Sessions and metrics: tracks sessions (evidence: `backend/app/services/ai_service.py`)
- AI conversation service → Menu and search: uses menu data (evidence: `backend/app/services/ai_service.py`)
- AI conversation service → App settings: reads settings (evidence: `backend/app/services/ai_service.py`)
- AI conversation service → OpenAI GPT: generates responses
