Skip to content

Trips

A trip is a higher-level grouping of related flights, cruise voyages, and bookings. Where a tag is a free-form label, a trip has its own page with its own statistics — and it can span both flights and cruises in a single journey.

ConceptExampleBest for
Tagbusiness, family, 2026Quick filters across years
Trip”Honeymoon 2024”, “Q3 client visits”One specific journey with start, end, story

You can absolutely use just tags and never make a trip; many users do. Trips earn their keep when you want to remember a particular journey as a unit — not “all my business flights” but “that one work trip to Japan in March”.

Trips → Add Trip. Fields:

  • Name — what you’ll see in the trip list
  • Date range (optional) — start and end dates
  • Statusplanned, in progress, or completed (defaults to completed)
  • Category (optional) — vacation, business, weekend, family, or other
  • Colour — used to tint the trip’s map arcs and timeline dots. Auto-assigned from a palette if you don’t pick one
  • Icon (optional) — an emoji to brand the trip
  • Description (optional) — free-form notes (the trip page also has a separate markdown notes field)
  • Cover image (optional) — uploaded photo for the trip header
  • Companions (optional) — who you travelled with
  • Tags (optional) — free-form labels on the trip

Save. The trip is empty until you add flights or cruises to it.

The flight form — both when creating a flight and when editing an existing one — has a Trip dropdown. Pick an existing trip or create a new one inline. The flight joins the trip and its statistics recompute.

A cruise joins a trip the same way, via the Trip selector on the cruise form. Cruise imports can also assign the imported cruise (and any fly-and-cruise flights) to a trip right in the import preview.

A flight or cruise belongs to only one trip at a time. Moving between trips is fine; assigning to two simultaneously is not supported (use tags for cross-cutting categorisation).

TravStats can propose trips from your existing flights. Trips → Detect trips runs a set of heuristics — flights sharing a booking reference, out-and-back loops from your home airport, and chains of connecting flights within a short window — and suggests clusters of three or more flights as candidate trips. It’s a dry run by default: you review, rename, and choose which proposals to keep before anything is created.

Detection works on flights only, and it deliberately leaves simple two-leg out-and-back trips alone — a flight is a first-class record without needing a trip wrapped around it.

Each trip has its own dashboard, organised into tabs:

  • Overview — summary tiles (flights, cruises, countries, companions, total booked cost, tags), an optional AI-generated trip summary, and your notes
  • Timeline — a merged, chronological view of every flight, cruise, stop, and journal entry, colour-dotted by domain
  • Map — a deck.gl / MapLibre map with flight arcs and cruise paths, airports and port stops, and a globe / flat projection toggle
  • Gallery — photos you’ve uploaded for the trip
  • Logistics — tables of the trip’s flights, cruises, and bookings, with a total booked cost

Statistics are scoped to this trip only; cruise tiles appear when the cruise domain is enabled. Trips also appear on the main dashboard as a separate strip below the “recent flights” list — Recent trips, sorted by their end date.

Flight detail → Trip dropdown → set to “(none)” — or use the unlink icon next to the flight on the trip page. The flight detaches from the trip; it stays in your overall flight history, just no longer associated with that journey. Cruises unlink the same way.

Trip detail → … → Delete trip. Deleting a trip keeps your flights and cruises — they’re simply unlinked and stay in your overall history, and any bookings are unlinked too. Only the trip’s own content — its photos, stops, and journal entries — is removed with it. To undo an entire import, delete the imported flights and cruises separately afterwards.

The pragmatic rules:

Use a tag when:

  • You want to slice across years (“all family flights”)
  • You want to combine multiple criteria (“business + premium-cabin”)
  • You want a label that applies to non-trip-related categorisation (“emergency”, “milestone-100k”)

Use a trip when:

  • The flights belong to one specific journey with a name
  • You want a dedicated dashboard for that journey
  • You’re going to share the trip page with someone (e.g. a family member who also flew the same itinerary)
  • You want photos and notes alongside the flights

You can use both at once: tag a flight family and assign it to the “Vacation Greece 2024” trip. The tag covers your “all family flights ever” view; the trip covers the one-journey-as-a-unit view.

A booking groups one or more flights and cruises under a shared reservation — its PNR (booking reference), price, and currency. A booking can be attached to a trip, in which case its cost rolls up into the trip’s totals.

Bookings surface in the trip’s Logistics tab, which lists each booking alongside the flights and cruises it covers and sums a “total booked” figure for the whole journey. This is how the trip page knows what a journey cost.

The dashboard’s Trips map mode (different from the Trips page — see Maps) animates each trip as one continuous flight path through time. Useful for showing off a year of travel without having to manually arrange every flight.

Settings → API Tokens mint a write-scoped PAT, then:

Terminal window
# List trips
curl -fsS \
-H "Authorization: Bearer $TOKEN" \
https://travstats.example.com/api/v1/trips
# Create a trip
curl -fsS -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Honeymoon 2024","startDate":"2024-09-15","endDate":"2024-09-30"}' \
https://travstats.example.com/api/v1/trips

Full endpoint reference: REST API.

  • A flight or cruise belongs to one trip at a time — use tags for cross-cutting categorisation
  • No cross-user trip sharing yet (sharing your trip page with a family member who has their own TravStats user requires re-creating the trip on their side; on the roadmap)
  • The AI trip summary needs a configured local LLM (Ollama) — without one, the summarise button returns an error
  • Automatic detection works on flights only; cruises aren’t auto-detected and are added to trips manually