Inspiration
"In life, it's not where you go - it's who you travel with." - Charles Schulz
2020 has been tough for the travel-loving members of our team and travel enthusiasts around the world, but we're all looking forward to the day when we can travel again safely and responsibly. We built friendTrips as a tool to help groups easily plan trips together when that day comes.
Currently, group trips are usually planned in email threads or text messages and neither is ideal for exchanging ideas that can be easily referred to again. For example, if someone suggests a specific hotel in a group text and the conversation continues, it is likely that the hotel suggestion text will be very difficult to find a day or two later. Similarly, if people suggest specific flights in an email, there will be a lot of searching to find those flights again after the emails in the thread have moved onto another topic. Planning a trip that involves multiple people also involves getting input about suggestions, but it can be hard keeping track of who likes or dislikes certain ideas. friendTrips seeks to solve all these problems.
What it does
friendTrips allows groups of individuals to plan a trip together and to view all pertinent information in an organized location.
friendTrips lets group members chat, create itineraries, and search for and suggest specific flights and hotels found via the Amadeus API. Each suggestion can be upvoted or downvoted; this allows group members to see at a glance what other group members think about a specific hotel or flight suggestion. All this information is associated with a specific trip and our database is able to hold multiple trips and all the data associated with each trip.
Planning a group trip is exciting with lots to talk about. Use the “Chat” tab to talk to other people in the group and view their suggestions immediately when they make them. Discuss ideas about the trip and share opinions on what you want to do.
Travel days are more fun with a friend. Use the “Flights” tab to search for the perfect route and suggest it to the group. Group members departing from the same city can book the same flight and fly together. Vote for routes that work for you.
A perfect place to stay can make or break your trip. Use the “Hotels” tab to search for the ideal hotel and suggest it to the group. Compare the distance from the city center and the rating of different hotels to inform your decision about what to suggest. Vote for the hotel suggestion that you like the best.
Build your own itinerary using any of the suggestions that have been made by the group. Find and view each trip member’s individual itinerary in the “Itinerary Builder” tab. Work together to create a master itinerary that will form the backbone of your trip!
How we built it
There are three main parts to the project: client user interface, user authentication and the backend server for the database transactions. The user interface was largely built with React to display the data from the client-side retrieval of hotel and flight information via the Amadeus API. Because we had numerous page components, we used React Router to smoothly navigate between the different pages. In addition, we used React Context to maintain metadata such as, who the current user is (based on login) and which trip is being planned throughout the application. This enables us to associate user and trip ids with flight and hotel suggestions that are to be saved in the database. This could then be retrieved when other users log into the application. Other users are then able to see which user made the suggestions along with the flight/hotel information and how many upvotes or downvotes they have currently.
The group chat component was built using socket.io, to enable real-time, bidirectional and event-based communication between users and the chat server. Users are authenticated first with passport.js (to log into the app) and then through socket.io (upon socket connection to the server) -- this ensures that only authorized users are allowed to send chats to the group.
Our backend is built in NodeJS on top of a postgreSQL database (server hosted on Heroku) that is responsible for keeping our data updated in real time and associating data with the appropriate users.
Challenges we ran into
Because we were building an ambitious app with limited time and team members, we opted to divide the application into major components and work individually on the different components. This became an issue when we were near the deadline and had a bug in a specific component that other team members did not personally work on. However, because we had been doing daily standups to check in with each other and also worked closely together as a group, we were able to overcome this obstacle (and fix the bug!) since we all had a deep understanding of the interdependencies of our codebase.
Accomplishments that we're proud of
As previously mentioned, everyone in our group is an avid traveler and we are proud to have built and conceived a very useful tool for any traveler. Despite working entirely remotely, we were able to communicate well and work as a team and we're very proud of that as well.
What we learned
We all developed both technical and non-technical skills during the process of this hackathon. In terms of technical skills, building out our own authentication and database pipeline was a fun challenge and we learned a lot about preserving data integrity and how data is coupled with the users. In terms of soft skills, we learned to collaborate with each other and work with each other’s strengths and weaknesses in order to create a cohesive final product.
What's next for friendTrips
We'd like to add points of interest as a category where group members can suggest specific activities; eventually, these points of interest can be separated into categories like sights, shops, and restaurants.
Additionally, each suggestion will have the ability to hold comments in the future so people can add clarifying thoughts along with their upvote or downvote.
We would also be interested in implementing a feature to split travel costs among members within the app as well.
Finally, we plan to integrate with more Amadeus APIs in the near future to build a booking engine to be able to book flights and hotels directly from our website.
Built With
- amadeus
- heroku
- javascript
- node.js
- passport.js
- postgresql
- react
- socket.io
- styled-components
Log in or sign up for Devpost to join the conversation.