RedCalendar — облачный трекер цикла, или покоряем Африку

Когда-то давно заметил, что у моей жены установлено странное приложение для отслеживания цикла. Тогда я подумал о двух вещах:

  • Почему оно такое некрасивое
  • Почему я не знаю о том, что там происходит

Подумал и забыл.

С детства я любил конструкторы и думал, что буду архитектором когда вырасту. Потом в моей жизни появилось программирование: сначала абстрактное (школьное), а затем стал писать приложения для Windows на Delphi. В те времена я делал автозапуски к дискам, а к окончанию школы написал висящее в трее приложение для извлечения лотка CD-ROM и свой редактор реестра. Всё это очень нравилось, поэтому решил продолжить обучение в институте, поступив на «информационные системы». На втором курсе устроился работать в салон связи к своим друзьям, где, поработав менеджером по продажам, переквалифицировался в мастера по ремонту телефонов. Институт закончил, но никто не мог предложить по моей специальности молодому специалисту даже что-то близкое к тому, что получалось зарабатывать на тот момент, поэтому программирование осталось моим хобби.

И вот однажды наткнулся на курсы Алексея Скутаренко по iOS разработке, вдохновился, купил макбук и начал учиться. Добросовестно закончив их, решил «заняться делом» и поучаствовал в паре стартапов (провальных, как и положено), параллельно изучая Стэнфордские курсы по Swift с Полом Хэгарти. В те времена Google представила Firebase и я написал пару клиент-серверных приложений, работающих на этой платформе. А потом вспомнил про трекер цикла.

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

Реализация

Мне нравятся люди, которые пишут, что сделали что-то крутое за выходные или месяц. Я им не очень верю, потому что сам так не умею: от идеи до первого релиза мне потребовалось около двух лет: по несколько раз переписывал авторизацию, хранение и синхронизацию данных, если что-то работало не так, как хотелось. Иногда сильно увлекался и в итоге всё затягивал, понимая при этом, что эти улучшения никто не заметит, но для меня они были важны. Сейчас мне не стыдно за каждый хранящийся / принятый / отправленный байт, а приложение работает даже в авиарежиме и так, как задумывалось.

Графику рисовал кодом, а где нельзя — использовал векторные изображения. И вот, первый результат, который можно «потрогать», готов.

Наглядный прогноз, простое добавление данных и, конечно же, модная тёмная тема
Наглядный прогноз, простое добавление данных и, конечно же, модная тёмная тема

Всё работает в облаке (для реализации п. 2 в будущем, хотя, пожалуй, сегодня так должны работать все приложения). Вот, для наглядности запустил календарь под одним аккаунтом на трёх разных телефонах и пользовался ими по очереди в реальном времени. Так выглядит запись с экранов:

Облачная синхронизация в деле

Сейчас модно рассказывать про использование машинного обучения и нейронных сетей. Но это иногда комично и не всегда уместно, например, в моём случае (не понимаю, кого тут обычно обманывают — пользователей или инвесторов). Пусть организм непредсказуем, можно собирать статистику и использовать эти данные. Для расчета используются медианные значения за последние 3–7 месяцев, при этом предусмотрено, что если девушке при нерегулярном цикле назначат таблетки для его нормализации и она укажет параметры нового идеального цикла, приложение запомнит их на 3 месяца.

Особое внимание уделил уведомлениям. Изначально решил не надоедать пользователям и присылать их только по делу: за 2 дня до начала цикла, через день после окончания менструации (если забыли отметить) и за 4 дня до предполагаемой овуляции. Сейчас уведомления приходят в 9:00 с учётом часового пояса, который (если нужно) корректируется при запуске приложения (чтобы не мешать, например, в отпуске). Ещё, если человек запускал календарь за 3 часа до уведомления, он его не получит (уже и так всё посмотрел).

Не все пользователи догадались как отмечать циклы, когда календарь пуст, поэтому пришлось быстро выпускать обновление с пояснениями. Зато оценили возможность добавлять комментарии с Emoji к любому дню и стали активно пользоваться этой возможностью.

Причём тут Африка?

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

Страна по номеру телефона по информации spravportal.ru
Страна по номеру телефона по информации spravportal.ru

