Привет всем! Хочу немного рассказать про то, как я делал, сделал и буду делать (наверное) в свободное время очередной travel-сервис для поиска авиабилетов.
Скриншот одной из страниц:
Мотивация и предыстория
Всегда перед тем, как улететь в отпуск я сталкиваюсь с проблемой выбора точки на карте куда улететь. Эта, казалось бы, легкая проблема легко решается с помощью всем известных агрегаторов авиабилетов. Но почему-то она у меня решается тяжело по следующим причинам:
- у большинства агрегаторов недостаточно гибкий поиск (банально, нет фильтра по диапазону дат меньше месяца);
- гибкий поиск а-ля "везде" и "когда угодно" на практике редко помогает;
Стоит еще отметить travel-блоги (сообщества о путешествиях в соц. сетях, которые появляются у меня в ленте, и сайты со специальными преложениями, например, fly4free), наверное, помогают кому-то, но не мне. Предложений на нужные даты (даже примерно) никогда не оказывается в наличии.
Размышляя на эту тему я решил, что стоит попробовать сделать что-то свое, даже если не получится. А риск полного провала (не доедет до прода) был велик — ни разу до этого не делал сервис в одиночку, всегда рядом были опытные ребята и все они делали свой небольшой кусочек целого.
Для того, чтобы решить проблему выбора сформировал следующие фичи, которых мне не хватает:
- Подборки с авиабилетами (по направлениями, интересам и т.п.);
- Готовые сложные маршруты, например, точка A — точка B — точка C — точка A; (как выяснилось позднее, эта фича частично реализована на eightydays.me)
- Карта, где можно самому строить такие сложные маршруты;
- Поиск "везде" в гибком диапазоне дат с базовыми фильтрами.
Далее коротко опишу каждую попытку и промежуточный результат.
Попытка #1 #0
Регистрация красивого доменного имени на godaddy.com. Поиск команды на собственные деньги. Аренда сервера на digitalocean.com. Начало разработки. Провал.
Попытка #1
В этот раз, я решил не спешить с красивым доменом, командой и сервером. Все делаю локально на своем стареньком macbook air с 4гб оперативки.
Решено, что не нужно делать все и сразу, а сделать хотя бы что-то. Этим что-то оказалась фича Подборки с авиабилетами. Как мне тогда (около двух месяцев назад) казалось, лучшая из всех. Для этого мне понадобилось:
- Вникнуть в API, которые отдают билеты из кэша, и понять, как правильно получить полезную информацию; (они хорошо описаны, с этим проблем не было)
- Сделать собственное API, которое готовит ее к визуализации на сайте; (в python и flask я уже умел до этого, с этим тоже ок);
- Развернуть postgres для справочников — аэропорты, страны, интересы и т.п.; (ставится "в два клика")
- Развернуть clickhouse для хранения промежуточных данных и логов; (как ни странно, тоже был готов к использованию за 5 минут, даже на стареньком macbook air с 4гб оперативки)
- Подружить(сделать словари) postgres и clickhouse;
- Найти бесплатный гео-сервис для определения локации;
- Выбрать фреймворк для сайта — выбор пал на vue (vuetify), как фреймворк с самым низким порогом входа(по словам нескольких моих знакомых). Весь мой опыт веб-разработки до этого момента заключался только в использовании flask-admin. C веб-разработкой было больше всего проблем.
Результат можно посмотреть по ссылке cheapster.travel/collections (с мобильных устройств — смотрите на картинки)
На данном этапе выбрал доменное имя и арендовал сервер у hetzner за $5.
Во время этой попытки также была реализована фича Готовые сложные маршруты в виде отдельных подборок, но сейчас этот функционал отключен из-за проблем с производительностью — сервера за 5 долларов не хватает для решения этой задачи.
На эту попытку ушло 3-4 недели с перерывами (вечер-ночь-выходные).
Попытка #2
Нужна карта, подумал я, и приступил к реализации фичи Карта, где можно самому строить такие сложные маршруты.
После часа гугления и краткой консультации со знакомым выбрал mapbox, а именно пакет mapbox-gl-vue для vue.
С картой все оказалось все сильно сложнее, чем я ожидал. Поэтому сразу оставил надежду сделать субъективно красиво. Потом сделаю еще одну попытку сделать карту лучше и функциональнее.
Суть данной фичи:
- Отображается карта с ценами из вашего города;
- Выбираете интересный вариант по цене на карте;
- После выбора варианта данные на карте перезагружаются для выбранной точки;
- Повторяете пункты выше нужное количество раз.
Результат cheapster.travel/map
На эту попытку ушло 1-2 недели (вечер-ночь-выходные).
Попытка #3
После новогодних праздников пришло время для фичи Поиск "везде" в гибком диапазоне дат.
Это самая простая попытка — почти все методы в API уже реализованы ранее, нужно только чуть-чуть подкрутить и нарисовать это с помощью vuetify (уже имея небольшой опыт).
Суть фичи:
- Простой, но функциональный поиск по гибкому диапазону дат;
- Есть базовые фильтры (без визы, только прямые и т.п.)
Результат cheapster.travel/simple
На эту попытку ушло 2 вечера. Самая удачная попытка.
Вместо итогов
В бэклоге еще куча задач. Надеюсь, эти попытки приближают меня к решению проблемы выбора перед отпуском. А еще лучше, если не только меня.
Всем хорошего дня!
upd:
Продолжение здесь: habr.com/ru/post/489510/