Itinerary
The itinerary is the day-by-day timeline view of a trip. Every booking — flight, hotel night, ground transport, activity, restaurant — projects onto the same timeline, grouped by day in your timezone.
How it works
Section titled “How it works”Moonjar walks every booking on the trip and projects each into a unified itinerary item with:
- Title and subtitle — type-specific (a flight shows the route; a hotel shows the property name and city).
- Start and end — UTC timestamps plus the local timezone of the origin (so flights are timed by their departure city, not by yours).
- Local day — the YYYY-MM-DD bucket the item lives under in your viewing timezone. This is the day-header in the timeline.
- Origin and destination for multi-leg types (flights, rail, bus, ferry); a single place for point types (hotels, restaurants, activities).
- Type-specific details — gates, terminals, room numbers,
party size — exposed as a
metaobject that the trip card uses. - Transit gap — the minutes between this item and the previous one, computed server-side so the timeline can show “3h 40m later” between a flight landing and a hotel check-in.
- Status — confirmed, candidate, cancelled.
Items that cross midnight (a 23:30 flight that lands the next day) stay on their departure day in the timeline; the end timestamp is preserved so the card can render the duration spanning into tomorrow.
Confirmed vs candidate
Section titled “Confirmed vs candidate”Bookings have two states in the itinerary:
- Confirmed — a real, scheduled booking. Always shown.
- Candidate — draft / planning state. “Considering this hotel but haven’t booked yet.” Only shown when you’re in the trip’s Planning view; hidden from the live timeline.
Public share links for trips show only confirmed items.
Cruises
Section titled “Cruises”Cruises are special-cased. The booking row covers the whole cruise;
each port of call expands as its own line on the day it’s visited,
with a parent_id linking back to the cruise booking.
Cost rollup
Section titled “Cost rollup”Each item carries a total_cost (when set), so the Planning layout
can roll the trip up to a per-day or per-trip subtotal. Cruise port
rows have no cost — the cost lives on the parent cruise booking.