← appsuper.ru Кейс проекта · 2026
Telegram Mini App + Bot геймифицированный трекер привычек

CYBERMONK

Дисциплина — это RPG. Прокачай себя.

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

React + Vite Telegram Bot API SQLite node-cron Node · Express
Загрузка системы
cybermonk://манифест
// Система.01 — Что это

Трекер привычек, притворяющийся RPG

Обычные списки дел скучны, и поэтому их забрасывают. CyberMonk переворачивает механику: каждая задача — это квест, каждое выполнение даёт очки опыта, а сотня закрытых квестов поднимает уровень. Ваш аватар — кибер-монах — проходит через пять стадий эволюции, и прогресс становится видимым и осязаемым.

Категории задач — это RPG-характеристики: спорт, привычки, осознанность. Каждая качается отдельно, со своим уровнем и шкалой. Напоминания живут в Telegram и требуют не «прочитать и забыть», а одно нажатие: пройден, отложить или пропустить. А режим Stealth Mode гарантирует, что ночью бот молчит.

ГеймификацияTelegram-firstXP + уровни Эволюция персонажаБез рекламыКиберпанк-эстетика
02
// Ядро цикла

Жизнь одного квеста — от создания до XP

Вся система крутится вокруг короткой петли обратной связи. Она замыкается в Telegram и возвращает игрока к прогрессу снова и снова.

01
📝

Создание квеста

Задача с названием, папкой-категорией и временем напоминания. Разовая или циклическая — ежедневно, раз в N часов или по выбранным дням недели.

02
⏰

Планировщик ждёт

Cron-процесс раз в минуту сканирует базу. Как только настаёт время — формирует уведомление, если только не активен ночной Stealth Mode.

03
📲

Пуш в Telegram

Бот присылает карточку квеста с тремя инлайн-кнопками. Никаких переходов в приложение — решение принимается прямо в чате.

04
⚡

Одно нажатие

«Квест пройден» — начисляется XP. «Отложить» — сдвиг на 15 минут или час. «Пропустить» — без штрафа. Клавиатура тут же гаснет от повторных кликов.

05
📈

Опыт и уровень

+1 к счётчику категории и к глобальному. Каждые 100 квестов — новый уровень. Циклический квест сразу пересчитывает время следующего запуска.

06
🧘

Эволюция монаха

С ростом уровня аватар проходит стадии от послушника до кибер-мастера. Прогресс виден на главном экране и в детальном профиле.

03
// Возможности · живые демо

Пощупайте механику — прямо здесь

Шесть ключевых систем продукта, и каждую можно потрогать: карточки ниже — не скриншоты, а работающие мини-версии реальной логики CyberMonk.

Демо 01 · нажмите любую кнопку

Напоминание с инлайн-действиями

Сердце продукта. Уведомление приходит в Telegram как карточка с тремя кнопками — решение принимается в одно нажатие, без открытия приложения.

«Квест пройден» начисляет опыт, «Отложить» сдвигает срок (на 15 минут для коротких почасовых квестов, иначе на час), «Пропустить» закрывает шаг без XP. Циклический квест сразу планирует следующий запуск.

после первого клика клавиатура гаснет — защита от накрутки повторными нажатиями
🧘
CyberMonk@бот · напоминание
🧘 Медитация — 10 минут
Дыхание по квадрату, 4×4
ежедневно · 07:30 ✓✓
+1 XP
✓ Квест пройден
Отложить на 1 час
Пропустить квест
Ожидание действия игрока…

Демо 02 · выполняйте квесты

Опыт, уровни и эволюция монаха

Каждый закрытый квест — это +1 к опыту. Ровно сто квестов поднимают глобальный уровень, и аватар кибер-монаха проходит через пять визуальных стадий развития.

Нажимайте «Выполнить квест», чтобы наполнить шкалу, или «Серия +20», чтобы ускорить прокачку и увидеть, как монах эволюционирует.

