     guard let first = mapManager.trip.segments.first else { preconditionFailure() }
     try! self.init(startingOn: first, mapManager: mapManager)
   }
+  
+  public convenience init(trip: Trip) {
+    guard let first = trip.segments.first else { preconditionFailure() }
+    try! self.init(startingOn: first)
+  }
+
   
   required init?(coder: NSCoder) {
     // TODO: Implement to support state-restoration

  /// mode-by-mode basis of a trip.
  ///
  /// - Parameter segment: Segment to focus on first
  public init(startingOn segment: TKSegment, mapManager: TKUITripMapManager) throws {
    guard segment.trip == mapManager.trip else {
      throw Error.segmentTripDoesNotMatchMapManager
    }
    
    // TODO: Segment.index works generally, but not for the first and last
    //   card, i.e., departure and arrival as those don't have an index

    let cardSegments = segment.trip.segments(with: .inDetails).compactMap { $0 as? TKSegment }
    
    let segmentCards: [SegmentCards] = cardSegments.map {
      let cards = TKUITripModeByModeCard.config.builder.cards(for: $0, mapManager: tripMapManager)
      return SegmentCards(segmentIndex: $0.index, cards: cards)
    }
    let cards = segmentCards.flatMap { $0.cards }
