Honeymoon

Honeymoon Honeymoon

A swipe-to-match style app to help users select a honeymoon destination, this app features CloudKit Core Data and full-featured interactivity.

  • iOS 15+


  • SwiftUI 2.0

Concept

The Honeymoon app is designed to emulate the functionality of many swipe-to-match style platforms, typically reserved for social networking and dating apps. Adapting the concept, this design is intended to help couples mutually agree upon a honeymoon destination, by using a blind matching method. In concept, a couple would link their accounts, and swipe to indicate yes or no, against a destination set. When both users select yes for the same destination, the app would indicate a match has been made, and provide the users with the ability to book their travel arrangements by linking to a third-party travel platform.

Solution

To accomodate the primarily gesture based interactions of the user, the UI for the Honeymoon app needs to be largely vacant, to prevent unwanted interactions or accidental triggers of outlying page elements. With this in mind, a majority of the screen real estate is reserved for the destination cards and their gesture controls. To account for accessible users, a set of buttons is provided in the outer corners of the page, to enable the same interactions without the need for the user to perform the requisite gestures.


The main view is monopolized by the location cards themselves, and the required logic and gestures which drive the card stack and matching system. The cards themselves are a custom component which is populated by consuming the related data set, and presented in a ForEach loop, as utilized many times in previous projects.

Reload

Analysis

Implementing the gesture system presented a unique set of challenges in this build as the gesture recognition required monitoring the drag direction and distance, to perform two separate function (i.e., liking or dismissing a location). This required nested functions and logic to drive the application, and ensure that the gestures were properly recognized and applied.

The ForEach loop used to present the card stack differs from previous designs as the card stack design is intended to be a repeating stack instead of a terminating list like in previous implementations. This means that when a card is swiped from the screen, if a match is not received, the card is eligible to return to the stack. It is only when both users dismiss a selected location, and a match is found on a different card that the card is permanently removed from rotation. This ensures that if a match is not found in a single pass, the users are able to perform subsequent passes to attempt a match.

As a limited prototype, this app is missing some of the desired functionality from the concept design. Future enhancements to this app could be realized by developing this functionality, primarily the ability to connect to a partner travel booking platform, or introducing new functionality such as location sharing, in-app chat, or even the ability to parse pricing based on an originating location and selected to/from dates.