та же формула, что в проде: уровень = 1 + ⌊всего_квестов ÷ 100⌋
Стадия 0 · Послушник
Уровень 10 / 100

Демо 03 · выберите режим

Движок повторяющихся квестов

Квест может быть разовым или циклическим. Планировщик поддерживает ежедневный ритм, интервал в N часов и произвольный набор дней недели.

Переключайте режим — и смотрите, как система вычисляет время следующего напоминания той же логикой, что работает на сервере.

calculateNextRemindAt() · базовое время квеста — 09:00
Следующее напоминание —

Демо 04 · двигайте «сейчас»

Stealth Mode — тишина по расписанию

Ночью бот должен молчать. Пользователь задаёт интервал тишины, и планировщик пропускает отправку, а квест аккуратно переносит вперёд — уведомление не теряется.

Интервал корректно работает и через полночь. Сдвиньте ползунок текущего времени и посмотрите, доставит ли система напоминание.

isQuietHours() · поддержка перехода через 00:00 (напр. 22:00 → 08:00)
Stealth Mode активен
Текущее время23:00
🔕 Уведомление подавлено · квест сдвинут вперёд

Демо 05 · создайте и удалите папку

Категории как RPG-характеристики

Папки — это ветки прокачки со своим цветом, уровнем и шкалой опыта. При регистрации создаются три: Спорт, Привычки и Осознанность.

Удаление зависит от истории: пустую папку система удаляет полностью, а папку с накопленным опытом — архивирует, чтобы прогресс не пропал. Попробуйте удалить любую.

пустая → hard delete · с завершёнными квестами → soft delete (архив)

Демо 06 · переключите тему

Живой фон и две темы

Фирменный цифровой дождь рендерится на canvas и перерисовывается при смене темы: в тёмной — неоновый бирюзовый, в светлой — приглушённый, чтобы не резать глаза.

Плюс фирменный глитч-эффект на важных действиях. Переключите тему и дёрните глитч.

Canvas + requestAnimationFrame · тема хранится в localStorage реального приложения
cybermonk.os dark
04
// Архитектура

Монорепозиторий: клиент, сервер и бот

Два независимых контура работают на одной базе. Веб-интерфейс общается через REST, а фоновый планировщик и бот живут своей жизнью, разговаривая с игроком в Telegram. Наведите на узел — подсветятся его связи.

