# mark-batongbacal/pawfect architecture

> Architecture diagram of the GitHub repository mark-batongbacal/pawfect, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-05-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mark-batongbacal/pawfect
- Repository: https://github.com/mark-batongbacal/pawfect

## Overview

1. **Overall shape**
   - This is an ASP.NET Core MVC application for a pet clinic / veterinary management system.
   - The code is organized in a classic layered structure: **Controllers → Services → Repositories → EF Core DbContext/Entities**.
   - UI is server-rendered with Razor views, plus static assets under `wwwroot`.

2. **Presentation layer**
   - `Controllers/` contains the user-facing entry points for major workflows: accounts, home, customer dashboard, veterinarian dashboard, admin dashboard, chat, appointments, pets, and notifications.
   - `Views/` mirrors those controller areas and renders the HTML pages.
   - The app has separate user experiences for at least **customers**, **veterinarians**, and **admins**, which is important for any diagram of request routing and authorization boundaries.

3. **Application/service layer**
   - `Services/` holds the main business logic and orchestration.
   - Key service groups:
     - `UserManagement` for account/user lifecycle concerns.
     - `Dashboard` for customer dashboard data assembly.
     - `PetCare` for pet-related operations.
     - `Appointments` and `AppointmentManagement` for appointment workflow and operational handling.
     - `Admin` for admin dashboard aggregation.
     - `Chat` for AI chat and typing state.
     - `Notifications` for appointment notifications and SMS abstraction.
     - `Audit` for logging/auditing.
     - `Communication` likely coordinates user-facing messages between features.
   - Controllers should be seen as thin entry points that delegate to these services.

4. **Repository/data access layer**
   - `Repository/` contains one repository per aggregate or table-like area: users, roles, pets, appointments, appointment services, clinics, messages, notifications, records, services, and logs.
   - This layer isolates CRUD/data queries from business logic.
   - The repositories are interface-driven (`I...Repository`), which suggests dependency injection is used throughout and that the app is designed for testability and swapping implementations.

5. **Persistence model**
   - `Models/Database/` contains the EF Core entity types and the `PawFectContext` database context.
   - Core entities include `User`, `Role`, `Pet`, `Appointment`, `Clinic`, `Service`, `Message`, `Notification`, `Record`, `Log`, `Veterinarian`, and `VeterinarianSchedule`.
   - The context is the persistence boundary: services/repositories operate on these entities, not on the UI models.

6. **Domain areas and data ownership**
   - The model structure reflects the main business domains:
     - **Accounts and identity**: users/roles.
     - **Pet management**: pets, records.
     - **Scheduling**: appointments, veterinarian schedules, appointment services.
     - **Communication**: messages, notifications, chat.
     - **Operations**: clinics, services, logs.
   - This is useful for drawing bounded areas in a diagram; each area has corresponding controllers, repositories, and sometimes specialized services.

7. **View model boundary**
   - `Models/*ViewModel.cs` and input models under `Models/Accounts`, `Models/Admin`, `Models/Appointments`, `Models/Chat`, `Models/Dashboard`, `Models/Pets`, and `Models/VeterinarianDashboard` are the contract between controllers/views and the application layer.
   - These are separate from database entities, so the system appears to avoid exposing EF entities directly to the UI.
   - In a diagram, this is an explicit transformation boundary: database entities stay in the persistence layer, while view/input models are shaped for screens and form submissions.

8. **Security and account flow**
   - `Controllers/AccountsController.cs` plus account view models handle login and registration.
   - `Helper/SecurityHelper.cs` likely centralizes auth-related or password-related logic.
   - Since there are admin, veterinarian, and customer dashboards, role-based authorization is a key architectural constraint even though the exact implementation is not shown here.

9. **Appointment workflow**
   - Appointment features are split between workflow and management concerns:
     - `Services/Appointments/AppointmentWorkflowService.cs`
     - `Services/AppointmentManagement/AppointmentManagementService.cs`
     - `Controllers/CustomerAppointmentsController.cs`
     - repository support for appointments and appointment services
   - This suggests a multi-step business process: appointment request, persistence, service selection, review/processing, and notification.

10. **Chat and AI subsystem**
   - `Controllers/ChatController.cs` interacts with `Services/Chat/NvidiaAiChatService.cs` through `IAiChatService`.
   - `ChatTypingTracker` indicates the app also tracks real-time typing or presence state for chat UX.
   - Data for chat is backed by `Models/Database/Message` and `Repository/Messages`, so chat is both an AI interaction feature and a persisted communication record.

11. **Notifications and messaging**
   - `Controllers/NotificationsController.cs` and `Services/Notifications/*` manage appointment notifications.
   - `ISmsNotificationService` has a `LoggingSmsNotificationService` implementation, which implies SMS is abstracted and may be logged rather than actually sent in this repository’s current implementation.
   - This subsystem likely receives events from appointment workflows and writes to notification/log storage.

12. **Admin and operational dashboards**
   - `Controllers/AdminDashboardController.cs` and `Services/Admin/AdminDashboardService.cs` aggregate cross-cutting operational data for admins.
   - `Controllers/VeterinarianDashboardController.cs` and `Controllers/DashboardController.cs` provide role-specific views for veterinarians and customers.
   - These dashboard services are read-heavy composition layers over multiple repositories rather than direct CRUD endpoints.

13. **Infrastructure and runtime**
   - `Program.cs` is the application bootstrap; `PawFect.csproj` and `PawFect.sln` indicate a standard .NET solution.
   - `Dockerfile` suggests the app is containerized for deployment.
   - `wwwroot/` contains Bootstrap, jQuery, validation scripts, and site-specific CSS/JS, so the front end is server-rendered with client-side helpers rather than a SPA.

14. **Cross-cutting concerns**
   - `Services/Audit/AuditService.cs` and `Models/Database/Log.cs` suggest operational auditing is a first-class concern.
   - `Controllers/NotificationsController.cs`, `Services/Communication`, and `Models/Database/Notification` show the app records user-facing communication separately from core business entities.
   - Overall, the architecture emphasizes separation of concerns: UI shaping, business workflows, persistence, and cross-cutting auditing/communication are isolated into distinct layers.