С самого начала лидировала Африка. Возможно, для этих пользователей был решающим размер загружаемого приложения: порядка 10 МБ у меня, вместо 158 — у Flo, 91— у Clue или 58 — у Life. Сеичас пользователей из Африки порядка 70%.

Были и Тайланд, и Шри Ланка, и Украина, а позже — Великобритания, США, Германия и другие страны. А вот России почему-то не было вообще.

Первые проблемы или «почему пишу эту статью только сейчас»

Позже выяснилось, что загрузки из России тоже есть, но именно пользователи не появляются. Поскольку приложение облачное, для работы нужна учётная запись. Для входа используется номер телефона. Если человек уже пользовался приложением, мы покажем ему его данные. А если нет — спросим, что он знает о своем цикле и создадим учётную запись. Для авторизации используются штатные функции Firebase и, как показала практика, смс часто блокировались российскими операторами, особенно на Билайне. Надо было что-то срочно придумывать. Вход через Google, Apple ID или twitter не рассматривал, потому что в будущем будет версия для партнера/мамы, которых будет удобнее приглашать именно по номеру (как сделано в клабхаусе). Выбор пал на FlashCall (когда вам звонит робот и нужно ввести последние четыре цифры его номера). Это пришлось делать вручную, но сейчас такой способ нравится даже больше, чем вход по смс.

Реклама и деньги

Я задумывал приложение как бесплатное и не планировал (и пока не планирую) встраивать рекламу. Основной функционал останется бесплатным навсегда. Но, возможно, добавлю премиум опции по подписке или единоразовому платежу:

  • Гибкие теги для дней

  • Настройку времени отправки уведомлений
  • Возможность делиться информацией с партнёром / мамой

Ссылки

Загрузить приложение можно здесь (iOS) или с сайта calendar.red.

2626
35 комментариев

Знаете почему люди пишут, что сделали свое приложение за месяц-два? Просто изначально идет продумывание функционала, планирование архитектуры, дизайн и уже после код. Так, что у тех, кто имеет достаточный опыт разработки, все эти шаги идут как само собой разумеющееся. Стоит начать писать код без плана, проект незаметно становится долгостроем. Но ничего, продолжайте писать код, опыт придет со временем и вы начнете подобные приложение пачками выпускать, во время выходных, буквально на коленке. Это я сужу по себе. Если приложение у меня спланировано, напишу быстро. Стоит начать экспромт, могу вообще забросить со временем.

По поводу дизайна могу посоветовать envato elements, там по копеечной подписке доступны полноценные дизайн-макеты на все случаи жизни (решает проблему с отсутствием дизайнера).

P.S.: Жена оценила новое приложение? =)

3
Ответить

Чуть не забыл, Firebase - зло, учитесь быстро писать свой бак, чтобы не было после мучительно больно. Если с этим проблема, то тогда лучше parse-server у себя развернуть. Зато будет полный контроль над сервером без сюрпризов в виде тайм-аута на запросах и прочего.

2
Ответить

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

Ещё и потому, что автор сам себе и заказчик, и аналитик, и дизайнер, и архитектор, и разработчик, и тестировщик. Количество коммуникационных связей равно нулю, поэтому на взаимодействие не затрачивается времени, а самому с собой всегда проще договориться, чем ожидать, когда аналитик вытянет из заказчика хотелки, передаст их команде, пока дизайнер нарисует и согласует дизайн, пока под scope будет набросана архитектура и написано что-либо. Так что даже одну формочку можно писать полгода (реальный опыт из практики).

Ответить

Комментарий недоступен

2
Ответить

Тоже в компании попали на эту проблему. Не приходят как-то максимально случайно - то всё норм, то какой-нибудь один оператор отвалится, то сразу несколько.
В качестве "спасательного круга" сделали отправку через российский шлюз при нажатии пользователем "Выслать код снова". Пока устраивает)

4
Ответить

В основном проблемы с Билайном. Они периодические и бывают дни, когда теряется 100% смс. Мы общались с представителем Firebase: отсылал им номера, где точно смс терялись. Проблему признали и обещали решить. Не решили, смс иногда не приходят😔

2
Ответить

Можете рассказать, в чем отличия вашего календаря от встроенного в Здоровье на iOS?

1
Ответить