• Сервис

Разработали MVP-версию Дримтрип — сервиса для поиска отелей

Помогли дизайнеру доработать макеты, архитектурно повозились с картой, оптимизировали запросы и сделали кастомный календарь

Год2024
Разработали MVP-версию Дримтрип — сервиса для поиска отелей

Задача

Клиент пришёл к нам, чтобы реализовать MVP-версию веб-приложения по поиску дешевых отелей

Мы поставили перед собой задачу разработать сайт по готовым дизайн-макетам, проработать основные фичи и сделать это в сжатые сроки.

Процесс

Работу построили так, чтобы быстрее дойти до MVP

Мы работали в связке с дизайнером со стороны клиента. Построили процесс таким образом:

  1. Посмотреть макеты и вместе с дизайнером подумать над UX составляющей, чтобы в MVP-версии пользователи быстро ориентировались;
  2. Взять на себя фронтенд-разработку и за короткое время реализовать нужные фичи для MVP-версии.
Дорабатывали макеты и фичи вместе с дизайнером

Клиент пришёл с готовыми дизайн-макетами, которые мы дорабатывали в процессе. Например, вместе с дизайнером обсуждали, как оптимизировать контент в карточках и реализовать карту с отелями.

Некоторые фичи оказались сложными в реализации для MVP-версии, поэтому мы вместе искали варианты более простого решения.

Первое, с чем работали — выпадашка с количеством гостей

На первых вариантах макета дизайнер отрисовал функционал так: взрослых можно было добавить в одно нажатие на «+», а детей через отдельный дропдаун с выбором возраста ребёнка.

dreamtrip-filter-children.gif

Чтобы пользователю было просто совершить это действие, мы нашли схожие сценарии на других сайтах и остановились на решении с двумя дропдаунами.

Второе — фильтры с параметрами, где на выходе анимации выбора получались дёргаными

Мы решили изменить их внешний вид и добавить более простой эффект, который поможет пользователю быстрее сориентироваться и дойти до вариантов поиска.

dreamtrip-effect.gif

В итоге, сделали минималистичный фейд-эффект — оставили всего 2 строчки и подняли их вверх. Теперь при скролле вниз они исчезают, чтобы не загораживать поле зрения. А при скролле вверх появляются снова.

Добавили в карту мобильное представление листинга на десктопе и сократили время на реализацию

Изначально клиент не планировал добавлять карту с отелями на сайт, поэтому она не была отрисована в макетах. Но в процессе все-таки принял решение добавить отдельный блок с ней для просмотра отелей. Мы решили взять Яндекс Карты — с ними проще работать технически, да и пользователи чаще выбирают их для навигации.

Для реализации мы использовали мобильное представление листинга отелей на десктопе — это помогло нам сократить время на реализацию. Сложность была в том, чтобы совместить это противоречие в стейте приложения.

Сейчас это работает так: после выбора города, даты и количества людей, сервис начинает подбирать отели и показывает варианты на карте. Слева пользователь видит по сути мобильную версию самого приложения.

dreamtrip-map.gif

Архитектурно все же пришлось немного повозиться

Изначально ресурсы на карту мы не закладывали. Поэтому думали над тем, как построить приложение, чтобы не задублировать кучу кода, всё работало в синергии и без багов. Мы могли создать две сущности, которые плюс-минус выглядят одинаково, продублировать их и увеличить объем кода. Но сделали по-другому, поэтому код будет проще поддерживать в будущем.

Сейчас на карте пользователь может управлять картой, выбрать фильтры, посмотреть маркеры с отелями, их цены и сразу перейти в карточку отеля. Смотрится аккуратно и пользователи могут использовать ее также, как на телефоне.

Отдельный этап мы посвятили фильтрации и оптимизации на сайте

Вообще хотим отметить, что любим работать со сложными фильтрами — так, чтобы с кучей параметров и запросов.

В фильтрах Дримтрипа есть параметры, которые помогают найти подходящие отели — с городом, тарифами, типами размещения и удобствами. Когда пользователь выбрал фильтр и нажал «Найти», мы идем на сайты других сервисов и ищем варианты. А именно: к Яндекс Путешествиям, Отелло, Трип и Островок!

dreamtrip-services.gif

Под капотом все оказалось не так просто

Проблема была в том, что сервер может долго запрашивать варианты от партнеров, а может и бесконечно. Но выдать пользователю какие-то результаты и статус поиска нужно быстро. Для таких запросов мы использовали длинные опросы — они помогают поддерживать соединение с сервером. Пока мы не получим статус о том, что все данные собраны.

Каждые 3 секунды сервис обновляет статус по запросу. Мы получаем первые варианты сразу, а остальные подгружаются со временем. Если нужного для прекращения опроса статуса не получено, то сервис продолжает собирать данные.

Сделали кастомный календарь

На сайте есть календарь, который помогает пользователю выбрать дату заезда и выезда — находится на главной странице.

Для реализации мы использовали популярную библиотеку React Datepicker и кастомизировали календарь под стиль сайта.

dreamtrip-calendar.gif

В общем, использовали готовое решение и не тратили время клиента на разработку с нуля. Получилось привычно и стильно.

Результат

Что сделали

Для MVP-версии мы выбирали решения, которые не требовали много времени на реализацию и при этом хорошо смотрелись на сайте клиента.

  1. Помогли доработать макеты по части UX, чтобы пользователям было проще искать отели;
  2. Забрали на себя весь фронтенд-приложения;
  3. Сделали карту;
  4. Поработали с фильтрами;
  5. Добавили простой календарь;
  6. Оптимизировали запросы;
  7. Отдали клиенту MVP-версию, которую еще будем дорабатывать.

Проект Дримтрип — тот случай, когда было особенно приятно работать с клиентом

Было видно, как его команда горит своей идеей и хочет сделать действительно удобный и быстрый продукт для пользователей. Мы, в свою очередь, с удовольствием делились экспертизой и предлагали оптимальные решения в процессе, чтобы не растягивать разработку и как можно скорее вывести проект в релиз 💙

Стек технологий

  • React Datepicker

Команда

Разработка
  • Front-end разработчик
  • Team Lead
Тестирование
  • QA-специалист