PROJECT DURATION: April 2022 – March 2023
PROJECT STAFF (OUTSTAFFING): 3 developers.
TECHNOLOGIES: PHP 7.4, Yii2, PHPStan, MySQL, JavaScript, Vue.js, JQuery, MongoDB, Git, Docker, Docker Compose
PROJECT COST: > 5 million rubles.
CLIENT
The company provides a platform for renting countryside venues to attract guests. It offers partners access to manage all stages of bookings through user dashboards.
For visitors, the platform serves as a useful catalog of unique leisure locations near their chosen city.
The booking service is a convenient tool that facilitates interaction between property owners and their guests while also overseeing the entire process, from booking requests to check-out. It operates as a marketplace for venues and specializes in a specific niche: memorable countryside getaways.
CLIENT'S PAIN POINTS
When your business has a specific niche, scaling it can be quite challenging. The team wanted to expand its market reach in Russia and analyzed the criteria necessary for this expansion. They identified shortcomings in the platform's interface and decided to completely redesign the resource, as well as enhance its functionality. That's when they approached our IT company for assistance.
GOAL
To improve the usability of the website for both visitors and owners of countryside venues who post information about their places.
MAIN TASKS
- Update the service's layout with functional enhancements.
- Refactor the code and optimize the website's performance.
- Develop a room recommendation system and create a booking widget that can be embedded on external platforms or websites.
SOLUTIONS
Our specialists augmented the existing project team, actively participated in daily stand-up meetings, and employed unconventional approaches to development. Over the course of a year of collaboration, we revamped the booking service's appearance and rewrote a significant portion of the code. We aligned it with PSR standards and architected it to be minimally tied to the current framework, allowing for a seamless transition to a more up-to-date version. We introduced a case-based system where one class corresponds to one action.
Our primary development focus was on the room booking widget.
Creating the recommendation system required a deep dive into the company's business processes. To select the most suitable venues, we had to employ combinatorial techniques. Thanks to these techniques, we were able to implement a seemingly straightforward yet highly functional widget. With its help, users can input data into filters and choose a place for their leisure based on distance from the starting point, dates, price, photos, and room options.
The room allocation algorithm is based on the knapsack problem: fitting as many key criteria as possible into a limited space. The priority for room assignments is determined by the ratio of adults to children. For example, 2 adults and 2 children would require 1 double bed and 2 single beds. In some hotels, there is an option for users of the service to add an extra bed. The cost calculation is not solely based on the total number of people but also takes into account the age of the guests. Pricing for children and age restrictions can be configured in the administrative part of the system.
After selecting the hotel and rooms, users are presented with additional services available at the leisure venue, such as a sauna, dining options, excursions, equipment rentals, and more. These services are independently added by partners through their personal accounts.
The system includes functionality for accepting online payments. After selecting a room, users are given 60 minutes to make a deposit amounting to 50% of the total accommodation cost. Upon a successful payment transaction, a booking confirmation is sent to the contact details provided by the user.
The room booking widget itself is implemented using Vue.js as a separate application. We've created a modern API for it following the REST specification. It's designed not only to be easily integrated into any internet resource but also to allow for customization of its appearance. For example, if a partner wants to add the widget to their website, they can:
- log in to their personal account,
- choose the color scheme and components of the module,
- copy the resulting HTML code and embed it into their platform.
Prioritizing hotel listings, solving the complexities of distributing children and adults among rooms, and addressing other non-trivial challenges allowed us to deeply immerse ourselves in the tourism industry and apply unconventional solutions to meet its requirements.
RESULTS
- An intuitively user-friendly website interface with a refreshed design.
- Enhanced functionality for flexible and automated interactions with partners and visitors.
- Refactoring of the services offered by hotels and the migration of other website pages to a new technological stack.
- Implementation of a room booking widget.