Main entry points: [`Models/Database/PawFectContext.cs`](https://github.com/mark-batongbacal/pawfect/blob/master/Models/Database/PawFectContext.cs) (PawFectContext), [`Services/Appointments/AppointmentWorkflowService.cs`](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Appointments/AppointmentWorkflowService.cs) (Appt Workflow), [`Services/Notifications/AppointmentNotificationService.cs`](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Notifications/AppointmentNotificationService.cs) (Notify), [`Repository/Appointments/AppointmentRepository.cs`](https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Appointments/AppointmentRepository.cs) (Appointments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Presentation"]
  node_home_controller["Home<br/>controller<br/>[HomeController.cs]"]
  node_accounts_controller["Accounts<br/>controller"]
  node_customer_dashboard_controller["Customer Dash<br/>controller"]
  node_customer_pets_controller["Pets<br/>controller"]
  node_customer_appointments_controller["Appointments<br/>controller"]
  node_chat_controller["Chat<br/>controller<br/>[ChatController.cs]"]
  node_notifications_controller["Notifications<br/>controller"]
  node_veterinarian_dashboard_controller["Vet Dash<br/>controller"]
  node_admin_dashboard_controller["Admin Dash<br/>controller"]
  node_home_views["Views"]
end

subgraph group_application["Application"]
  node_user_management_service["User Mgmt"]
  node_customer_dashboard_service["Dashboard"]
  node_pet_care_service["Pet Care<br/>[PetCareService.cs]"]
  node_appointment_workflow_service["Appt Workflow"]
  node_appointment_mgmt_service["Appt Mgmt"]
  node_admin_dashboard_service["Admin Data"]
  node_chat_service["AI Chat"]
  node_notification_service["Notify"]
  node_communication_service["Communication"]
  node_audit_service["Audit<br/>[AuditService.cs]"]
end

subgraph group_data["Data"]
  node_user_repository["Users<br/>[UserRepository.cs]"]
  node_appointment_repository["Appointments"]
  node_pet_repository["Pets<br/>[PetRepository.cs]"]
  node_message_repository["Messages"]
  node_notification_repository["Notifications"]
  node_log_repository["Logs<br/>[LogRepository.cs]"]
  node_db_context[("PawFectContext<br/>ef core context<br/>[PawFectContext.cs]")]
  node_db_entities["Entities<br/>[User.cs]"]
end

subgraph group_shared["Shared"]
  node_view_models["View Models<br/>ui models"]
  node_security_helper["Security<br/>helper<br/>[SecurityHelper.cs]"]
end

subgraph group_infrastructure["Infrastructure"]
  node_program_bootstrap["Program<br/>bootstrap<br/>[Program.cs]"]
  node_static_assets["wwwroot<br/>static assets"]
end

node_home_controller -->|"renders"| node_home_views
node_accounts_controller -->|"uses"| node_user_management_service
node_customer_dashboard_controller -->|"uses"| node_customer_dashboard_service
node_customer_pets_controller -->|"uses"| node_pet_care_service
node_customer_appointments_controller -->|"uses"| node_appointment_workflow_service
node_chat_controller -->|"uses"| node_chat_service
node_notifications_controller -->|"uses"| node_notification_service
node_veterinarian_dashboard_controller -.->|"shares data"| node_admin_dashboard_service
node_admin_dashboard_controller -->|"uses"| node_admin_dashboard_service
node_appointment_workflow_service -->|"persists"| node_appointment_repository
node_appointment_workflow_service -->|"triggers"| node_notification_service
node_appointment_mgmt_service -->|"uses"| node_appointment_repository
node_pet_care_service -->|"uses"| node_pet_repository
node_user_management_service -->|"uses"| node_user_repository
node_chat_service -->|"persists"| node_message_repository
node_notification_service -->|"persists"| node_notification_repository
node_audit_service -->|"writes"| node_log_repository
node_user_repository -->|"queries"| node_db_context
node_appointment_repository -->|"queries"| node_db_context
node_pet_repository -->|"queries"| node_db_context
node_message_repository -->|"queries"| node_db_context
node_notification_repository -->|"queries"| node_db_context
node_log_repository -->|"queries"| node_db_context
node_db_context -->|"maps"| node_db_entities
node_accounts_controller -->|"binds"| node_view_models
node_customer_dashboard_controller -->|"binds"| node_view_models
node_chat_controller -->|"binds"| node_view_models
node_program_bootstrap -->|"configures"| node_security_helper
node_program_bootstrap -->|"serves"| node_static_assets

click node_home_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/HomeController.cs"
click node_accounts_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/AccountsController.cs"
click node_customer_dashboard_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/DashboardController.cs"
click node_customer_pets_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/CustomerPetsController.cs"
click node_customer_appointments_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/CustomerAppointmentsController.cs"
click node_chat_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/ChatController.cs"
click node_notifications_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/NotificationsController.cs"
click node_veterinarian_dashboard_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/VeterinarianDashboardController.cs"
click node_admin_dashboard_controller "https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/AdminDashboardController.cs"
click node_home_views "https://github.com/mark-batongbacal/pawfect/tree/master/Views"
click node_user_management_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/UserManagement/UserManagementService.cs"
click node_customer_dashboard_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/Dashboard/CustomerDashboardService.cs"
click node_pet_care_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/PetCare/PetCareService.cs"
click node_appointment_workflow_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/Appointments/AppointmentWorkflowService.cs"
click node_appointment_mgmt_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/AppointmentManagement/AppointmentManagementService.cs"
click node_admin_dashboard_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/Admin/AdminDashboardService.cs"
click node_chat_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/Chat/NvidiaAiChatService.cs"
click node_notification_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/Notifications/AppointmentNotificationService.cs"
click node_communication_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/Communication/CommunicationService.cs"
click node_audit_service "https://github.com/mark-batongbacal/pawfect/blob/master/Services/Audit/AuditService.cs"
click node_user_repository "https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Users/UserRepository.cs"
click node_appointment_repository "https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Appointments/AppointmentRepository.cs"
click node_pet_repository "https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Pets/PetRepository.cs"
click node_message_repository "https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Messages/MessageRepository.cs"
click node_notification_repository "https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Notifications/NotificationRepository.cs"
click node_log_repository "https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Logs/LogRepository.cs"
click node_db_context "https://github.com/mark-batongbacal/pawfect/blob/master/Models/Database/PawFectContext.cs"
click node_db_entities "https://github.com/mark-batongbacal/pawfect/blob/master/Models/Database/User.cs"
click node_view_models "https://github.com/mark-batongbacal/pawfect/blob/master/Models/Dashboard/CustomerDashboardViewModel.cs"
click node_security_helper "https://github.com/mark-batongbacal/pawfect/blob/master/Helper/SecurityHelper.cs"
click node_program_bootstrap "https://github.com/mark-batongbacal/pawfect/blob/master/Program.cs"
click node_static_assets "https://github.com/mark-batongbacal/pawfect/tree/master/wwwroot"

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_home_controller,node_accounts_controller,node_customer_dashboard_controller,node_customer_pets_controller,node_customer_appointments_controller,node_chat_controller,node_notifications_controller,node_veterinarian_dashboard_controller,node_admin_dashboard_controller,node_home_views toneBlue
class node_user_management_service,node_customer_dashboard_service,node_pet_care_service,node_appointment_workflow_service,node_appointment_mgmt_service,node_admin_dashboard_service,node_chat_service,node_notification_service,node_communication_service,node_audit_service toneAmber
class node_user_repository,node_appointment_repository,node_pet_repository,node_message_repository,node_notification_repository,node_log_repository,node_db_context,node_db_entities toneMint
class node_view_models,node_security_helper toneRose
class node_program_bootstrap,node_static_assets toneIndigo
```

## Components

### Presentation

MVC controllers and Razor views

- [Home](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/HomeController.cs): controller · Landing pages and public entry points · `Controllers/HomeController.cs`
- [Accounts](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/AccountsController.cs): controller · Login, registration, and access control · `Controllers/AccountsController.cs`
- [Customer Dash](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/DashboardController.cs): controller · Customer-facing dashboard and profile flows · `Controllers/DashboardController.cs`
- [Pets](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/CustomerPetsController.cs): controller · Customer pet management entry point · `Controllers/CustomerPetsController.cs`
- [Appointments](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/CustomerAppointmentsController.cs): controller · Customer appointment workflow entry point · `Controllers/CustomerAppointmentsController.cs`
- [Chat](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/ChatController.cs): controller · AI chat and message interaction · `Controllers/ChatController.cs`
- [Notifications](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/NotificationsController.cs): controller · Notification viewing and delivery hooks · `Controllers/NotificationsController.cs`
- [Vet Dash](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/VeterinarianDashboardController.cs): controller · Veterinarian-specific dashboard · `Controllers/VeterinarianDashboardController.cs`
- [Admin Dash](https://github.com/mark-batongbacal/pawfect/blob/master/Controllers/AdminDashboardController.cs): controller · Administrative overview and operations · `Controllers/AdminDashboardController.cs`
- [Views](https://github.com/mark-batongbacal/pawfect/tree/master/Views): razor views · Server-rendered UI for controller areas · `Views`

### Application

Business services and orchestration

- [User Mgmt](https://github.com/mark-batongbacal/pawfect/blob/master/Services/UserManagement/UserManagementService.cs): service · Account lifecycle and user coordination · `Services/UserManagement/UserManagementService.cs`
- [Dashboard](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Dashboard/CustomerDashboardService.cs): service · Customer dashboard data assembly · `Services/Dashboard/CustomerDashboardService.cs`
- [Pet Care](https://github.com/mark-batongbacal/pawfect/blob/master/Services/PetCare/PetCareService.cs): service · Pet-related business operations · `Services/PetCare/PetCareService.cs`
- [Appt Workflow](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Appointments/AppointmentWorkflowService.cs): service · Appointment request and workflow orchestration · `Services/Appointments/AppointmentWorkflowService.cs`
- [Appt Mgmt](https://github.com/mark-batongbacal/pawfect/blob/master/Services/AppointmentManagement/AppointmentManagementService.cs): service · Operational appointment handling · `Services/AppointmentManagement/AppointmentManagementService.cs`
- [Admin Data](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Admin/AdminDashboardService.cs): service · Admin dashboard aggregation · `Services/Admin/AdminDashboardService.cs`
- [AI Chat](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Chat/NvidiaAiChatService.cs): service · AI chat integration and typing state · `Services/Chat/NvidiaAiChatService.cs`
- [Notify](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Notifications/AppointmentNotificationService.cs): service · Appointment notifications and SMS abstraction · `Services/Notifications/AppointmentNotificationService.cs`
- [Communication](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Communication/CommunicationService.cs): service · User-facing messaging coordination · `Services/Communication/CommunicationService.cs`
- [Audit](https://github.com/mark-batongbacal/pawfect/blob/master/Services/Audit/AuditService.cs): service · Operational logging and auditing · `Services/Audit/AuditService.cs`

### Data

Repositories and EF Core persistence

- [Users](https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Users/UserRepository.cs): repository · User data access · `Repository/Users/UserRepository.cs`
- [Appointments](https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Appointments/AppointmentRepository.cs): repository · Appointment persistence and queries · `Repository/Appointments/AppointmentRepository.cs`
- [Pets](https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Pets/PetRepository.cs): repository · Pet persistence and queries · `Repository/Pets/PetRepository.cs`
- [Messages](https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Messages/MessageRepository.cs): repository · Chat message storage · `Repository/Messages/MessageRepository.cs`
- [Notifications](https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Notifications/NotificationRepository.cs): repository · Notification storage · `Repository/Notifications/NotificationRepository.cs`
- [Logs](https://github.com/mark-batongbacal/pawfect/blob/master/Repository/Logs/LogRepository.cs): repository · Audit log storage · `Repository/Logs/LogRepository.cs`
- [PawFectContext](https://github.com/mark-batongbacal/pawfect/blob/master/Models/Database/PawFectContext.cs): ef core context · Persistence boundary for entities · `Models/Database/PawFectContext.cs`
- [Entities](https://github.com/mark-batongbacal/pawfect/blob/master/Models/Database/User.cs): domain entities · Users, pets, appointments, messages, notifications, and records · `Models/Database/User.cs`

### Shared

Cross-cutting helpers and view models

- [View Models](https://github.com/mark-batongbacal/pawfect/blob/master/Models/Dashboard/CustomerDashboardViewModel.cs): ui models · Screen and form contracts between controllers and views · `Models/Dashboard/CustomerDashboardViewModel.cs`
- [Security](https://github.com/mark-batongbacal/pawfect/blob/master/Helper/SecurityHelper.cs): helper · Authentication and password-related helper logic · `Helper/SecurityHelper.cs`

### Infrastructure

App bootstrap and runtime assets

- [Program](https://github.com/mark-batongbacal/pawfect/blob/master/Program.cs): bootstrap · Application startup and dependency wiring · `Program.cs`
- [wwwroot](https://github.com/mark-batongbacal/pawfect/tree/master/wwwroot): static assets · Bootstrap, jQuery, scripts, styles, and images · `wwwroot`

## Connections

- Home → Views: renders · Public pages are rendered with Razor views
- Accounts → User Mgmt: uses · Account actions delegate to user management
- Customer Dash → Dashboard: uses · Dashboard pages are assembled by service logic
- Pets → Pet Care: uses · Pet actions delegate to pet care service
- Appointments → Appt Workflow: uses · Appointment requests start in workflow service
- Chat → AI Chat: uses · Chat requests call the AI chat service
- Notifications → Notify: uses · Notification actions go through notification service
- Vet Dash → Admin Data: shares data · Role-specific dashboards reuse aggregation patterns
- Admin Dash → Admin Data: uses · Admin dashboard data is composed in service layer
- Appt Workflow → Appointments: persists · Workflow reads and writes appointment records
- Appt Workflow → Notify: triggers · Appointment changes generate notifications
- Appt Mgmt → Appointments: uses · Operational handling relies on appointment data
- Pet Care → Pets: uses · Pet workflows use repository-backed persistence
- User Mgmt → Users: uses · Account lifecycle depends on user data access
- AI Chat → Messages: persists · AI and user chat is stored as messages
- Notify → Notifications: persists · Notifications are stored for later retrieval
- Audit → Logs: writes · Auditing records operational events
- Users → PawFectContext: queries · Repositories execute through EF Core context
- Appointments → PawFectContext: queries · Repositories execute through EF Core context
- Pets → PawFectContext: queries · Repositories execute through EF Core context
- Messages → PawFectContext: queries · Repositories execute through EF Core context
- Notifications → PawFectContext: queries · Repositories execute through EF Core context
- Logs → PawFectContext: queries · Repositories execute through EF Core context
- PawFectContext → Entities: maps · Context manages the persistence model
- Accounts → View Models: binds · Login and register forms use input models
- Customer Dash → View Models: binds · Dashboard screens use dedicated view models
- Chat → View Models: binds · Chat UI uses dedicated view models
- Program → Security: configures · Startup wires shared helpers and services
- Program → wwwroot: serves · Static web assets are exposed at runtime
