# duckluyencode/fairtrip-nt118 architecture

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

- Interactive diagram: https://gitdiagram.com/duckluyencode/fairtrip-nt118
- Repository: https://github.com/duckluyencode/fairtrip-nt118

## Overview

TripFair is an Android travel-planning product backed by a NestJS API. Its user-facing capabilities span place discovery, budget- and time-aware itineraries, group planning, photo search, account/profile features, and SOS; the README describes group planning’s greedy, local-search, and fairness stages, but no implementation for those stages appears in the supplied excerpts. Backend excerpts show place search, authentication, favorites, search history, and profile handling. Android navigation and most feature screens were not sampled, so their internal calls and client-to-API wiring are not asserted.

Main entry points: [`backend/src/prisma/prisma.service.ts`](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/prisma/prisma.service.ts) (Database access), [`backend/src/app.module.ts`](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/app.module.ts) (NestJS API), [`backend/src/places/places.service.ts`](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/places/places.service.ts) (Place discovery logic), [`backend/src/auth/auth.service.ts`](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/auth/auth.service.ts) (Authentication)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Android app"]
  node_android["Android entry<br/>[MainActivity.kt]"]
  node_navigation["App navigation"]
  node_place_ui["Place discovery<br/>[SearchScreen.kt]"]
  node_itinerary_ui["Trip itineraries<br/>[ItineraryScreen.kt]"]
  node_group_ui["Group planning<br/>[GroupPlanScreen.kt]"]
  node_photo_ui["Photo search<br/>[CameraScreen.kt]"]
  node_sos_ui["Emergency SOS<br/>[SosScreen.kt]"]
  node_auth_ui["Account screens<br/>[LoginScreen.kt]"]
end

subgraph group_backend["Backend domains"]
  node_auth["Authentication<br/>[auth.service.ts]"]
  node_places_controller["Places endpoints"]
  node_places["Place discovery logic<br/>[places.service.ts]"]
  node_history["Search history"]
  node_favorites_controller["Favorites endpoints"]
  node_favorites["Favorites logic"]
  node_users["User profile"]
end

subgraph group_data["Data and integrations"]
  node_prisma["Database access<br/>[prisma.service.ts]"]
  node_google_places["Google Places client"]
end

subgraph group_platform["API platform"]
  node_api["NestJS API<br/>[app.module.ts]"]
end

node_traveler(("Traveler"))
node_google_api{{"Google Places API"}}
node_database[("MySQL database")]
node_sms{{"SMS delivery"}}
node_photo_recognition{{"Photo recognition"}}

node_traveler -.->|"opens app"| node_android
node_android -->|"starts"| node_navigation
node_traveler -.->|"searches places"| node_place_ui
node_traveler -.->|"plans trips"| node_itinerary_ui
node_traveler -.->|"plans together"| node_group_ui
node_traveler -.->|"searches by photo"| node_photo_ui
node_traveler -.->|"requests help"| node_sos_ui
node_traveler -.->|"signs in"| node_auth_ui
node_android -.->|"uses API"| node_api
node_api -->|"registers module"| node_auth
node_api -->|"registers module"| node_places_controller
node_api -->|"registers module"| node_favorites_controller
node_api -->|"registers module"| node_history
node_places_controller -->|"calls"| node_places
node_places -->|"queries"| node_prisma
node_places -->|"records searches"| node_history
node_places -->|"searches places"| node_google_places
node_google_places -.->|"queries"| node_google_api
node_favorites_controller -->|"calls"| node_favorites
node_favorites -->|"loads summaries"| node_places
node_favorites -->|"reads and writes"| node_prisma
node_history -->|"reads and writes"| node_prisma
node_auth -->|"reads and writes"| node_prisma
node_auth -.-> node_history
node_auth -.->|"delivers codes"| node_sms
node_users -->|"reads and updates"| node_prisma
node_prisma -.->|"persists data"| node_database
node_photo_ui -.->|"recognizes photo"| node_photo_recognition
node_sos_ui -.->|"sends location"| node_sms

