Skip to content

About AScout

ningxie edited this page May 30, 2021 · 11 revisions

Motivation

Planning a vacation or a trip has never been easier than it is today, but there are still ways in which it can be improved or facilitated. The way that people plan their trips does not always result in the best experience. This effect is much more significant when people are planning trips to unfamiliar cities or destinations. A big factor to the overall trip experience is the location and proximity of the accommodation that travelers plan to rent. In addition to that other factors such as the uncertainty of foreign public transport and city planning, and the decision of finding a good area to rent an apartment becomes harder.

Travelers often have an itinerary or a list of places that they want to visit when they travel to a city, however online vacation rental marketplaces like Airbnb do not show information concerning proximity to their itinerary. This is a problem because someone not familiar with a city will have no sense of proximity or knowledge about public transport, and this may result in a poor overall experience. A very common scenario that occurs when planning a trip, is that users switch frequently between Airbnb and Google Map web-pages and search for the locations and routes one by one.

This is what has motivated us to create a solution that can make travelers more informed about the location and proximity of their online rentals. We want the user to be able to plan their trip without worrying about the location of their accommodation. Our key functionality would have the user plan their itinerary, and then we would be able to suggest neighborhoods that would be the most convenient in terms of proximity, and public transport.

Business Requirements & Logic

User Stories

As this project will be developed in an agile fashion, we have decided to specify the requirements primarily with user stories. Quality requirements and constraints will be discussed later on. Please find below a list of user stories detailing functional requirements:

  • As a traveler, I want to be able to know how far are my planned destinations from my rented accommodation, so that I have an idea of how long activities would take.(Author: Ali Yassine, Date: 2021-03-12, ID:S-1)

  • As a traveler, I want to know which neighborhoods are the most suitable for my reservation so that I can limit my search of accommodation. (Author: Ali Yassine, Date: 2021-03-12, ID:S-2)

  • As a traveler, I want to be able to compare travel times to my destination from different Airbnb locations so that I can choose the most convenient. (Author: Ali Yassine, Date: 2021-03-12, ID:S-3)

Functional Requirements:

When the user enters the AScout web application, they will see a welcome page with the following call to action: “Where would you like to scout?”, and they would be able to enter their destination city. After entering their city, the user will be given 2 options:

Option 1:

This option would ask the user to enter a list of the major destinations that they would like to visit in their specified city. The user would be able to enter and search the locations in an unordered fashion from the Map provided in the UI. When the user has entered the destinations, he would press a “Find Neighbourhood” button. Then the web application would run the “calculation” algorithm and return the calculated top 3 ideal neighbourhoods. The user would then be able to start browsing the Airbnb locations in a selected neighbourhood from the side panel.

Option 2:

This option would show the user a list of predefined itineraries and he would be able to immediately check the ideal neighbourhood listings since the ideal neighbourhoods would be pre-calculated as well. This option is not available yet in version 1.0.0 due to time constraint and will be suitable for future enhancement of the project.

The functional requirements are summarized below in a business logic flow-diagram:

Technology Stack and Project Architecture

As a solution we plan to build a web application written in HTML5 and ReactJS. ReactJS is an open-source frontend framework that is based on JavaScript. We chose to use ReactJS because our team has a preference for it, and also because it ensures readability and makes testing easier. The web UI will connect to the application micro-services through REST API using the Spring Web MVC Framework.

We chose to use Spring Boot which is "convention-over-configuration" solution for creating stand-alone, production-grade Spring-based Applications. The main reason we chose to use Spring boot is because it eliminates a lot of the boilerplate configurations and code, and thus it helps us reduce overall development time and increase efficiency. The backend server will make use of our chosen Airbnb data set as well as Google Maps API.

The microservices and the web client will be packaged as Docker containers and be hosted on Google Cloud Kubernetes as individual pods and services.

We will use Jira for project management and Git for version control. (For more details check project organization wiki)

Below is the architecture diagram of the system: