Я долго искал идею для какого-то сайд проекта, который можно делать в свободное от работы время. Волонтерская работа меня не сильно вдохновляет, поэтому естественно я искал идеи, на которых можно заработать.
Как я перебирал идеи, я писал в прошлой статье. Я понял, что если хочешь фокусироваться на разработке, то лучше делать приложение, которое решает проблему одного человека. Никаких социальных взаимодействий, маркетплейсов и прочих бездонных ям для заливания трафиком.
Вспомнил, что давно испытываю боль с изучением иностранного языка. Последние дни я смотрел фильмы на английском и отдельно переводил слова или фразы в ChatGPT, и просил его сразу сгенерировать несколько примеров с использованием этих слов. Потом добавлял это в Anki вместе с примерами. Рутинная монотонная работа, которую в целом можно облегчить.
Решил ее для себя автоматизировать. Быстренько накидал прототип в вебе. Там был простой инпут, подключен OpenRouter для использования API какой-нибудь LLM-модели. Я вводил любое слово на английском в инпут, а нейронка возвращала перевод на русском языке и 3 примера использования этого слова.
Начал пользоваться сам, и мне прямо понравилось. Не просто решил себе задачу, быстренько понимать перевод и контекст слов, но и просто механически оказалось приятно этим пользоваться.
И тут я понял — да это же и есть отличная идея для приложения, которую я искал. Решил делать.
Я стал думать — в каком формате разрабатывать этот инструмент. Первая мысль — сделать приложение в вебе, так проще и быстрее. Но нужно дать возможность не просто генерировать слова с примерами, а еще и учить их там же. При этом все учат языки на смартфонах — когда едут в метро или просто, когда есть свободные 10 минут. Стало очевидно, что нужно мобильное приложение, а не какой-нибудь веб-интерфейс или бот в телеграме.
Сразу же полетела фантазия, что я должен сделать в этом приложении. Во-первых, определенно нужен самый топовый алгоритм повторений, чтобы даже круче чем у анки. Разные типы вопросов, чтобы и выбрать правильный перевод, и ввести слово и проверка произношения. Языков можно много добавить — это же нейронки под капотом, словари никакие составлять не надо. Значит можно с любого языка на любой переводить. А еще изображения можно с помощью нейронок генерировать…
Я вспомнил прошлый опыт, как пол года делал сервис для менторов. После чего рассказал об этом на Хабре и понял, что это никому не нужно и забросил. А у меня там была админка и куча функциональности после регистрации. При этом ни один человек не зарегистрировался и не воспользовался админкой пока жил этот проект. Так я его и забросил, когда понял, что продукт не полетел.
Похоже, надо поубавить свой пыл и не наступать на те же грабли.
Я решил ответить для себя — какая основная идея приложения. Изучение иностранных слов с использованием ИИ, где не нужно вводить слова вручную и не будет лимитов по доступным словам и фразам при добавлении.
Значит нужно оставить только то, без чего основная идея перестанет работать. Я начал жадно выкидывать всё лишнее за исключением небольшой функциональности, без которой приложение теряет смысл.
Оставил в MVP два языка для изучения — английский и сербский. Сербский мне нужен был для того, чтобы понять как нейронки будут работать с непопулярными языками. К тому же я сам свой первый и главный юзер, а я живу в Сербии и учу сербский. Оставил только один тип вопроса для тренировки слов, на который буквально нужно ответить “помню” или “не помню”. А также решил сделать самый топорный алгоритм интервальных повторений на первое время — если ответил правильно, то слово появляется следующий раз сначала через 1 день, потом через 2 дня, потом через 4 дня, через 8 дней и так далее до бесконечности. Если ответил неправильно, то снова возвращаемся в самое начало и слово появится завтра. И еще добавил озвучку слов и примеров в список для первой версии приложения.
Скоуп для MVP готов. Можно начинать делать.
Так получилось, что моя жена с детьми улетели на неделю из Белграда в Москву. При этом я был в отпуске. Я плотно засел вайбкодить.
Я спешил и почти не читал код, просто добавлял фичи налево и направо.
Такой опыт для меня был новым и меня немного пугало, то что я не в курсе смысла каждой строчки кода в моем собственном продукте. Подозревал, что код ужасного качества. ИИ генерировал обработчики ошибок, которые скорее всего никогда не произойдут. Он нагенерировал файл на 1000 строк для сервиса по взаимодействию с AWS озвучкой — я его даже не читал, потому что озвучка работала. В проекте использовалась локальная база данных, и я не написал ни одного SQL-запроса руками. Все делал ИИ — вероятно, не самым оптимальным образом. Но главное, что все работало и я двигался очень быстро. Мне нужно было скорее самому начать пользоваться этим приложением и проверить — нужно ли это еще кому-то кроме меня.
Половину написанного кода я потом просто выкинул в помойку после бета-тестирования, а другую половину постепенно улучшил с помощью тех же нейронок, когда понимал, что эта функциональность остается и ее нужно поддерживать. Поэтому решение “делать грязно и быстро” было полностью оправдано.
И вот я смог установить MVP-версию на свой мобильный телефон. Пока что не через стор, а через TestFlight — инструмент для тестирования приложений на настоящем iOS-девайсе, а не в симуляторе.
Я был очень доволен тем, что вышло. Ощущения были в десятки раз ярче, чем от первого прототипа в вебе. Если даже это приложение никому не будет нужно, то я определенно продолжу им пользоваться. Максимальный подъем. Нужно двигаться дальше.
И вот я добрался до вопроса, который ввел меня в ступор. Добавлять или нет платную подписку.
Если добавлю ее на такой сырой продукт, то буду выглядеть глупо. А если не добавлю и приложение выстрелит? Понимаю, что наивно, но есть же такой шанс. И тогда буду кусать локти.
Да и потерянная прибыль — это пол беды. Больше волновало, а как я проверю — можно ли на продукте заработать? Вот будет у меня 10 бесплатных пользователей или 100 или 1000, это мне ни о чем не скажет, работает бизнес модель или нет. Не буду же я спрашивать людей, а вот если приложение было бы платным, то ты бы заплатил? Кажется, что такой вопрос задавать тупо – нужно просто дать возможность заплатить и наблюдать со стороны.
Решил все-таки добавить платную функциональность в MVP. Делов-то, все приложение сделал за пару дней, а здесь просто добавить подписку.
Так как супер pro-фичей у меня не было, то я просто порезал лимиты. В бесплатной версии можно было добавлять по 10 слов в день и искать до 100 слов в день. Также порезал лимиты на озвучивание слов и примеров. Pro-версия работала без ограничений и стоила 5$ в месяц.
Так как раньше я не делал платные подписки в React Native приложениях, то начал ресерчить какие способы есть. Оказалось, что есть 2 пути — делать все вручную без дополнительных инструментов или взять RevenueCat, который закроет часть проблем. Если коротко, то это прослойка между сторами и мобильным приложением. Он предоставляет визуальный редактор для экрана подписки, SDK для интеграции в React Native и аналитику по продажам Android/iOS в одном месте. Естественно, я пошел по второму пути.
Работа уже состояла не из написания кода, а из настройки всего окружения для подписок. Во-первых, нужно было интегрировать RevenueCat с App Store Connect — связать productId, группы подписок, офферы. А до этого разобраться, что это такое и настроить платную функциональность в самом сторе. После этого завести Sandbox-окружение для тестирования подписок. Создать экраны оплаты ручками в визуальном редакторе, а не промптами.
В общем на этом этапе ИИ мог мне только подсказывать — что и где я не так настроил, но точно не мог все сделать за меня. Вайбы отличались от первых трех дней, когда я просто генерировал код и радовался, что все работает.
При этом тестировать покупки в эмуляторе не получалось, нужно было делать специальную нативную сборку. Важно было обработать кучу кейсов — отмены, истекшие подписки, восстановление покупок.
В итоге ты имеешь на руках вроде как работающие подписки, но вообще не уверен, что это реально сработает, когда ты зарелизишь это в прод. Да и не факт, что на ревью это пропустят — могут докопаться до формулировок, четкого описания преимуществ или из-за какого-то необработанного edge-кейса. Эту часть проверяют очень внимательно.
Но потом я дополнительно столкнулся с юридической стороной вопроса. Для платных приложений нужно заполнить разные налоговые документы в App Store Connect, а также привязать карту для вывода средств. Я долго пытался привязать турецкую карту Ziraat, но она не проходила валидацию потому что-то какое-то из значений содержало не то количество символов. В общем я так и не понял в чем была проблема. Получилось кое-как привязать сербский бизнес-счет для вывода средств.
На этом ад закончился. Релиз пустили и даже не завернули на доработки.
Если MVP-версия всего приложения заняла 3 дня, то на интеграции платной подписки я встрял на целую неделю.
Пока делал MVP с возможностью оплаты, то пожалел несколько раз, что ввязался в это. Мог бы быстро опубликовать первую версию приложения и уже начать собирать фидбек и первых пользователей. А оплату уже прикрутить потом, когда продукт будет вкусным и отполированным. Но уже было поздно об этом думать — что сделано, то сделано.
Наступил момент, когда я могу рассказать о своем продукте и получить первый фидбек.
У меня на тот момент был телеграм-канал на ~1500 подписчиков, и я просто выложил пост, что сделал приложение.
И вот случилась первая подписка. Да не просто подписка, а еще и с фидбеком

