Эволюция пет-проекта: как я превратил велотрекер «Мой велосипед» в соцсеть на Kotlin
Всем привет! Пару месяцев назад я выкатил в РуСторе своё мобильное приложение «Мой велосипед». Изначально идея была максимально прагматичной: мне надоел хаос в блокнотах и заметках, где я пытался фиксировать, когда менялась цепь, сколько прошли тормозные колодки и во сколько вообще обходятся расходники. Хотелось простой, но умный цифровой бортовой журнал.
Проект написал, релизнул, но вовремя остановиться не смог. Аппетит, как водится, пришёл во время еды, и в итоге утилитарный трекер оброс полноценным социальным функционалом. Теперь это не просто калькулятор износа, а локальное комьюнити для двух колёс.
Ниже — честный рассказ о том, зачем превращать простой инструмент в соцсеть, с какими техническими граблями пришлось столкнуться и что из этого получилось.
Зачем велосипеду соцсеть? (От боли к продукту)
Любой велосипедист знает: хороший байк требует внимания. Цепь тянется, колодки стираются, резина трескается, а масло в вилке просит замены. Сначала я сделал классический CRUD-трекер: завёл велосипед, занёс пробег, привязал компоненты.
Но когда приложение было готово, я задал себе классический вопрос продакта: «И как часто пользователь будет открывать это приложение?» Ответ удручал — раз в пару недель, чтобы записать замену детали. Для удержания аудитории этого мало. А что объединяет всех райдеров? Желание похвастаться кастомизацией, обсудить свежий апгрейд, скинуть фоточку из вечерней покатушки или пожаловаться на порванную в лесу цепь.
Так родилась идея скрестить утилитарный техосмотр с социальной платформой.
Что под капотом: продуктовая и техническая начинка
Проект пишется в соло, поэтому архитектуру пришлось выстраивать так, чтобы не утонуть в техническом долге. Под капотом — 100% Kotlin и строгая Clean Architecture с разделением на presentation, domain и data.
Вот стэк, который крутится в продакшене:
- UI & Design System: Jetpack Compose + Material 3. Позволило быстро собрать гибкие карточки узлов с динамической индикацией износа (цветовая шкала от зелёного к красному) и современную ленту новостей.
- Офлайн-first подход (Room): Вся история ремонтов, локальные черновики постов и кэш ленты хранятся в локальной базе. Это критично: велосипедисты часто уезжают за город, где мобильный интернет работает по принципу «то густо, то пусто».
- Конфигурация: Jetpack DataStore для пользовательских настроек и активного сетапа байка.
- Архитектурный клей: Hilt (Dagger) для внедрения зависимостей.
- Сетевой слой: Retrofit + OkHttp для связи с бэкендом, синхронизации постов и работы мессенджера.
- Аналитика и монетизация: AppMetrica для телеметрии и краш-репортов, Yandex Ads (РСЯ) для монетизации.
Анатомия фич: от калькулятора цепи до мессенджера
Сегодня приложение делится на два больших экосистемных блока:
1. Утилитарное ядро (Зачем заходить ради пользы)
- Калькулятор износа: На основе общего пробега и условий эксплуатации (грунт, дожди, агрессивный стиль) алгоритм рассчитывает оставшийся ресурс цепи, кассеты и колодок.
- Бортовой журнал расходов: Все траты на покрышки, смазку и камеры суммируются в наглядную статистику.
2. Социальный слой (Зачем заходить ради общения)
- Профиль и Байк-сетап: Персональная страница райдера, где можно выставить напоказ свой парк велосипедов, бренды рам и кастомный обвес.
- Лента историй (Feed): Публикация заметок с покатушек, фотоотчётов и гаражных лайфхаков. Пагинация завязана на Paging 3, а за скорость работы отвечает локальный кэш.
- Встроенный мессенджер: Чаты один на один для обсуждения железа, планирования совместных выездов или экстренной помощи в ремонте.
Головная боль разработчика: Синхронизация чатов и ленты при нестабильном мобильном интернете (например, когда заезжаешь в метро или глухую промзону) заставила повозиться. Пришлось внедрять умные фоллбэки в паттерне Repository: если сеть пропала, приложение бесшовно подтягивает данные из Room, а при появлении сигнала фоном пушит накопленную очередь запросов на сервер.
Релиз и что дальше?
Приложение уже собрано, прошло модерацию и официально доступно в RuStore. Первые пользователи тестируют функционал, собирается обратная связь.
Но останавливаться на достигнутом не хочется. Хочется превратить приложение в настоящий супер-апп для двух колёс. И здесь мне очень важна точка зрения читателей VC.ru — как разработчиков, так и активных пользователей:
- Какие фичи заставили бы вас открывать такое приложение каждый день?
- Стоит ли пилить интеграцию с интерактивными картами (чтобы прямо в приложении трекать маршруты, отмечать питьевые фонтанчики, опасные споты или ближайшие веломастерские)?
- Были ли вам интересны соревновательные механики — например, сезонные челленджи по суммарному километражу внутри комьюнити?
Делитесь мыслями, критикой и идеями в комментариях! 👇