* feat(reservations): native booking-confirmation import via KDE KItinerary
Adds a two-step preview → confirm flow for importing booking emails,
PDFs, PKPass and HTML confirmations. The server invokes the KDE
kitinerary-extractor binary, maps JSON-LD schema.org output to TREK
reservation shapes, and persists via the existing createReservation
pipeline (accommodations, budget, places, WebSocket broadcasts).
- NestJS BookingImportModule: preview + confirm endpoints under
/api/trips/:tripId/reservations/import/booking{,/confirm}
- KitineraryExtractorService: spawns the binary, filters stderr noise,
handles QDateTime (@value) timezone-aware datetimes
- kitinerary-mapper: FlightReservation, TrainReservation, BusReservation,
BoatReservation, LodgingReservation, FoodEstablishmentReservation,
RentalCarReservation, EventReservation → typed preview items
- BookingImportService: auto-creates place rows; geocodes venues without
coordinates via Nominatim (name+address → address → name fallback);
resolves day IDs for accommodation linking
- BookingImportModal: drag-and-drop multi-file upload, preview cards
with type icons, per-item exclude toggle, confirm step
- Shared Zod contracts: BookingImportPreviewItem, PreviewResponse,
ConfirmRequest, ConfirmResponse — consumed by controller, service,
API client and modal
- Dockerfile: node:24-trixie-slim runtime; amd64 downloads KDE static
binary + locales; arm64 installs libkitinerary-bin + symlinks to
fixed path; ENV KITINERARY_EXTRACTOR_PATH set for both arches
- /api/health/features exposes { bookingImport: boolean } so the UI
hides the Import button when the binary is absent
- i18n keys (English), wiki docs, API.md, README one-liner
* i18n: add booking import translations for all 19 non-English locales
Adds 17 reservations.import.* keys and undo.importBooking to ar, br, cs,
de, es, fr, gr, hu, id, it, ja, ko, nl, pl, ru, tr, uk, zh, zh-TW.
* chore: enforce i18n parity
* docs(wiki): add KItinerary local setup instructions to dev environment guide
3.6 KiB
Transport: Flights, Trains & Cars
Log flights, trains, car rentals, and cruises with departure and arrival endpoints, times, and transit-specific details.
Where to create
Open the Transports tab in the trip planner and click Add, or open the planner from a day view and use the transport shortcut. Transport records appear in the Reservations panel alongside other bookings.
Transport types
Four types are available: Flight, Train, Car, Cruise.
Common fields
All transport types share these fields:
| Field | Notes |
|---|---|
| Title | Required |
| Departure day | Linked to a trip day |
| Departure time | Optional |
| Arrival day | Linked to a trip day (can differ from departure day) |
| Arrival time | Optional |
| Booking / confirmation code | Optional |
| Status | Pending or Confirmed |
| Notes | Optional free text |
Endpoints
Flights
The departure and arrival fields use the Airport picker — type a city name or IATA code (minimum two characters) to search. Results show the IATA code, airport name, city, and country.
Once you select an airport, the timezone for that airport appears next to the time field. This lets you enter local departure and arrival times without confusion across time zones.
Trains, cars, and cruises
Departure and arrival fields use the generic location picker — search by place name or enter a free-text location. Results come from the maps search service.
For car rentals, the departure field is labelled Pickup date/time and the arrival field is labelled Return date/time.
Flight-specific fields
When the type is set to Flight, two additional fields appear:
- Airline — carrier name (e.g. Lufthansa)
- Flight number — (e.g. LH 123)
Train-specific fields
When the type is set to Train, three additional fields appear:
- Train number — (e.g. ICE 123)
- Platform — platform or track number
- Seat — seat or coach assignment
On the map
Transport records with both endpoints set appear as lines on the trip map:
- Flights and cruises render as geodesic great-circle curves that follow the curvature of the Earth.
- Trains and cars render as straight polylines between the two endpoints.
Confirmed bookings are drawn as solid lines; pending bookings use a dashed line. Endpoint markers are shown at each location. For flights, a midpoint label appears along the arc showing the route codes (e.g. ZRH → JFK) and flight duration and distance when enough screen space is available.
See Map-Features for details on how these overlays work.
In the day plan
When a transport is assigned to a day, it appears inline in the day timeline between places. Multi-day transports show phase labels depending on the type:
| Type | Start day | Middle days | End day |
|---|---|---|---|
| Flight | Departure | In transit | Arrival |
| Car rental | Pickup | Active | Return |
| Train / Cruise | Start | Ongoing | End |
See Day-Plans-and-Notes for details.
Faster: import the confirmation — If you have a booking confirmation email or PDF, you can skip the form entirely. See Import from booking confirmation in the Reservations guide.
See also: Reservations-and-Bookings · Accommodations · Map-Features · Day-Plans-and-Notes