HTTP SQL скан 1/мин send XP write push tap React SPA Vite · Mini App · lucide Express API REST · /api/* SQLite 5 таблиц · promises node-cron скан раз в минуту Telegram Bot node-telegram-bot-api Игрок Telegram · инлайн-кнопки
HTTP / чтение SQL-запись исходящий пуш callback от игрока
05
// Модель данных

Пять таблиц SQLite

Схема с автоматическими миграциями через ALTER TABLE — старые базы плавно обновляются без потери данных. Ключевые поля и связи ниже.

users

PK: telegram_id
telegram_idID пользователя из Telegram
bot_activeне заблокировал ли игрок бота (1/0)
quiet_hours_*интервал Stealth Mode, HH:mm
Хранит статус бота и границы ночной тишины для каждого игрока.

character_level

PK/FK: telegram_id
telegram_id→ users
current_levelглобальный уровень персонажа
total_completedвсего закрытых квестов
Правило: каждые 100 квестов = +1 уровень.

folders

PK: id (uuid)
idUUID папки-категории
colorHEX для неонового оформления
is_defaultсистемная «Выполненные» (1/0)
deletedфлаг мягкого удаления (архив)
deleted=1 сохраняет папку в статистике, скрывая её из списка.

character_stat_progress

PK: id (uuid)
telegram_id→ users
folder_id→ folders
levelуровень внутри категории
completed_tasksзакрытых квестов в категории
Отдельная RPG-прокачка по каждой ветке-характеристике.

tasks

PK: id (uuid) · сердце системы
folder_idтекущая папка квеста
original_folder_idисходная папка — связь со статой после переноса в «Выполненные»
repeat_typeпусто · daily · hours · custom_days
repeat_days / repeat_hoursдни недели (JSON) или интервал в часах
remind_atвремя следующего напоминания (ISO)
last_notifiedдедуп: защита от повторной отправки в ту же минуту
postponed_untilдо какого времени квест отложен (переопределяет remind_at)
original_folder_id — тихий герой схемы: благодаря ему опыт не теряет привязку к категории, даже когда выполненный квест уезжает в системную папку.
06
// Инженерные решения

Где пряталась настоящая сложность

Геймификация — витрина. Под ней четыре задачи, которые решались всерьёз: время, дедупликация, целостность прогресса и умное молчание.

Кейс 01 · Время

Напоминания в правильном часовом поясе

Сервер может работать в любой зоне, а квест на 09:00 должен сработать в девять утра у игрока, а не у машины. Наивные строки времени без таймзоны легко «уезжают» на несколько часов.

Решение: пара parseNaiveLocalTime / formatLocalTime приводит локальные строки к UTC с зоной по умолчанию Europe/Moscow и обратно — для хранения, сравнения и вывода в поля.

точноелокальное время вне зависимости от TZ сервера
Кейс 02 · Дедупликация

Ни двойных пушей, ни накрутки XP

Cron сканирует базу каждую минуту — есть риск отправить одно напоминание дважды. А игрок может спамить кнопку «Квест пройден», выбивая лишний опыт.

Решение: поле last_notified блокирует повторную отправку в ту же минуту, а по первому нажатию бот мгновенно вызывает editMessageReplyMarkup и убирает клавиатуру.

0 / 0дублей отправки · двойных начислений
Кейс 03 · Целостность

Опыт не теряется при переносах и удалении

Выполненный квест уезжает в системную папку «Выполненные» и рвёт связь со своей категорией. Удаление папки грозит стереть накопленный опыт.

Решение: original_folder_id сохраняет исходную привязку для статистики, а папки с историей удаляются «мягко» (deleted=1) — прогресс уходит в архив, а не в никуда.

0потерь опыта при любых операциях
Кейс 04 · Планировщик

Тишина, которая не теряет напоминания

Если во время ночного Stealth Mode просто не отправить уведомление, оно исчезнет. А если не пометить — cron будет пытаться слать его каждую минуту до утра.

Решение: при попадании в тихий интервал планировщик пересчитывает следующее время через calculateNextRemindAt и пишет метку пропуска — квест всплывёт позже, ровно один раз.

deferуведомление отложено, а не потеряно
07
// Стек

Из чего собрано

Клиент

React + ViteSPA и быстрая сборка
lucide-reactминималистичные иконки
Canvas 2Dцифровой дождь, глитч
Telegram WebAppMini App внутри чата
localStorageвыбор темы

Сервер и бот

Node.js + ExpressREST API
SQLiteБД с promise-обёрткой
node-telegram-bot-apiкоманды и callback-кнопки
node-cronпланировщик уведомлений
uuidидентификаторы сущностей
08
// Итог

Что этот проект демонстрирует

Полный цикл продукта в одиночку: от идеи и игровых механик до бэкенда, бота и деплоя интерфейса.

01Backend-архитектура: REST-API, схема SQLite с миграциями, транзакционные обновления опыта
02Telegram-бот: диалоговый UX, инлайн-кнопки и обработка callback-запросов
03Фоновые процессы: cron-планировщик и корректная работа с часовыми поясами
04Дизайн систем: XP, уровни, RPG-характеристики и эволюция персонажа
05Frontend: React-SPA, canvas-анимации, две темы и адаптивность
06Продуктовое мышление: удержание через геймификацию и заботу о пользователе (Stealth Mode)

Прокачай дисциплину

CyberMonk превращает привычки в квесты, а рутину — в игру, в которую хочется возвращаться.

// вставьте ссылку на бота в атрибут href кнопки выше