Главное о кейсе
К нам обратился владелец компании из сферы Fashion Retail c идеей стартапа. Так родился проект I Saw you — мобильное приложение, которое автоматически фиксирует ваши встречи на конференциях или выставках и помогает в нетворкинге.
Цель была амбициозной: создать удобную альтернативу LinkedIn и TenChat, но с фокусом на реальные офлайн-взаимодействия. Без новостных лент, лайков и лишнего шума — только полезные связи, сохраненные в один клик.
Ключевые достижения: релиз в RuStore и первая в России устойчивая чат-архитектура на KMP.
Как проект изменил жизнь пользователей
Пользователь устанавливает приложение и заполняет профиль: фото, город, возраст, род занятий и бизнес-приоритеты — кто ему интересен и чем он может быть полезен. Механика напоминает дейтинг-приложения, но цель не свидания, а деловые контакты.
Система использует геолокацию (до 50 метров) и автоматически фиксирует пересечения с другими участниками. Если вы были рядом — вы попадаете друг другу в список «Виделись».
После встречи на выставке или конференции можно:
- просмотреть всех, с кем пересекались;
- открыть профили;
- написать сообщение через встроенный чат.
Даже если вы не обменялись контактами, в приложении есть вся необходимая информация для продолжения знакомства и общения.
Бизнес-задача и ее решение
По настоянию заказчика в архитектуру приложения была сразу заложена возможность масштабирования. При разработке серверной части была реализована микросервисная архитектура на платформе .NET.
Почему Kotlin Multiplatform?
На старте перед командой проекта стоял выбор: нативная разработка под iOS и Android, кроссплатформенные фреймворки (Flutter, React Native) или Kotlin Multiplatform (KMP).
Совместно с заказчиком выбрали KMP, и вот почему:
- Общая бизнес-логика, нативный UI.
- Бэкенд, сеть, навигация, логика хранения: все пишется один раз. А интерфейс остается нативным: Jetpack Compose для Android, SwiftUI для iOS. Это дает и экономию времени, и привычный UX.
- Заказчику нужен был рабочий MVP для демонстрации на мероприятиях. KMP позволил собрать обе версии параллельно без дублирования кода.
- Готовность к масштабированию.
- В перспективе web и desktop. Благодаря Compose Multiplatform расширение станет возможным без переписывания с нуля.
- У нас глубокая экспертиза по Kotlin. Мы понимали, на что идем, и были готовы решать сложные задачи там, где нет готовых решений.
Крафт (мастерство), реализация, технические детали
При разработке приложения мы преодолели серьезные сложности, которых не видно в интерфейсе.
Геолокация: не все так просто, как кажется. Главная фича — определение близости участников — оказалась одной из самых нестабильных. Разные устройства (особенно Samsung и Xiaomi) по-разному обрабатывают GPS-сигналы: с задержками, неточностями, требуют нескольких разрешений в строгой последовательности.
Мы даже рассматривали альтернативы:
- сканирование QR-кодов;
- сравнение фоновых шумов (через микрофон) для подтверждения близости.
К счастью, доработка алгоритмов геолокации позволила обойтись без костылей.
На момент старта проекта не существовало готовых решений для чатов на KMP. Ни библиотек, ни стабильных гайдов — только теория и эксперименты.
Мы реализовали полноценный real-time-мессенджер с нуля:
- WebSocket-соединения с автоматическим переподключением;
- push-уведомления, даже когда приложение в фоне;
- статусы online/offline, прочтение, реакции;
- очередь сообщений при потере связи — без потерь и с соблюдением порядка;
- пагинация, навигация по чатам, открытие диалога по push;
- поддержка edge-кейсов: переключение между Wi-Fi и мобильным интернетом, сворачивание приложения, блокировка экрана.
Каждый элемент пришлось проектировать, тестировать и адаптировать под особенности iOS и Android. Например, навигация в Jetpack Compose оказалась нестабильной, а работа с фоновыми сокетами — разной на платформах.
Сегодня это одно из наших ключевых внутренних решений. Руководитель проекта даже написала статью на «Хабр» с разбором архитектуры чата на KMP.
В приложении заложена архитектура «на вырост».
Мы изначально проектировали систему с расчетом на рост. Если приложение станет популярным — оно не должно «упасть» под нагрузкой.
Выбрали микросервисную архитектуру:
- авторизация,
- поиск,
- чаты,
- профили,
- геолокационные события.
Каждый сервис масштабируется независимо. Если всплеск активности в чатах — поднимаем только их, не трогая остальное.
Для поиска внедрили ElasticSearch.
Заложили отказоустойчивость, очереди (Kafka), горизонтальное масштабирование — чтобы приложение работало стабильно в любой точке мира, при любом интернете и любом количестве пользователей.
Инсайты, гипотезы, процесс создания и взаимодействия с заказчиком
- Приложение I saw you — уже в RuStore;
- Готовая архитектура для масштабирования;
- Один из первых в России устойчивых чатов на Kotlin Multiplatform;
- План по запуску в Google Play и App Store;
- Готовность к тестированию на реальных конференциях.
Проект еще в развитии, аудитория формируется — но уже сейчас ясно: ниша есть. Люди хотят простой и удобный способ сохранять деловые контакты.
Скриншоты