Daniil Makarenko — Senior Product Designer / Case study
Travel AI — an app for agritourism and wine tourism
- Year
- 2026
- Role
- Senior Product Designer (contract)
- Client
- French Ministry of Culture & public tourism bodies (freelance)
- Industry
- Product
- Team
- Small product team: product, design, frontend, backend
- Duration
- 2025
Type: AI travel planner — you describe your trip in words and take a game-like quiz about your tastes, and the AI builds a day-by-day itinerary from a real catalog of wineries, hotels, and farms (web + installable mobile app, PWA).
Role: Senior Product Designer (contract) — UX/UI, front-end architecture of the interface, and design reviews of the build.
Team: Small product team (product, design, frontend, full-stack backend).
Platforms: Web + mobile.
Audience: Travelers in Russia and France who care about wine and agritourism; partners — wineries, hotels, farms.
Context: MVP for SPIEF (St. Petersburg International Economic Forum) and France's Ministry of Culture and French public tourism bodies — tight deadline, a showcase demo for investors and partners.
At a glance
- Challenge: take a traveler from their tastes to an AI itinerary and a real partner inquiry in one flow.
- What I did: defined the product flow, designed the quiz, streaming generation, and map, built the liquid-glass design system from scratch, and ran design reviews with code fixes in Nuxt/Vue.
- Result: the project is in development and under NDA, so no release numbers; the engine became the Avalin Travel module, piloted in RZD Poputchik and adapted for Aeroflot.
Problem
The request hid three products: taste matching, AI itinerary generation, and a partner inquiry. Planning was scattered across articles, maps, and chats with estates. Generation took 20–60 sec and felt frozen behind a spinner. There was no booking or payment in the Russian market. The backend (6 microservices) was incomplete, the catalog partly seeded, and users mostly plan from a phone on 4G.
Key decisions
One flow instead of three apps
I set a single path: taste quiz and a natural-language request (dates, budget, group size, departure city) → AI generation → day-by-day map → inquiry. All steps share one visual language, so it reads as one product, not three tools.
Taste profile as a game, not a form
The quiz is a swipe mechanic with haptics and a refinement tree: swiping right opens a deeper sub-stack. It outputs a preference vector that shapes which places enter the route. Separate network and local swipe layers keep the session intact as the profile deepens.
The AI wait as a demo moment, built from a real catalog
I moved from a spinner and hard timeout to SSE streaming (meta → chunk → itinerary → done) with live progress, so the itinerary types out in front of the user. The result maps to the catalog, then real photos and prices batch-load; duplicates within a day collapse into one marker. "Ask AI" refines the route through dialogue.
Map by day, and an inquiry instead of booking
The itinerary lives on a full-screen 2GIS map with an iOS bottom sheet and Polaroid markers showing photo, price, and day color. Since booking didn't exist, the trip ends in a one-tap Lead Capture inquiry with live statuses and data minimization under Russia's personal data law (152-FZ): conversion with no payment or login.
Liquid-glass system on top of an unfinished backend
I built the iOS-26 glass effect in pure CSS with tokens: a ready-made library broke in Safari/Firefox and hurt performance. One glass CTA replaced ~15 mismatched buttons; blur stays ≤22px for 60 fps. Fonts shrank 95% and images 73%. Unfinished surfaces sit behind feature flags, so the demo never shows a broken screen.
One engine embedded into carriers' products
The engine was packaged as the embeddable Avalin Travel module. In the RZD Poputchik pilot, passengers see the arrival city on the way and plan a route from the station. For Aeroflot, the same structure runs in the app and on the seat-back screen (IFE), re-skinned to the brand, plus a 3D cabin.
















