# tuyetnga09/hackathon-viber-code-pro-max architecture

> Architecture diagram of the GitHub repository tuyetnga09/hackathon-viber-code-pro-max, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tuyetnga09/hackathon-viber-code-pro-max
- Repository: https://github.com/tuyetnga09/hackathon-viber-code-pro-max

## Overview

Viber Coding Pro Max is a three-module AI chat starter: a Next.js chat UI sends messages over HTTP to a FastAPI backend, which calls a LangGraph agent and returns a response for display. The agent currently produces sample text; the configured LLM and example tools are not connected to its graph, and database/vector-store support is configuration-only. The graph reflects documented module wiring and sampled calls; unsampled route and graph details are shown only where the README supports them.

Main entry points: [`frontend/src/features/chat/components/ChatWindow.tsx`](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/components/ChatWindow.tsx) (Chat window), [`backend/src/backend/controllers/chat_controller.py`](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/controllers/chat_controller.py) (Chat controller), [`backend/src/backend/main.py`](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/main.py) (FastAPI app), [`backend/src/backend/services/chat_service.py`](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/services/chat_service.py) (Chat service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Chat frontend"]
  node_chat_page["Chat page<br/>[page.tsx]"]
  node_chat_window["Chat window<br/>[ChatWindow.tsx]"]
  node_chat_hook["Chat state<br/>[useChat.ts]"]
  node_message_input["Message input<br/>[MessageInput.tsx]"]
  node_message_list["Message list<br/>[MessageList.tsx]"]
  node_chat_api["Chat API<br/>[chatApi.ts]"]
  node_api_client["HTTP client<br/>[client.ts]"]
end

subgraph group_backend["HTTP backend"]
  node_backend_app["FastAPI app<br/>[main.py]"]
  node_chat_controller["Chat controller<br/>[chat_controller.py]"]
  node_health_controller["Health controller"]
  node_chat_service["Chat service<br/>[chat_service.py]"]
  node_chat_model["Chat model<br/>[chat.py]"]
  node_chat_view["Chat response<br/>[chat_view.py]"]
  node_health_view["Health response<br/>[health_view.py]"]
end

subgraph group_agent["AI agent"]
  node_agent_entry["Agent interface<br/>[__init__.py]"]
  node_agent_graph["Agent graph<br/>[graph.py]"]
  node_agent_state["Agent state<br/>[state.py]"]
  node_agent_nodes["Analysis and response<br/>[example_node.py]"]
  node_llm_client["LLM client<br/>[llm.py]"]
  node_agent_tools["Example tools<br/>[example_tool.py]"]
end

node_user(("User"))
node_llm_service(("LLM provider"))
node_browser(("Browser"))

node_user -->|"opens chat"| node_chat_page
node_chat_page -->|"renders"| node_chat_window
node_chat_window -->|"uses state"| node_chat_hook
node_chat_window -->|"renders"| node_message_input
node_chat_window -->|"renders"| node_message_list
node_chat_hook -->|"sends message"| node_chat_api
node_chat_api -->|"posts request"| node_api_client
node_api_client -->|"HTTP request"| node_backend_app
node_backend_app -->|"routes chat"| node_chat_controller
node_backend_app -->|"routes health"| node_health_controller
node_chat_controller -->|"calls service"| node_chat_service
node_chat_controller -->|"reads request"| node_chat_model
node_chat_controller -->|"builds response"| node_chat_view
node_chat_service -->|"calls agent"| node_agent_entry
node_agent_entry -->|"runs graph"| node_agent_graph
node_agent_graph -->|"dispatches nodes"| node_agent_nodes
node_agent_graph -->|"uses state"| node_agent_state
node_chat_service -->|"creates domain result"| node_chat_model
node_health_controller -->|"builds response"| node_health_view
node_llm_client -.->|"configured client"| node_llm_service

click node_chat_page "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/app/chat/page.tsx"
click node_chat_window "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/components/ChatWindow.tsx"
click node_chat_hook "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/hooks/useChat.ts"
click node_message_input "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/components/MessageInput.tsx"
click node_message_list "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/components/MessageList.tsx"
click node_chat_api "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/api/chatApi.ts"
click node_api_client "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/lib/api/client.ts"
click node_backend_app "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/main.py"
click node_chat_controller "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/controllers/chat_controller.py"
click node_health_controller "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/controllers/health_controller.py"
click node_chat_service "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/services/chat_service.py"
click node_chat_model "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/models/chat.py"
click node_chat_view "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/views/chat_view.py"
click node_health_view "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/views/health_view.py"
click node_agent_entry "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/__init__.py"
click node_agent_graph "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/graph.py"
click node_agent_state "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/state.py"
click node_agent_nodes "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/nodes/example_node.py"
click node_llm_client "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/llm.py"
click node_agent_tools "https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/tools/example_tool.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_chat_page,node_chat_window,node_chat_hook,node_message_input,node_message_list,node_chat_api,node_api_client,node_user,node_browser toneBlue
class node_backend_app,node_chat_controller,node_health_controller,node_chat_service,node_chat_model,node_chat_view,node_health_view toneAmber
class node_agent_entry,node_agent_graph,node_agent_state,node_agent_nodes,node_llm_client,node_agent_tools toneMint
class node_llm_service toneIndigo
```

## Components

### Chat frontend

- [Chat page](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/app/chat/page.tsx): `frontend/src/app/chat/page.tsx`
- [Chat window](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/components/ChatWindow.tsx): `frontend/src/features/chat/components/ChatWindow.tsx`
- [Chat state](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/hooks/useChat.ts): `frontend/src/features/chat/hooks/useChat.ts`
- [Message input](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/components/MessageInput.tsx): `frontend/src/features/chat/components/MessageInput.tsx`
- [Message list](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/components/MessageList.tsx): `frontend/src/features/chat/components/MessageList.tsx`
- [Chat API](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/features/chat/api/chatApi.ts): `frontend/src/features/chat/api/chatApi.ts`
- [HTTP client](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/frontend/src/lib/api/client.ts): `frontend/src/lib/api/client.ts`

### HTTP backend

- [FastAPI app](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/main.py): `backend/src/backend/main.py`
- [Chat controller](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/controllers/chat_controller.py): `backend/src/backend/controllers/chat_controller.py`
- [Health controller](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/controllers/health_controller.py): `backend/src/backend/controllers/health_controller.py`
- [Chat service](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/services/chat_service.py): `backend/src/backend/services/chat_service.py`
- [Chat model](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/models/chat.py): `backend/src/backend/models/chat.py`
- [Chat response](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/views/chat_view.py): `backend/src/backend/views/chat_view.py`
- [Health response](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/backend/src/backend/views/health_view.py): `backend/src/backend/views/health_view.py`

### AI agent

- [Agent interface](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/__init__.py): `ai/src/ai/__init__.py`
- [Agent graph](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/graph.py): `ai/src/ai/graph.py`
- [Agent state](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/state.py): `ai/src/ai/state.py`
- [Analysis and response](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/nodes/example_node.py): `ai/src/ai/nodes/example_node.py`
- [LLM client](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/llm.py): `ai/src/ai/llm.py`
- [Example tools](https://github.com/tuyetnga09/hackathon-viber-code-pro-max/blob/main/ai/src/ai/tools/example_tool.py): `ai/src/ai/tools/example_tool.py`

### Other components

- **User**
- **LLM provider**
- **Browser**

## Connections

- User → Chat page: opens chat
- Chat page → Chat window: renders
- Chat window → Chat state: uses state
- Chat window → Message input: renders
- Chat window → Message list: renders
- Chat state → Chat API: sends message
- Chat API → HTTP client: posts request
- HTTP client → FastAPI app: HTTP request
- FastAPI app → Chat controller: routes chat
- FastAPI app → Health controller: routes health
- Chat controller → Chat service: calls service
- Chat controller → Chat model: reads request
- Chat controller → Chat response: builds response
- Chat service → Agent interface: calls agent
- Agent interface → Agent graph: runs graph
- Agent graph → Analysis and response: dispatches nodes
- Agent graph → Agent state: uses state
- Chat service → Chat model: creates domain result
- Health controller → Health response: builds response
- LLM client → LLM provider: configured client
