
Геолокация, чаты, масштабирование — бизнес-приложение на Kotlin Multiplatform

К нам обратился владелец компании из сферы Fashion Retail и активный участник отраслевых мероприятий c идеей стартапа. Так родился проект I Saw you — мобильное приложение, которое автоматически фиксирует ваши встречи на конференциях или выставках и помогает выстраивать нетворкинг без дополнительных действий.
Цель была амбициозной: создать удобную альтернативу LinkedIn и TenChat, но с фокусом на реальные офлайн-взаимодействия. Без новостных лент, лайков и лишнего шума — только полезные связи, сохраненные в один клик.
Как это работает
Пользователь устанавливает приложение и заполняет профиль: фото, город, возраст, интересы, навыки и цели — кто ему интересен и чем он может быть полезен. Механика напоминает дейтинг-приложения, но цель — не свидания, а деловые контакты.
Система использует геолокацию (до 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-кодов;
- сравнение фоновых шумов (через микрофон) для подтверждения близости.
К счастью, доработка алгоритмов геолокации позволила обойтись без костылей.

Чат с нуля на 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;
- готовность к тестированию на реальных конференциях.
Проект еще в развитии, аудитория формируется — но уже сейчас ясно: ниша есть. Люди хотят простой и удобный способ сохранять деловые контакты.
Пишите нам — обсудим вашу идею, покажем похожие кейсы и соберем то, что действительно нужно. Подписывайтесь на наш канал, чтобы не потерять из виду.
