image

К нам обратился владелец компании из сферы Fashion Retail и активный участник отраслевых мероприятий c идеей стартапа. Так родился проект I Saw you — мобильное приложение, которое автоматически фиксирует ваши встречи на конференциях или выставках и помогает выстраивать нетворкинг без дополнительных действий.

Цель была амбициозной: создать удобную альтернативу LinkedIn и TenChat, но с фокусом на реальные офлайн-взаимодействия. Без новостных лент, лайков и лишнего шума — только полезные связи, сохраненные в один клик.

Как это работает

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

Система использует геолокацию (до 50 метров) и автоматически фиксирует пересечения с другими участниками. Если вы были рядом — вы попадаете друг другу в список «Виделись».

После мероприятия можно:

  • просмотреть всех, с кем пересекались;
  • открыть профили;
  • написать сообщение через встроенный чат.

Даже если вы не успели познакомиться — приложение «помнит» за вас.

Масштабируемый продукт для ивент-индустрии

По настоянию заказчика в архитектуру приложения была сразу заложена возможность масштабирования. При разработке серверной части была реализована микросервисная архитектура на платформе .NET.

Почему Kotlin Multiplatform?

Перед запуском стоял выбор: нативная разработка под iOS и Android, кроссплатформенные фреймворки (Flutter, React Native) или Kotlin Multiplatform (KMP).

Мы выбрали KMP — и вот почему:

  1. Общая бизнес-логика, нативный UI.
    Бэкенд, сеть, навигация, логика хранения — все пишется один раз. А интерфейс остается нативным: Jetpack Compose для Android, SwiftUI для iOS. Это дает и экономию времени, и привычный UX.
  2. Быстрый выход на рынок.
    Заказчику нужен был рабочий MVP для демонстрации на мероприятиях. KMP позволил собрать обе версии параллельно без дублирования кода.
  3. Готовность к масштабированию.
    В перспективе — web и desktop. Благодаря Compose Multiplatform расширение станет возможным без переписывания с нуля.
  4. Сила команды.
    У нас глубокая экспертиза по Kotlin. Мы понимали, на что идем, и были готовы решать сложные задачи там, где нет готовых решений.

Сложности, которых не видно в интерфейсе

Геолокация: не все так просто, как кажется

Центральная функция — определение близости участников — оказалась одной из самых нестабильных. Разные устройства (особенно Samsung и Xiaomi) по-разному обрабатывают GPS-сигналы: с задержками, неточностями, требуют нескольких разрешений в строгой последовательности.

Мы даже рассматривали альтернативы:

  • сканирование QR-кодов;
  • сравнение фоновых шумов (через микрофон) для подтверждения близости.

К счастью, доработка алгоритмов геолокации позволила обойтись без костылей. 

Чат с нуля на Kotlin Multiplatform

На момент старта проекта не существовало готовых решений для чатов на 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;
  • готовность к тестированию на реальных конференциях.

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

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