click node_android "https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/MainActivity.kt"
click node_navigation "https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/navigation/TripFairNavDisplay.kt"
click node_place_ui "https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/explore/SearchScreen.kt"
click node_itinerary_ui "https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/trip/ItineraryScreen.kt"
click node_group_ui "https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/group/GroupPlanScreen.kt"
click node_photo_ui "https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/camera/CameraScreen.kt"
click node_sos_ui "https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/sos/SosScreen.kt"
click node_auth_ui "https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/auth/LoginScreen.kt"
click node_api "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/app.module.ts"
click node_auth "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/auth/auth.service.ts"
click node_places_controller "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/places/places.controller.ts"
click node_places "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/places/places.service.ts"
click node_history "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/search-history/search-history.service.ts"
click node_favorites_controller "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/favorites/favorites.controller.ts"
click node_favorites "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/favorites/favorites.service.ts"
click node_users "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/users/users.controller.ts"
click node_prisma "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/prisma/prisma.service.ts"
click node_google_places "https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/places/google/google-places.client.ts"

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_android,node_navigation,node_place_ui,node_itinerary_ui,node_group_ui,node_photo_ui,node_sos_ui,node_auth_ui toneBlue
class node_auth,node_places_controller,node_places,node_history,node_favorites_controller,node_favorites,node_users,node_database toneAmber
class node_prisma,node_google_places,node_google_api toneMint
class node_api toneRose
class node_traveler,node_sms,node_photo_recognition toneIndigo
```

## Components

### Android app

- [Android entry](https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/MainActivity.kt): `android/app/src/main/java/com/tripfair/app/MainActivity.kt`
- [App navigation](https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/navigation/TripFairNavDisplay.kt): `android/app/src/main/java/com/tripfair/app/navigation/TripFairNavDisplay.kt`
- [Place discovery](https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/explore/SearchScreen.kt): `android/app/src/main/java/com/tripfair/app/ui/screens/explore/SearchScreen.kt`
- [Trip itineraries](https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/trip/ItineraryScreen.kt): `android/app/src/main/java/com/tripfair/app/ui/screens/trip/ItineraryScreen.kt`
- [Group planning](https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/group/GroupPlanScreen.kt): `android/app/src/main/java/com/tripfair/app/ui/screens/group/GroupPlanScreen.kt`
- [Photo search](https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/camera/CameraScreen.kt): `android/app/src/main/java/com/tripfair/app/ui/screens/camera/CameraScreen.kt`
- [Emergency SOS](https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/sos/SosScreen.kt): `android/app/src/main/java/com/tripfair/app/ui/screens/sos/SosScreen.kt`
- [Account screens](https://github.com/duckluyencode/fairtrip-nt118/blob/main/android/app/src/main/java/com/tripfair/app/ui/screens/auth/LoginScreen.kt): `android/app/src/main/java/com/tripfair/app/ui/screens/auth/LoginScreen.kt`

### Backend domains

- [Authentication](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/auth/auth.service.ts): `backend/src/auth/auth.service.ts`
- [Places endpoints](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/places/places.controller.ts): `backend/src/places/places.controller.ts`
- [Place discovery logic](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/places/places.service.ts): `backend/src/places/places.service.ts`
- [Search history](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/search-history/search-history.service.ts): `backend/src/search-history/search-history.service.ts`
- [Favorites endpoints](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/favorites/favorites.controller.ts): `backend/src/favorites/favorites.controller.ts`
- [Favorites logic](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/favorites/favorites.service.ts): `backend/src/favorites/favorites.service.ts`
- [User profile](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/users/users.controller.ts): `backend/src/users/users.controller.ts`

### Data and integrations

- [Database access](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/prisma/prisma.service.ts): `backend/src/prisma/prisma.service.ts`
- [Google Places client](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/places/google/google-places.client.ts): `backend/src/places/google/google-places.client.ts`

### API platform

- [NestJS API](https://github.com/duckluyencode/fairtrip-nt118/blob/main/backend/src/app.module.ts): `backend/src/app.module.ts`

### Other components

- **Traveler**
- **Google Places API**
- **MySQL database**
- **SMS delivery**
- **Photo recognition**

## Connections

- Traveler → Android entry: opens app
- Android entry → App navigation: starts (evidence: `android/app/src/main/java/com/tripfair/app/MainActivity.kt`)
- Traveler → Place discovery: searches places (evidence: `README.md`)
- Traveler → Trip itineraries: plans trips (evidence: `README.md`)
- Traveler → Group planning: plans together (evidence: `README.md`)
- Traveler → Photo search: searches by photo (evidence: `README.md`)
- Traveler → Emergency SOS: requests help (evidence: `README.md`)
- Traveler → Account screens: signs in
- Android entry → NestJS API: uses API
- NestJS API → Authentication: registers module (evidence: `backend/src/app.module.ts`)
- NestJS API → Places endpoints: registers module (evidence: `backend/src/app.module.ts`)
- NestJS API → Favorites endpoints: registers module (evidence: `backend/src/app.module.ts`)
- NestJS API → Search history: registers module (evidence: `backend/src/app.module.ts`)
- Places endpoints → Place discovery logic: calls (evidence: `backend/src/places/places.controller.ts`)
- Place discovery logic → Database access: queries (evidence: `backend/src/places/places.service.ts`)
- Place discovery logic → Search history: records searches (evidence: `backend/src/places/places.service.ts`)
- Place discovery logic → Google Places client: searches places (evidence: `backend/src/places/places.service.ts`)
- Google Places client → Google Places API: queries (evidence: `README.md`)
- Favorites endpoints → Favorites logic: calls (evidence: `backend/src/favorites/favorites.controller.ts`)
- Favorites logic → Place discovery logic: loads summaries (evidence: `backend/src/favorites/favorites.service.ts`)
- Favorites logic → Database access: reads and writes (evidence: `backend/src/favorites/favorites.service.ts`)
- Search history → Database access: reads and writes (evidence: `backend/src/search-history/search-history.service.ts`)
- Authentication → Database access: reads and writes (evidence: `backend/src/auth/auth.service.ts`)
- Authentication → Search history
- Authentication → SMS delivery: delivers codes
- User profile → Database access: reads and updates (evidence: `backend/src/users/users.controller.ts`)
- Database access → MySQL database: persists data (evidence: `README.md`)
- Photo search → Photo recognition: recognizes photo (evidence: `README.md`)
- Emergency SOS → SMS delivery: sends location (evidence: `README.md`)
