Дисциплина — это RPG. Прокачай себя.
Трекер привычек, где рутинные задачи становятся квестами, выполнение приносит XP, а персонаж-монах эволюционирует с каждым уровнем. Напоминания приходят прямо в Telegram с кнопками действий, умный планировщик уважает ваш сон, а весь бэкенд, база и киберпанк-интерфейс — спроектированы и написаны в одиночку.
Обычные списки дел скучны, и поэтому их забрасывают. CyberMonk переворачивает механику: каждая задача — это квест, каждое выполнение даёт очки опыта, а сотня закрытых квестов поднимает уровень. Ваш аватар — кибер-монах — проходит через пять стадий эволюции, и прогресс становится видимым и осязаемым.
Категории задач — это RPG-характеристики: спорт, привычки, осознанность. Каждая качается отдельно, со своим уровнем и шкалой. Напоминания живут в Telegram и требуют не «прочитать и забыть», а одно нажатие: пройден, отложить или пропустить. А режим Stealth Mode гарантирует, что ночью бот молчит.
Вся система крутится вокруг короткой петли обратной связи. Она замыкается в Telegram и возвращает игрока к прогрессу снова и снова.
Задача с названием, папкой-категорией и временем напоминания. Разовая или циклическая — ежедневно, раз в N часов или по выбранным дням недели.
Cron-процесс раз в минуту сканирует базу. Как только настаёт время — формирует уведомление, если только не активен ночной Stealth Mode.
Бот присылает карточку квеста с тремя инлайн-кнопками. Никаких переходов в приложение — решение принимается прямо в чате.
«Квест пройден» — начисляется XP. «Отложить» — сдвиг на 15 минут или час. «Пропустить» — без штрафа. Клавиатура тут же гаснет от повторных кликов.
+1 к счётчику категории и к глобальному. Каждые 100 квестов — новый уровень. Циклический квест сразу пересчитывает время следующего запуска.
С ростом уровня аватар проходит стадии от послушника до кибер-мастера. Прогресс виден на главном экране и в детальном профиле.
Шесть ключевых систем продукта, и каждую можно потрогать: карточки ниже — не скриншоты, а работающие мини-версии реальной логики CyberMonk.
Сердце продукта. Уведомление приходит в Telegram как карточка с тремя кнопками — решение принимается в одно нажатие, без открытия приложения.
«Квест пройден» начисляет опыт, «Отложить» сдвигает срок (на 15 минут для коротких почасовых квестов, иначе на час), «Пропустить» закрывает шаг без XP. Циклический квест сразу планирует следующий запуск.
Каждый закрытый квест — это +1 к опыту. Ровно сто квестов поднимают глобальный уровень, и аватар кибер-монаха проходит через пять визуальных стадий развития.
Нажимайте «Выполнить квест», чтобы наполнить шкалу, или «Серия +20», чтобы ускорить прокачку и увидеть, как монах эволюционирует.
Квест может быть разовым или циклическим. Планировщик поддерживает ежедневный ритм, интервал в N часов и произвольный набор дней недели.
Переключайте режим — и смотрите, как система вычисляет время следующего напоминания той же логикой, что работает на сервере.
Ночью бот должен молчать. Пользователь задаёт интервал тишины, и планировщик пропускает отправку, а квест аккуратно переносит вперёд — уведомление не теряется.
Интервал корректно работает и через полночь. Сдвиньте ползунок текущего времени и посмотрите, доставит ли система напоминание.
Папки — это ветки прокачки со своим цветом, уровнем и шкалой опыта. При регистрации создаются три: Спорт, Привычки и Осознанность.
Удаление зависит от истории: пустую папку система удаляет полностью, а папку с накопленным опытом — архивирует, чтобы прогресс не пропал. Попробуйте удалить любую.
Фирменный цифровой дождь рендерится на canvas и перерисовывается при смене темы: в тёмной — неоновый бирюзовый, в светлой — приглушённый, чтобы не резать глаза.
Плюс фирменный глитч-эффект на важных действиях. Переключите тему и дёрните глитч.
Два независимых контура работают на одной базе. Веб-интерфейс общается через REST, а фоновый планировщик и бот живут своей жизнью, разговаривая с игроком в Telegram. Наведите на узел — подсветятся его связи.
Схема с автоматическими миграциями через ALTER TABLE — старые базы плавно обновляются без потери данных. Ключевые поля и связи ниже.
Геймификация — витрина. Под ней четыре задачи, которые решались всерьёз: время, дедупликация, целостность прогресса и умное молчание.
Сервер может работать в любой зоне, а квест на 09:00 должен сработать в девять утра у игрока, а не у машины. Наивные строки времени без таймзоны легко «уезжают» на несколько часов.
Решение: пара parseNaiveLocalTime / formatLocalTime приводит локальные строки к UTC с зоной по умолчанию Europe/Moscow и обратно — для хранения, сравнения и вывода в поля.
Cron сканирует базу каждую минуту — есть риск отправить одно напоминание дважды. А игрок может спамить кнопку «Квест пройден», выбивая лишний опыт.
Решение: поле last_notified блокирует повторную отправку в ту же минуту, а по первому нажатию бот мгновенно вызывает editMessageReplyMarkup и убирает клавиатуру.
Выполненный квест уезжает в системную папку «Выполненные» и рвёт связь со своей категорией. Удаление папки грозит стереть накопленный опыт.
Решение: original_folder_id сохраняет исходную привязку для статистики, а папки с историей удаляются «мягко» (deleted=1) — прогресс уходит в архив, а не в никуда.
Если во время ночного Stealth Mode просто не отправить уведомление, оно исчезнет. А если не пометить — cron будет пытаться слать его каждую минуту до утра.
Решение: при попадании в тихий интервал планировщик пересчитывает следующее время через calculateNextRemindAt и пишет метку пропуска — квест всплывёт позже, ровно один раз.
Полный цикл продукта в одиночку: от идеи и игровых механик до бэкенда, бота и деплоя интерфейса.
CyberMonk превращает привычки в квесты, а рутину — в игру, в которую хочется возвращаться.