Cruises
Cruises are TravStats’ second first-class domain. A cruise lives in the same database, on the same map, and in the same statistics as your flights — a trip can mix both. This page covers the data model, the three ways to add a cruise, and what cruises add to the maps, stats and achievements.
The data model
Section titled “The data model”A cruise is a voyage with an ordered list of stops:
- Voyage — ship, cruise line, departure port, arrival port, start/end date, cabin number, cabin type (inside · oceanview · balcony · suite), deck, booking reference, price, status (scheduled · sailed · cancelled · historical), plus tags and companions.
- Stops — each stop is either a port call (a real port, with optional arrival/departure times and an excursion note) or a sea day (a day at sea, no port). Day numbers stay consecutive (1, 2, 3 …).
Scheduled cruises whose end date passed more than 48 hours ago flip to completed automatically; cancelled and historical entries are never touched.
Adding a cruise
Section titled “Adding a cruise”Click + Add cruise (on the Cruises page or the dashboard’s cruise tab) and pick a method — the same chooser style as the flight add flow:
Import a booking (email or PDF)
Section titled “Import a booking (email or PDF)”Drop in a booking confirmation as an .eml/.msg/.txt email or a
PDF — the format is auto-detected. A local LLM (Ollama, e.g.
gemma3:12b) extracts the whole booking:
- ship, cruise line, start/end dates, cabin (number, type, deck), booking reference and price;
- the complete itinerary — every port call and every sea day, in order;
- any fly & cruise flights bundled with the booking (see below).
AIDA and TUI Cruises / Mein Schiff confirmations are handled directly; other lines (MSC, Costa, Cunard, NCL, Royal Caribbean, …) go through a generic LLM path. Because LLM extraction is never perfect, you always land on an editable review screen before anything saves:
- every field is editable inline — ship (matched to the catalogue by name, or flagged if unknown), dates, cabin, price, booking reference;
- the itinerary opens in a stops editor where you can fix ports, toggle sea days, reorder and renumber;
- ports the parser couldn’t match to the catalogue are flagged so you can pick the right one;
- mis-read values are obvious and quick to correct.
Fly & cruise
Section titled “Fly & cruise”Cruise bookings are often “fly & cruise” packages that also list flights. The importer pulls those out too and offers them as opt-in flight cards in the same review screen:
- flight number, airline, cabin class and a date are pre-filled from the booking (exact times are usually only released ~4 months out, so the flights save as scheduled);
- airports are pre-filled — your home airport on the home side, and the nearest airport to the embarkation/disembarkation port on the cruise side — and are fully editable;
- a single tick groups the cruise and its flights into one trip, so the journey map draws the whole fly → cruise → fly route.
Manual entry
Section titled “Manual entry”The form for older voyages nobody has a confirmation for any more. A ship picker matches the catalogue (or lets you add a custom ship), and the stops editor builds the itinerary port by port.
Ships & ports
Section titled “Ships & ports”TravStats ships with seeded ship and port catalogues. Both are extendable — when a picker can’t find a ship or port, add it inline with its details (a port needs a name and coordinates). User-added entries are preserved across catalogue re-seeds.
On the map
Section titled “On the map”Cruise routes are drawn as sea routes, not straight lines — an in-house router follows real shipping lanes (the vendored Eurostat marnet network) between ports, falling back to a smooth curve when a leg crosses open or disconnected water. Cruises render on the same 2D map and 3D globe as flights; the dashboard’s cruise tab adds a port-frequency view that sizes ports by how often you’ve called there.
Statistics
Section titled “Statistics”Cruise figures merge into the dashboard rather than living in a separate silo: cruise distance (in km / nautical miles) sits alongside flight kilometres, and ports, sea days and cruise lines feed the overview and the Advanced Stats page. Filters and the year picker apply to cruises and flights together.
Achievements
Section titled “Achievements”Cruises bring their own achievement set, unlocking automatically as you log voyages — for example:
- Counts — Leinen los (first cruise) → Sea Explorer (5) → Cruise Enthusiast (10) → Seven Seas (25) → Neptune’s Favorite (50).
- Ports — Port Hopper (5 unique ports) → Harbor Tour (25) → Harbor Master (50), plus Mega Cruise (10+ ports on one voyage).
- Ships & lines — Captain’s Log (first ship) → Fleet Sampler (5) → Naval Curator (15); Loyal Sailor, Line Hopper, and the hidden Carnival Collector (sail all eight Carnival-group brands).
- Distance — Coastal Runner (5 000 km) → Open Water (20 000) → Bluewater Captain (50 000) → Circumnavigator (100 000 km, ≈ 2.5× around the Earth).
- Sea days — starting with Sea Legs (your first day at sea).
Flight achievements are untouched — the two domains unlock independently.
A trip groups flights and cruises into one journey with its own page and cross-domain map. Fly & cruise imports create the trip for you; you can also assign cruises to an existing trip by hand.