Велика вишивка довго виглядає нерухомою
Мама вишиває хрестиком. Велика схема - це десятки тисяч хрестиків і місяці роботи. За один вечір можна зробити багато, а на картинці зміна майже непомітна. Коли прогрес ховається всередині величезного полотна, розпочату роботу легко відкласти й одного дня до неї не повернутися.
Хотілося вишивати потроху щодня й бачити, як окремі вечори складаються в завершену роботу. Так з'явився застосунок. Спершу він відповідав лише на питання "скільки зроблено сьогодні", а потім навколо цього запису виріс місячний план, статистика та ігрові механіки, які підтримують звичку без тиску.
Вечір завершується одним чесним записом
Кожна вишивка заведена окремим проєктом із загальним числом хрестиків. У кінці вечора мама записує, скільки зробила за день. Із послідовності таких позначок складається вся картина: скільки вже позаду, скільки залишилося і з якою швидкістю рухається робота.
Закритий день порахований цілком: по ньому нараховані череда, рослина, медаль і досягнення. Дозволити правку заднім числом означало б розмотувати весь цей ланцюжок назад. Простіше й чесніше залишити як є, і тоді в календарі видно реальний ритм, а не підмальовану картинку.
Місячний план показує темп, а не ставить дедлайн
По кожній вишивці ставиться посильний план на місяць. Застосунок показує поточний темп: іде робота за планом, випереджає його чи відстає. Це орієнтир, за яким видно положення всередині довгого проєкту, а не дата, до якої хобі зобов'язане перетворитися на виконане завдання.
У проєктів є зрозумілі стани: активна робота, завершена та архів. Тому поточні схеми не змішуються із завершеними та відкладеними, а список не перетворюється на звалище починань.
Гра має підтримувати, а не ловити на азарт
Ігровий шар був для мене найбільш незвичним: я здебільшого роблю сайти, а тут уперше проєктував механіку звички. Від самого початку діяло одне обмеження - застосунок має залишатися теплим трекером. У ньому немає очок, внутрішньої валюти, лідербордів і змагання з іншими. Нічого, що змушувало б заходити заради чергового "обертання барабана". Нагорода має порадувати, а пропуск - не перетворитися на покарання.
Череда днів і її заморозка. Застосунок рахує, скільки днів поспіль вдалося повишивати - звичка затягує м'яко, сама собою. Але життя буває всяке, і пропущений вечір не має обнуляти тижні праці. Тому є "заморозка": вона прощає один пропущений день і підхоплюється автоматично, а щоб це не перетворилося на лазівку, доступна не частіше одного разу на тридцять днів. Череда триває, але чесність зберігається.
Медалі за місяць зі зрозумілою планкою. У кінці місяця підсумок по кожній вишивці відзначається медаллю, і планка прозора - це частка виконаного плану:
Нижня медаль - "паросток", а не порожнє місце: навіть маленький внесок визнається, і ситуації "ти не впоралася" просто не існує.
Сад накопичує череди, а ачивки просто веселять
Зростаючий сад. Постійність перетворюється на живий сад: чим довша череда, тим вищий рівень рослини - дванадцять сходинок від паростка й травинки до троянди, соняшника і сосни, а повні тридцять днів поспіль дають найбільшу рослину. Коли череда переривається, рослина потрапляє в колекцію, і сад накопичує їх як пам'ять про пройдений шлях. У кожної рослини свій "журнал": коли була ця череда, яким був найкращий день і над якою вишивкою мама тоді працювала.
Досягнення, багато з гумором. Крім серйозних віх - хрестики, серії, плани - є велика колекція необов'язкових ачивок, частина з них захована в секретні категорії "Магічні числа", "Дати й час" та "Візерунки й ритми". Частина про числові збіги: набрати за день рівно 777 ("Джекпот"), 666 ("Диявол"), 314 ("Число Пі"), зібрати паліндром або рівно 12 345 хрестиків усього. Частина прив'язана до календаря: відзначитися в День вишиванки, вишити в новорічну ніч, спіймати п'ятницю 13-те чи 29 лютого. На результат це не впливає - вишиваєш ти для себе, а ачивки просто привід усміхнутися й зібрати ще одну.
Лляний холст замість приладової панелі
Інтерфейс я збирав не як приладову панель, а як затишну річ під тему рукоділля. Тло стилізоване під лляний холст, нагороди лежать на "полиці з медалями", а сад - це не список, а живі рослини, яких можна торкнутися поглядом.
При всій кількості механік щоденна дія залишається однією: відкрити застосунок з іконки на телефоні, відзначити хрестики й одразу побачити прогрес, череду та нагороду. Вечірнє нагадування делікатно підказує, що череда під загрозою, але не перетворюється на потік сповіщень.
Окремої "великої" мобільної програми у застосунку немає й не потрібно: він живе прямо в браузері телефона, але ставиться іконкою й поводиться як справжній. Нічого не доводиться шукати в магазині застосунків, а мені це заощадило цілу розробку під мобільні платформи. Версії для комп'ютера я свідомо не робив: за комп'ютером вишивку ніхто не відзначає, увесь сенс у тому, щоб це було під рукою на телефоні.
Найвередливіша логіка спрацьовує на межі доби
Технічно застосунок невеликий, але ігрові механіки живуть у часі й постійно перераховуються. Череда рветься й відновлюється на межі доби, заморозка відлічує своє вікно, медаль підбиває підсумок у кінці місяця, а досягнення ловить, що за один вечір набралося рівно певне число.
Таку логіку мало один раз написати. Є безліч станів, які потрібно правильно зарахувати, при зміні умов коректно зняти назад і окремо перевірити. Звичайна форма зберігає введене значення; тут одне досягнуте число чи нова дата можуть змінити одразу череду, рослину, медаль і кілька досягнень.
Але найважче мені далося не це, а втримати баланс: система має чесно показувати результат і при цьому жодного разу не звучати як наглядач чи казино. Цим питанням я перевіряв кожну механіку, від заморозки до нижньої медалі. Не раз ловив себе на тому, що простіше зробити суворий трекер, який тисне цифрами, - але саме цього я й не хотів. Здається, на цій межі між чесністю й добротою весь проєкт і тримається.
Маленький проєкт із добре знайомими інженерними завданнями
У майстерні багато великих систем - портали, автоматизація, комп'ютерний зір. Цей проєкт набагато менший, але під ним знайомі інженерні завдання: ретельний збір даних, надійне сховище, автоматика за розкладом, сповіщення та інтерфейс під реальний щоденний сценарій. Тут усе це працює заради хобі близької людини.
Саме тому цей маленький проєкт я люблю по-особливому: він нічого не продає й нікого не масштабує. Він бере улюблену справу й дбайливо перетворює її на процес, яким приємно займатися щодня. Реєстрація в застосунку відкрита, і ним потроху користуються інші вишивальниці - але справжнє мірило успіху в нього одне: чи відкриває його щовечора мама.
Це не про продуктивність. Це про те, щоб кожен вечір за п'яльцями залишав видимий слід - і завтра хотілося сісти знову.
Це наш проєкт, тому показуємо його внутрішній устрій без застережень - аж до архітектури та коду.

