Большая вышивка долго выглядит неподвижной
Мама вышивает крестиком. Большая схема - это десятки тысяч крестиков и месяцы работы. За один вечер можно сделать много, а на картинке перемена почти незаметна. Когда прогресс прячется внутри огромного полотна, начатую работу легко отложить и однажды к ней не вернуться.
Хотелось вышивать понемногу каждый день и видеть, как отдельные вечера складываются в законченную работу. Так появилось приложение. Сначала оно отвечало только на вопрос "сколько сделано сегодня", затем вокруг этой записи выросли месячный план, статистика и игровые механики, которые поддерживают привычку без давления.
Вечер заканчивается одной честной записью
Каждая вышивка заведена отдельным проектом с общим числом крестиков. В конце вечера мама записывает, сколько сделала за день. Из последовательности таких отметок складывается вся картина: сколько уже позади, сколько осталось и с какой скоростью движется работа.
Закрытый день посчитан целиком: по нему начислены череда, растение, медаль и достижения. Разрешить правку задним числом значило бы разматывать всю эту цепочку назад. Проще и честнее оставить как есть, и тогда в календаре виден реальный ритм, а не подрисованная картинка.
Месячный план показывает темп, а не ставит дедлайн
По каждой вышивке ставится посильный план на месяц. Приложение показывает текущий темп: идёт работа по плану, опережает его или отстаёт. Это ориентир, по которому видно положение внутри длинного проекта, а не дата, к которой хобби обязано превратиться в выполненную задачу.
У проектов есть понятные состояния: активная работа, завершённая и архив. Поэтому текущие схемы не смешиваются с законченными и отложенными, а список не превращается в свалку начинаний.
Игра должна поддерживать, а не ловить на азарт
Игровой слой был для меня самым непривычным: я в основном делаю сайты, а здесь впервые проектировал механику привычки. С самого начала действовало одно ограничение - приложение должно оставаться тёплым трекером. В нём нет очков, внутренней валюты, лидербордов и соревнования с другими. Ничего, что заставляло бы заходить ради очередного "вращения барабана". Награда должна порадовать, а пропуск - не превратиться в наказание.
Череда дней и её заморозка. Приложение считает, сколько дней подряд удалось повышивать - привычка затягивает мягко, сама собой. Но жизнь бывает всякая, и пропущенный вечер не должен обнулять недели труда. Поэтому есть "заморозка": она прощает один пропущенный день и подхватывается автоматически, а чтобы это не превратилось в лазейку, доступна не чаще одного раза в тридцать дней. Череда продолжается, но честность сохраняется.
Медали за месяц с понятной планкой. В конце месяца итог по каждой вышивке отмечается медалью, и планка прозрачная - это доля выполненного плана:
Нижняя медаль - "росток", а не пустое место: даже маленький вклад признаётся, и ситуации "ты не справилась" просто не существует.
Сад копит череды, а ачивки просто веселят
Растущий сад. Постоянство превращается в живой сад: чем длиннее череда, тем выше уровень растения - двенадцать ступеней от ростка и травинки до розы, подсолнуха и сосны, а полные тридцать дней подряд дают самое большое растение. Когда череда прерывается, растение попадает в коллекцию, и сад копит их как память о пройденном пути. У каждого растения свой "журнал": когда была эта череда, каким был лучший день и над какой вышивкой мама тогда работала.
Достижения, многие с юмором. Кроме серьёзных вех - крестики, серии, планы - есть большая коллекция необязательных ачивок, часть из них спрятана в секретные категории "Магические числа", "Даты и время" и "Узоры и ритмы". Часть про числовые совпадения: набрать за день ровно 777 ("Джекпот"), 666 ("Дьявол"), 314 ("Число Пи"), собрать палиндром или ровно 12 345 крестиков всего. Часть привязана к календарю: отметиться в День вышиванки, вышить в новогоднюю ночь, поймать пятницу 13-е или 29 февраля. На результат это не влияет - вышиваешь ты для себя, а ачивки просто повод улыбнуться и собрать ещё одну.
Льняной холст вместо приборной панели
Интерфейс я собирал не как приборную панель, а как уютную вещь под тему рукоделия. Фон стилизован под льняной холст, награды лежат на "полке с медалями", а сад - это не список, а живые растения, которые можно потрогать взглядом.
При всём количестве механик ежедневное действие остаётся одним: открыть приложение с иконки на телефоне, отметить крестики и сразу увидеть прогресс, череду и награду. Вечернее напоминание аккуратно подсказывает, что череда под угрозой, но не превращается в поток уведомлений.
Отдельной "большой" мобильной программы у приложения нет и не нужно: оно живёт прямо в браузере телефона, но ставится иконкой и ведёт себя как настоящее. Ничего не приходится искать в магазине приложений, а мне это сэкономило целую разработку под мобильные платформы. Версии для компьютера я сознательно не делал: за компьютером вышивку никто не отмечает, весь смысл в том, чтобы это было под рукой на телефоне.
Самая капризная логика срабатывает на границе суток
Технически приложение невелико, но игровые механики живут во времени и постоянно пересчитываются. Череда рвётся и восстанавливается на границе суток, заморозка отсчитывает своё окно, медаль подводит итог в конце месяца, а достижение ловит, что за один вечер набралось ровно определённое число.
Такую логику мало один раз написать. Есть множество состояний, которые нужно правильно засчитать, при изменении условий корректно снять обратно и отдельно проверить. Обычная форма сохраняет введённое значение; здесь одно наступившее число или новая дата могут изменить сразу череду, растение, медаль и несколько достижений.
Но труднее всего мне далось не это, а удержать баланс: система должна честно показывать результат и при этом ни разу не звучать как надзиратель или казино. Этим вопросом я проверял каждую механику, от заморозки до нижней медали. Не раз ловил себя на том, что проще сделать строгий трекер, который давит цифрами, - но именно этого я и не хотел. Кажется, на этой грани между честностью и добротой весь проект и держится.
Маленький проект с хорошо знакомыми инженерными задачами
В мастерской много крупных систем - порталы, автоматизация, компьютерное зрение. Этот проект намного меньше, но под ним знакомые инженерные задачи: аккуратный сбор данных, надёжное хранилище, автоматика по расписанию, уведомления и интерфейс под реальный ежедневный сценарий. Здесь всё это работает ради хобби близкого человека.
Именно поэтому этот маленький проект я люблю по-особому: он ничего не продаёт и никого не масштабирует. Он берёт любимое дело и аккуратно превращает его в процесс, которым приятно заниматься каждый день. Регистрация в приложении открыта, и им понемногу пользуются другие вышивальщицы - но настоящее мерило успеха у него одно: открывает ли его каждый вечер мама.
Это не про продуктивность. Это про то, чтобы каждый вечер за пяльцами оставлял видимый след - и завтра хотелось сесть снова.
Это наш проект, поэтому показываем его внутреннее устройство без оговорок - вплоть до архитектуры и кода.