Да, в первое время эта была единственная платная подписка.
Было также много очень качественной обратной связи от людей, которые не оплачивали pro-версию. И бесплатной обратной связи вероятно бы хватило, чтобы двигаться дальше.
Самый обидный фидбэк был связан с той функциональностью, которую я специально выкинул из MVP.
“Что, сербский? Это шутка чтоли. Добавьте другие популярные языки” – да черт, понятно, что я добавлю.
Или “транскрипция слов”, “вывод части речи” — это я тоже хотел добавлять позже. Так и знал, что на это тригернутся.
Ну и неожиданного важного фидбека тоже было много. Я узнал, что после установки приложения попадаешь на пустой экран без слов и вообще непонятно что делать дальше. Было много багов и кейсов с ИИ-галлюцинациями, которые я не замечал.
В общем я насобирал целый бэклог только из первой обратной связи.
А зачем я тогда делал платную подписку, если 90% обратной связи было от бесплатных пользователей? Тогда может и не стоило тратить неделю? Что я получил за свои старания, 5 долларов? Более того, этот человек потом отменил подписку и уже не стал оплачивать второй месяц.
Но ценность была в другом. Я убедился, что за такое приложение в целом возможно получить деньги. А значит на масштабе, уже можно отталкиваться хоть от какой-то цифры. Даже если это была 1 платная подписка на 100 бесплатных пользователей. Эта метрика, а с метрикой можно работать и улучшать ее.
Также стоит напомнить, что у меня есть расходы на инфраструктуру — AI, озвучка текста. И это тоже важный аргумент в пользу включения платной функциональности в скоуп MVP. Ведь нужно сразу следить за тем, чтобы экономика приложения сошлась.
Бесплатный MVP может создать иллюзию, что продукт нужен. У тебя растут пользователи, есть активность, хорошие отзывы, но как только ты добавляешь оплату, то все перестает работать. Оказывается, что продукт хорош, только потому что он полностью бесплатный.
А если цель MVP – решить, нужно ли дальше развивать этот продукт, то платные функции должны быть частью самой первой версии приложения.
MVP без оплаты — это не MVP. Это просто бесплатный прототип.
ссылка на оригинал статьи https://habr.com/ru/articles/1023006/