# phanindra798/tripgen-ai architecture

> Architecture diagram of the GitHub repository phanindra798/tripgen-ai, 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/phanindra798/tripgen-ai
- Repository: https://github.com/phanindra798/tripgen-ai

## Overview

TripGen AI turns a natural-language trip request into a researched, day-by-day travel plan. The main workflow accepts a request through FastAPI, researches flights and hotels in parallel, composes an itinerary, structures it for the dashboard, and summarizes the result; the service can return it at once or stream agent progress. The browser presents the plan and supports timeline and budget views, saved trips, and PDF export. README documents these capabilities; some frontend and graph wiring is only partially sampled, so uncertain implementation links are omitted.

Main entry points: [`static/script.js`](https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js) (Dashboard interface), [`src/graph.py`](https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py) (Planning API), [`app.py`](https://github.com/phanindra798/tripgen-ai/blob/main/app.py) (FastAPI routes), [`src/tools/flights.py`](https://github.com/phanindra798/tripgen-ai/blob/main/src/tools/flights.py) (Flight lookup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_service["API service"]
  node_app["FastAPI routes<br/>[app.py]"]
end

subgraph group_planning["Trip planning"]
  node_planner_api["Planning API<br/>[graph.py]"]
  node_itinerary["Itinerary composition<br/>[graph.py]"]
  node_schedule["Schedule structuring<br/>[graph.py]"]
  node_summary["Trip summary<br/>[graph.py]"]
  node_checkpoint[("Thread checkpoint<br/>[graph.py]")]
end

subgraph group_research["Travel research"]
  node_flight_research["Flight research<br/>[graph.py]"]
  node_airport_resolver["Airport resolver<br/>[flights.py]"]
  node_flight_lookup["Flight lookup<br/>[flights.py]"]
  node_hotel_research["Hotel research<br/>[graph.py]"]
  node_hotel_search["Hotel search<br/>[search.py]"]
end

subgraph group_browser["Trip dashboard"]
  node_page["Page template<br/>[index.html]"]
  node_frontend["Dashboard interface<br/>[script.js]"]
  node_styles["Dashboard styling<br/>[style.css]"]
  node_saved_trips[("Saved trips<br/>[script.js]")]
  node_plan_views["Plan views<br/>[script.js]"]
  node_pdf_export["PDF export<br/>[script.js]"]
end

node_traveler(("Traveler"))
node_browser(("Web browser"))
node_aviationstack["AviationStack"]
node_tavily["Tavily search"]
node_groq["Groq LLM"]

node_traveler -->|"enters request"| node_browser
node_browser -->|"uses"| node_frontend
node_frontend -->|"posts request"| node_app
node_app -->|"serves page"| node_page
node_app -->|"invokes"| node_planner_api
node_planner_api -->|"dispatches"| node_flight_research
node_planner_api -->|"dispatches"| node_hotel_research
node_flight_research -->|"resolves route"| node_airport_resolver
node_flight_research -->|"requests flights"| node_flight_lookup
node_flight_lookup -->|"fetches schedules"| node_aviationstack
node_flight_research -->|"supplies flight results"| node_itinerary
node_hotel_research -->|"searches hotels"| node_hotel_search
node_hotel_search -->|"queries"| node_tavily
node_hotel_research -->|"supplies hotel results"| node_itinerary
node_itinerary -->|"generates prose"| node_groq
node_schedule -->|"generates JSON"| node_groq
node_summary -->|"generates summary"| node_groq
node_planner_api -->|"composes after research"| node_itinerary
node_itinerary -->|"structures plan"| node_schedule
node_schedule -->|"passes schedule"| node_summary
node_planner_api -->|"checkpoints thread"| node_checkpoint
node_app -->|"returns or streams plan"| node_frontend
node_frontend -->|"renders results"| node_plan_views
node_frontend -->|"reads and writes"| node_saved_trips
node_frontend -->|"exports plan"| node_pdf_export
node_plan_views -->|"uses styles"| node_styles
node_frontend -->|"displays plan"| node_browser

click node_app "https://github.com/phanindra798/tripgen-ai/blob/main/app.py"
click node_planner_api "https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py"
click node_flight_research "https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py"
click node_airport_resolver "https://github.com/phanindra798/tripgen-ai/blob/main/src/tools/flights.py"
click node_flight_lookup "https://github.com/phanindra798/tripgen-ai/blob/main/src/tools/flights.py"
click node_hotel_research "https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py"
click node_hotel_search "https://github.com/phanindra798/tripgen-ai/blob/main/src/tools/search.py"
click node_itinerary "https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py"
click node_schedule "https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py"
click node_summary "https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py"
click node_checkpoint "https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py"
click node_page "https://github.com/phanindra798/tripgen-ai/blob/main/templates/index.html"
click node_frontend "https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js"
click node_styles "https://github.com/phanindra798/tripgen-ai/blob/main/static/style.css"
click node_saved_trips "https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js"
click node_plan_views "https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js"
click node_pdf_export "https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js"

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_browser toneBlue
class node_planner_api,node_itinerary,node_schedule,node_summary,node_checkpoint toneAmber
class node_flight_research,node_airport_resolver,node_flight_lookup,node_hotel_research,node_hotel_search toneMint
class node_page,node_frontend,node_styles,node_saved_trips,node_plan_views,node_pdf_export toneRose
class node_traveler,node_aviationstack,node_tavily,node_groq toneIndigo
```

## Components

### API service

- [FastAPI routes](https://github.com/phanindra798/tripgen-ai/blob/main/app.py): `app.py`

### Trip planning

- [Planning API](https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py): `src/graph.py`
- [Itinerary composition](https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py): `src/graph.py`
- [Schedule structuring](https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py): `src/graph.py`
- [Trip summary](https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py): `src/graph.py`
- [Thread checkpoint](https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py): `src/graph.py`

### Travel research

- [Flight research](https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py): `src/graph.py`
- [Airport resolver](https://github.com/phanindra798/tripgen-ai/blob/main/src/tools/flights.py): `src/tools/flights.py`
- [Flight lookup](https://github.com/phanindra798/tripgen-ai/blob/main/src/tools/flights.py): `src/tools/flights.py`
- [Hotel research](https://github.com/phanindra798/tripgen-ai/blob/main/src/graph.py): `src/graph.py`
- [Hotel search](https://github.com/phanindra798/tripgen-ai/blob/main/src/tools/search.py): `src/tools/search.py`

### Trip dashboard

- [Page template](https://github.com/phanindra798/tripgen-ai/blob/main/templates/index.html): `templates/index.html`
- [Dashboard interface](https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js): `static/script.js`
- [Dashboard styling](https://github.com/phanindra798/tripgen-ai/blob/main/static/style.css): `static/style.css`
- [Saved trips](https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js): `static/script.js`
- [Plan views](https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js): `static/script.js`
- [PDF export](https://github.com/phanindra798/tripgen-ai/blob/main/static/script.js): `static/script.js`

### Other components

- **Traveler**
- **Web browser**
- **AviationStack**
- **Tavily search**
- **Groq LLM**

## Connections

- Traveler → Web browser: enters request
- Web browser → Dashboard interface: uses
- Dashboard interface → FastAPI routes: posts request
- FastAPI routes → Page template: serves page
- FastAPI routes → Planning API: invokes
- Planning API → Flight research: dispatches
- Planning API → Hotel research: dispatches
- Flight research → Airport resolver: resolves route
- Flight research → Flight lookup: requests flights
- Flight lookup → AviationStack: fetches schedules
- Flight research → Itinerary composition: supplies flight results
- Hotel research → Hotel search: searches hotels
- Hotel search → Tavily search: queries
- Hotel research → Itinerary composition: supplies hotel results
- Itinerary composition → Groq LLM: generates prose
- Schedule structuring → Groq LLM: generates JSON
- Trip summary → Groq LLM: generates summary
- Planning API → Itinerary composition: composes after research
- Itinerary composition → Schedule structuring: structures plan
- Schedule structuring → Trip summary: passes schedule
- Planning API → Thread checkpoint: checkpoints thread
- FastAPI routes → Dashboard interface: returns or streams plan
- Dashboard interface → Plan views: renders results
- Dashboard interface → Saved trips: reads and writes
- Dashboard interface → PDF export: exports plan
- Plan views → Dashboard styling: uses styles
- Dashboard interface → Web browser: displays plan
