# haitriu301/smart-trip-planner architecture

> Architecture diagram of the GitHub repository haitriu301/smart-trip-planner, 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/haitriu301/smart-trip-planner
- Repository: https://github.com/haitriu301/smart-trip-planner

## Overview

Smart Trip Planner is currently a web application for account lifecycle and trip planning. A user registers and verifies an account, signs in, then reaches protected trip pages to create and manage trips and their calendar days. The backend exposes separate authentication, trip, and trip-day endpoints, with services coordinating domain behavior and repositories persisting state. The README also describes maps, weather, collaboration, realtime editing, costs, Stripe, and AI as later phases; those capabilities are not represented as implemented components here. Some frontend imports are absent from the supplied tree, so their wiring is omitted.

Main entry points: [`backend/src/main/java/com/trieu/tripplanner/service/AuthService.java`](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/AuthService.java) (Account lifecycle), [`frontend/src/api/client.ts`](https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/api/client.ts) (API client), [`backend/src/main/java/com/trieu/tripplanner/service/TripDayService.java`](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/TripDayService.java) (Day management), [`frontend/src/App.tsx`](https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/App.tsx) (React application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web client"]
  node_webapp["React application<br/>[App.tsx]"]
  node_session["Session bootstrap<br/>[main.tsx]"]
  node_httpclient["API client<br/>[client.ts]"]
  node_authforms["Auth forms"]
  node_tripspage["Trips page<br/>[TripsPage.tsx]"]
end

subgraph group_api["HTTP API"]
  node_authapi["Auth endpoints"]
  node_tripapi["Trip endpoints"]
  node_dayapi["Trip-day endpoints"]
  node_security["JWT security"]
  node_errors["Error responses"]
end

subgraph group_domain["Domain services"]
  node_authservice["Account lifecycle<br/>[AuthService.java]"]
  node_refreshservice["Refresh sessions"]
  node_verifyservice["Verification tokens"]
  node_tripservice["Trip management<br/>[TripService.java]"]
  node_dayservice["Day management"]
  node_mailservice["Mail delivery<br/>[MailService.java]"]
end

subgraph group_persistence["Persistence"]
  node_triprepo[("Trip store")]
  node_dayrepo[("Trip-day store")]
  node_userrepo[("User store")]
  node_refreshtokens[("Refresh-token store")]
  node_verifytokens[("Verification-token store")]
end

node_traveler(("Traveler"))
node_mailprovider["Mail provider<br/>[MailProvider.java]"]

node_traveler -->|"uses"| node_webapp
node_webapp -->|"routes auth"| node_authforms
node_webapp -->|"routes trips"| node_tripspage
node_session -->|"restores session"| node_httpclient
node_authforms -->|"submits requests"| node_httpclient
node_tripspage -->|"requests trips"| node_httpclient
node_httpclient -->|"sends requests"| node_authapi
node_httpclient -->|"sends requests"| node_tripapi
node_tripapi -->|"delegates"| node_tripservice
node_dayapi -->|"delegates"| node_dayservice
node_authapi -->|"delegates"| node_authservice
node_authapi -->|"sets refresh cookie"| node_security
node_dayservice -->|"checks trip"| node_triprepo
node_dayservice -->|"reads and writes days"| node_dayrepo
node_dayservice -->|"reads trip"| node_triprepo
node_authservice -->|"manages sessions"| node_refreshservice
node_authservice -->|"manages tokens"| node_verifyservice
node_refreshservice -->|"reads and writes"| node_refreshtokens
node_verifyservice -->|"reads and writes"| node_verifytokens
node_authservice -->|"loads accounts"| node_userrepo
node_authservice -->|"sends mail"| node_mailservice
node_mailservice -->|"dispatches mail"| node_mailprovider

click node_webapp "https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/App.tsx"
click node_session "https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/main.tsx"
click node_httpclient "https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/api/client.ts"
click node_authforms "https://github.com/haitriu301/smart-trip-planner/tree/main/frontend/src/features/auth"
click node_tripspage "https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/pages/TripsPage.tsx"
click node_authapi "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/controller/AuthController.java"
click node_tripapi "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/controller/TripController.java"
click node_dayapi "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/controller/TripDayController.java"
click node_authservice "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/AuthService.java"
click node_refreshservice "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/RefreshTokenService.java"
click node_verifyservice "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/VerificationTokenService.java"
click node_tripservice "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/TripService.java"
click node_dayservice "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/TripDayService.java"
click node_mailservice "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/MailService.java"
click node_security "https://github.com/haitriu301/smart-trip-planner/tree/main/backend/src/main/java/com/trieu/tripplanner/security"
click node_errors "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/exception/GlobalExceptionHandler.java"
click node_triprepo "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/TripRepository.java"
click node_dayrepo "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/TripDayRepository.java"
click node_userrepo "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/UserRepository.java"
click node_refreshtokens "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/RefreshTokenRepository.java"
click node_verifytokens "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/VerificationTokenRepository.java"
click node_mailprovider "https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/provider/mail/MailProvider.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_webapp,node_session,node_httpclient,node_authforms,node_tripspage toneBlue
class node_authapi,node_tripapi,node_dayapi,node_security,node_errors toneAmber
class node_authservice,node_refreshservice,node_verifyservice,node_tripservice,node_dayservice,node_mailservice toneMint
class node_triprepo,node_dayrepo,node_userrepo,node_refreshtokens,node_verifytokens toneRose
class node_traveler,node_mailprovider toneIndigo
```

## Components

### Web client

- [React application](https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Session bootstrap](https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/main.tsx): `frontend/src/main.tsx`
- [API client](https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/api/client.ts): `frontend/src/api/client.ts`
- [Auth forms](https://github.com/haitriu301/smart-trip-planner/tree/main/frontend/src/features/auth): `frontend/src/features/auth`
- [Trips page](https://github.com/haitriu301/smart-trip-planner/blob/main/frontend/src/pages/TripsPage.tsx): `frontend/src/pages/TripsPage.tsx`

### HTTP API

- [Auth endpoints](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/controller/AuthController.java): `backend/src/main/java/com/trieu/tripplanner/controller/AuthController.java`
- [Trip endpoints](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/controller/TripController.java): `backend/src/main/java/com/trieu/tripplanner/controller/TripController.java`
- [Trip-day endpoints](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/controller/TripDayController.java): `backend/src/main/java/com/trieu/tripplanner/controller/TripDayController.java`
- [JWT security](https://github.com/haitriu301/smart-trip-planner/tree/main/backend/src/main/java/com/trieu/tripplanner/security): `backend/src/main/java/com/trieu/tripplanner/security`
- [Error responses](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/exception/GlobalExceptionHandler.java): `backend/src/main/java/com/trieu/tripplanner/exception/GlobalExceptionHandler.java`

### Domain services

- [Account lifecycle](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/AuthService.java): `backend/src/main/java/com/trieu/tripplanner/service/AuthService.java`
- [Refresh sessions](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/RefreshTokenService.java): `backend/src/main/java/com/trieu/tripplanner/service/RefreshTokenService.java`
- [Verification tokens](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/VerificationTokenService.java): `backend/src/main/java/com/trieu/tripplanner/service/VerificationTokenService.java`
- [Trip management](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/TripService.java): `backend/src/main/java/com/trieu/tripplanner/service/TripService.java`
- [Day management](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/TripDayService.java): `backend/src/main/java/com/trieu/tripplanner/service/TripDayService.java`
- [Mail delivery](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/service/MailService.java): `backend/src/main/java/com/trieu/tripplanner/service/MailService.java`

### Persistence

- [Trip store](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/TripRepository.java): `backend/src/main/java/com/trieu/tripplanner/repository/TripRepository.java`
- [Trip-day store](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/TripDayRepository.java): `backend/src/main/java/com/trieu/tripplanner/repository/TripDayRepository.java`
- [User store](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/UserRepository.java): `backend/src/main/java/com/trieu/tripplanner/repository/UserRepository.java`
- [Refresh-token store](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/RefreshTokenRepository.java): `backend/src/main/java/com/trieu/tripplanner/repository/RefreshTokenRepository.java`
- [Verification-token store](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/repository/VerificationTokenRepository.java): `backend/src/main/java/com/trieu/tripplanner/repository/VerificationTokenRepository.java`

### Other components

- **Traveler**
- [Mail provider](https://github.com/haitriu301/smart-trip-planner/blob/main/backend/src/main/java/com/trieu/tripplanner/provider/mail/MailProvider.java): `backend/src/main/java/com/trieu/tripplanner/provider/mail/MailProvider.java`

## Connections

- Traveler → React application: uses
- React application → Auth forms: routes auth
- React application → Trips page: routes trips
- Session bootstrap → API client: restores session
- Auth forms → API client: submits requests
- Trips page → API client: requests trips
- API client → Auth endpoints: sends requests
- API client → Trip endpoints: sends requests
- Trip endpoints → Trip management: delegates
- Trip-day endpoints → Day management: delegates
- Auth endpoints → Account lifecycle: delegates
- Auth endpoints → JWT security: sets refresh cookie
- Day management → Trip store: checks trip
- Day management → Trip-day store: reads and writes days
- Day management → Trip store: reads trip
- Account lifecycle → Refresh sessions: manages sessions
- Account lifecycle → Verification tokens: manages tokens
- Refresh sessions → Refresh-token store: reads and writes
- Verification tokens → Verification-token store: reads and writes
- Account lifecycle → User store: loads accounts
- Account lifecycle → Mail delivery: sends mail
- Mail delivery → Mail provider: dispatches mail
