Flights? Hotels? Attractions? All here, in one app

The idea for a trip planner came about beacuse I wanted to refine the process for how trips were planned, from the hotel and flight reservations to choosing what places to visit. With so many websites offering different services, it can be hard to make a cohesive plan for a vacation. The idea with VacayAway was to make an app that was able to combine hotel reservations, cheapest flight selections, and intelligent itinerary planning and scheduling all in one app. Check out the VacayAway source code here.

I am completing this project individually.

Tech Stack:
Python Javascript ReactJS PyTorch Flask
GoogleCloud Firebase
LufthansaAPI GoogleMapsAPI AmadeusAPI

Storage and Authentication

I wanted to approach the development of the project working through the app as a user would navigate though it, starting with user navigation. Instead of setting up my own backend like I had done in a previous project with MongoDB, I wanted to try getting comfortable with cloud services, such as Google Cloud and Firebase.

Firebase allowed for simple authentication and storage, so I started incorporating these Firebase services into the ReactJS UI and storing info in a JSON-like format in the database. The Firebase database UI is shown here.

Info Gathering and Data Cleaning

A big part of the project consisted of getting the required infomation from various sources. There was no central database to find cheapest flights, things to do, and hotels all in one place, so I spent some time identifying APIs that could be readily integrated into the program. Preferably, I tried to use APIs that had a free tier and would allow for many API calls to ensure an unhindered testing process.

APIs of notable mention include the Lufthansa API and Amadeus API which I used collectively to find flights, the Google Places API to find attractions and hotels, and the Google Maps API to visually display all of the above. Seen right is an example of a Google Places API call in the browser environment.

Flask and Servers

Once I identified a list of attractions, I needed to find a way to intelligently organize them so that on a particular day, a tourist wouldnt be travelling to opposite ends of the city to complete their itinerary.

K-means grouping is a method of machine learning (unsupervised learning) which groups points into clusters. I implemented k-means grouping using PyTorch in a Python app, and by connecting the ReactJS frontend with the Python app using Flask, I was able to quickly group the attractions and display them on the map. Seen left is an example of two clusters of attractions.

Future Development Steps

With the k-means grouping complete, I simply need to find a way to schedule events throughout the day and display the itinerary in user-friendly format. Since I have already incorporated the database into the program, this information will persist in the program even if the user logs out.
I am currently working on hosting the app using Firebase Hosting, but with the inclusion of the Python Flask server, I have to revisit my plan for how to host both the frontend ReactJS and the Flask app together.
Other than these core features, the rest of the development will focus on improving the program's UI and user's overall experience.