Привет, Хабр. Это история о том, как я делал ставки 7 лет, потом бросил, а потом написал приложение, которое помогло бы мне бросить раньше. Расскажу и про продуктовые решения, и про техническую часть: React Native + Expo, полностью офлайн-архитектура без бэкенда, шесть языков, и как сейчас выглядит публикация в Google Play для нового индивидуального аккаунта разработчика.
Откуда это всё
С универа подсел на ставки. Поначалу просто по фану, потом уже не мог смотреть футбол ради удовольствия — обязательно надо было депнуть). Дальше по накатанной: депы, сливы, «отыграюсь» и т.п. В итоге бросил только в этом году (надеюсь, хоть на несколько лет).
Когда я бросал, я искал приложение-трекер — что-то вроде счётчика дней трезвости, но для ставок. И обнаружил странное: почти все приложения в этой нише устроены как то, от чего они якобы помогают избавиться. Подписка $9,99 в месяц с триалом, обязательная регистрация, пуши «вернись, твой стрик сгорит», реклама. Человеку с игровой зависимостью предлагают ещё одну механику удержания и ещё одно место, куда утекают деньги.
Плюс почти всё — только на английском. На русском нормальных инструментов я не нашёл вообще.
Так появилось ТЗ для самого себя: бесплатно, без рекламы, без аккаунтов, данные не покидают телефон, на русском (и не только).
Что в итоге получилось
GamFree — приложение для отказа от азартных игр. Основные механики:
-
Счётчик — время без ставок и сэкономленные деньги (считается от средних трат, которые указываешь при онбординге). Сэкономленная сумма оказалась самой мотивирующей цифрой — она растёт буквально на глазах.
-
SOS-экран «Хочу сыграть» — главный экран всего приложения. Тяга длится 10–20 минут, задача — пережить это окно: дыхательные упражнения (4-7-8, box breathing) с анимацией, напоминание о цели, кнопка звонка доверенному человеку.
-
Карточки триггеров — упрощённая КПТ-механика: записываешь ситуацию («пятница, зарплата»), автоматическую мысль («поставлю чуть-чуть»), альтернативную мысль и конкретный план. В момент тяги открываешь готовый план, а не споришь с собой с нуля.
-
Срывы без стыда — если человек сорвался, приложение не обнуляет его «достижения» с укором. Срыв логируется (триггер, сумма, эмоции), статистика показывает, что промежутки между срывами растут. Рецидив — часть выздоровления, и UX должен это учитывать.
-
Дневник, цели накоплений, достижения, аналитика настроения — поддерживающий контур вокруг основных механик.
Тон — спокойный, в духе Calm/Headspace. Никакой «жёсткой мотивации», никакой казино-эстетики и красных кнопок.
Техническая часть
Стек
React Native 0.85 + Expo SDK 56, TypeScript, React 19. Состояние — zustand с персистом в AsyncStorage, для тяжёлых данных — expo-sqlite. UI — без UI-китов, всё своё на react-native-svg: в нише «спокойных» приложений готовые компоненты выглядят чужеродно, а кастомных экранов всего шестнадцать — посильно для одного человека.
Из expo-модулей: local-authentication (блокировка приложения по биометрии — для многих важно, чтобы никто не увидел приложение и историю срывов), notifications (утреннее/вечернее напоминание, поздравления с вехами), haptics, localization, store-review.
Главное архитектурное решение: бэкенда нет
Совсем. Ни сервера, ни аккаунтов, ни аналитики, ни крэш-репортинга с отправкой данных. Все данные живут в AsyncStorage/SQLite на устройстве.
Причины:
-
Это самые чувствительные данные, какие бывают. История срывов, проигранные суммы, записи дневника. Лучший способ не утечь — не собирать. «Мы не видим ваши данные» здесь не маркетинг, а архитектурный факт.
-
Стоимость владения — ноль. Приложение бесплатное и без монетизации; любой сервер означал бы, что проект умрёт, когда мне надоест его оплачивать. Статический privacy policy на хостинге — вся моя инфраструктура.
-
Офлайн из коробки. SOS-экран обязан открываться мгновенно и без сети — тяга не ждёт, пока загрузится спиннер.
Цена решения: нет синхронизации между устройствами и бэкапа в облако. Для этой ниши это приемлемый размен — пользователи скорее предпочтут приватность.
Локализация
Шесть языков: русский, английский, украинский, немецкий, казахский, китайский. i18n-js + expo-localization, выбор валюты отдельно от языка (RUB, USD, EUR, UAH, KZT, GEL, TRY и другие) — человек может жить в Германии и считать в евро, читая интерфейс на русском.
Совет из опыта: закладывайте i18n с первого экрана. Вытаскивать строки из 16 экранов задним числом — худшая часть проекта.
Публикация в Google Play в 2026 году
Для тех, кто не публиковался с личного аккаунта последние пару лет — процесс заметно ужесточился.
-
Закрытое тестирование обязательно. Новый индивидуальный аккаунт не может просто выложить приложение: сначала закрытый трек, минимум 12 тестировщиков, 14 дней непрерывно (до декабря 2024 было 20 — снизили). Я собирал тестировщиков [где — друзья/чаты, допиши].
-
Заявка на production. После теста подаёшь заявку, где описываешь приложение и итоги тестирования. У меня рассмотрение заняло около двух суток: подал 4 июня, одобрили 6-го.
-
Тематика — отдельная осторожность. Приложение со словами «ставки» и «казино» в названии рискует зацепить фильтры gambling-политик, хотя оно анти-гемблинговое. Я аккуратно формулировал описание (помогает, а не предлагает), на консент-экране — упоминание горячей линии психологической помощи. Категория — Health & Fitness. Прошло без вопросов, но формулировки выверял.
-
Staged rollout. Выкатывался поэтапно 20% → 50% → 100% — для соло-разработчика без крэш-репортинга это дешёвая страховка.
Что дальше
В планах на 1.1.0 — апгрейд Expo SDK под требования Android 15 (edge-to-edge), поддержка изменений ориентации для Android 16. Из продуктового — смотрю на виджет счётчика на домашний экран и экспорт данных.
Приложение здесь: GamFree в Google Play
Если у вас есть опыт со ставками — свой или близких — буду благодарен за фидбек: чего не хватает, что раздражает, что непонятно. Я один, без продакт-менеджера и фокус-групп, поэтому каждый отзыв реально влияет на то, каким приложение станет.
И если вы сейчас в той точке, где был я — из этого правда можно выбраться. Одним днём за раз.
ссылка на оригинал статьи https://habr.com/ru/articles/1045402/