Outcome
The project is in development and under NDA, so these are product effects we track, not numbers:
- trip-planning time: natural-language request + quiz instead of browsing articles and maps
- drop-offs while waiting: streaming and live progress instead of a minute-long spinner
- design reviews in code closed errors that broke the core flow: quiz state desync and duplicate places on the map
Launch hypotheses: higher inquiry conversion, engagement, and trust in AI through real photos, prices, and a map.
B2C, B2B, AI, Product
Travel AI — приложение для агро- и винного туризма
Тип: AI-планировщик путешествий — описываешь поездку словами и проходишь игровой квиз о вкусах, а ИИ собирает маршрут по дням из реального каталога виноделен, отелей и ферм (веб + устанавливаемое приложение на телефон, PWA).
Роль: Senior Product Designer (контракт) — UX/UI, фронтенд-архитектура интерфейса и дизайн-ревью разработки.
Команда: небольшая продуктовая команда (продукт, дизайн, фронт, полирепо-бэкенд).
Платформы: Web + телефон.
Аудитория: путешественники по России, Франции, которым важно вино и агротуризм; партнёры — винодельни, отели, фермы.
Контекст: MVP к ПМЭФ (Петербургский экономический форум) и Министерство культуры Франции и французские госструктуры по туризму — жёсткий дедлайн, демо-витрина для инвесторов и партнёров.
Коротко
- Задача: провести путешественника от его вкусов к AI-маршруту и реальной заявке партнёру в одном флоу.
- Что сделал я: сформировал продуктовый флоу, спроектировал квиз, стриминг генерации и карту, собрал дизайн-систему liquid-glass с нуля, вёл дизайн-ревью и правки кода на Nuxt/Vue.
- Результат: проект в развитии и под NDA, релизных цифр нет; движок стал модулем Avalin Travel, прошёл пилот в РЖД «Попутчик» и адаптирован для Аэрофлота.
Проблема
За запросом стояли три продукта: подбор вкусов, AI-генерация маршрута и заявка партнёру. Планирование было размазано по статьям, картам и переписке с хозяйствами. Генерация шла 20–60 сек и на спиннере выглядела как «зависло». Бронирования и оплаты в РФ-контуре не было. Бэкенд (6 микросервисов) был неполным, каталог засеян частично, а планируют в основном с телефона на 4G.
Ключевые решения
Один флоу вместо трёх приложений
Я задал единый путь: квиз вкусов и запрос словами (даты, бюджет, состав, город вылета) → AI-генерация → карта по дням → заявка. Все шаги говорят на одном визуальном языке, поэтому это один продукт, а не три инструмента.
Психопрофиль как игра, а не анкета
Квиз — свайпы с гаптикой и деревом уточнений: свайп вправо открывает под-стек глубже. На выходе вектор предпочтений, который влияет на подбор объектов в маршрут. Сетевой и локальный слои свайпов разделены, чтобы углубление профиля не ломало сессию.
Ожидание AI как демо-момент на реальном каталоге
Я перевёл генерацию со спиннера и жёсткого таймаута на SSE-стриминг (meta → chunk → itinerary → done) с живым прогрессом: маршрут «печатается» на глазах. Результат маппится на каталог, затем батчем догружаются реальные фото и цены; дубли объекта в дне сворачиваются в один маркер. «Спросить AI» правит маршрут диалогом.
Карта по дням и заявка вместо брони
Маршрут живёт на фуллскрин-карте 2GIS с iOS-шторкой и поляроид-маркерами с фото, ценой и цветом дня. Брони не было, поэтому поездка заканчивается заявкой в один тап (Lead Capture) с живыми статусами и минимизацией данных под 152-ФЗ: конверсия без оплаты и логина.
Liquid-glass поверх незавершённого бэкенда
Эффект iOS-26 я построил на чистом CSS и токенах: готовая библиотека ломалась в Safari/Firefox и била по производительности. Один стеклянный CTA заменил ~15 разношёрстных кнопок; блюр ≤22px ради 60 fps. Шрифты легче на 95%, изображения на 73%. Незавершённые поверхности спрятаны за feature-флагами, поэтому демо не показывает битых экранов.
Один движок внутри продуктов перевозчиков
Движок упакован во встраиваемый модуль Avalin Travel. В пилоте РЖД «Попутчик» пассажир ещё в пути видит город прибытия и собирает маршрут от вокзала. Для Аэрофлота та же структура работает в приложении и на бортовом экране (IFE), перекрашена под бренд, плюс 3D-салон.
















Результат
Проект в развитии и под NDA, поэтому вместо цифр — продуктовые эффекты, которые мы отслеживаем:
- время сборки поездки: запрос словами + квиз вместо перебора статей и карт
- отвалы на ожидании: стриминг и живой прогресс вместо спиннера на минуту
- на дизайн-ревью в коде закрыты ошибки, ломавшие ключевой сценарий: рассинхрон квиза и дубли объектов на карте
Гипотезы на запуск: рост конверсии в заявку, вовлечённости и доверия к ИИ за счёт реальных фото, цен и карты.









































































