Side project
Гипоаллергенный кот, который поможет облегчить быт
Telegram-бот для ежедневных бытовых задач: присылает план уборки, запускает 15-минутный таймер, считает streak и разговаривает с пользователем от лица кота.
Problem
Домашняя рутина редко сложная — она просто незаметно накапливается.
Стандартный таск-менеджер с чек-листом на 30 пунктов давит и работает плохо: список «должна сделать» отталкивает, а не мотивирует. Задачи откладываются, накапливаются, и через неделю кухня уже требует не 20 минут, а вечера.
Нужен не строгий контроль, а дружелюбный пинок раз в день — короткий, конкретный и без чувства вины. Чтобы задача была маленькой, понятной и легко начинаемой.
Solution
Бот разнёс уборку по 7 зонам с привязкой к дням недели. Показывает только сегодняшнюю задачу, а не давящий список на месяц вперёд.
- 01 Зона дня — одна из семи в ротации: кухня, санузел, все комнаты, день воздуха, прихожая, текстиль, холодильник. Не весь дом сразу — только сегодняшняя зона. «Сегодня я выбираю кухню. Не спорь.»
- 02 Ежедневные задачи — постоянный короткий чек-лист поверх зоны дня: покормить кота, почистить лоток, помыть посуду, запустить робот-пылесос, заправить увлажнитель. «Лоток сам себя не почистит. Я проверял.»
- 03 15-минутный спринт — одна кнопка запускает таймер. Не «убери всё», а «работай 15 минут и выдыши». Убирает барьер входа. «15 минут. Не геройствуй. Я слежу.»
- 04 Streak — счётчик последовательных дней выполнения. Растёт за ежедневное выполнение, прощает один пропущенный день — не наказывает за форс-мажор, но не даёт расслабиться на двух подряд.
- 05 Недельный план — просмотр расписания на 7 дней вперёд без отдельного приложения. Понятно, что ждёт в четверг, можно спланировать неделю.
- 06 Swap дней — перестановка зон местами, если день «выпал»: гости, болезнь, командировка. Расписание подстраивается, а не ломается. «Так и быть, поменяем санузел и текстиль.»
UX-фишка
Не уведомления, а котокоманды
«Должна убраться» в напоминалке создаёт сопротивление. Кот-персонаж снимает обязательство — это уже не задание сверху, а команда от существа, которому всё равно, выполнена ли она, но почему-то хочется его не подвести.
Ключевые приёмы: эмодзи-маркер 🐾, сдержанная похвала вместо восторга, ирония вместо угроз. «Я почти горжусь» работает сильнее, чем «Молодец!!!» — потому что в нём есть личность.
«От кота: 15 минут. Не геройствуй. Я слежу.»
«Лоток сам себя не почистит. Я проверял.»
«Ты нажала "Готово". Я почти горжусь.»
«Сегодня день воздуха. Я открыл бы окно сам, но у меня нет рук.»
Логика streak
Вчера выполнено → +1. Сегодня уже выполнено → без изменений. Пропуск двух дней подряд → сброс до 1. Простая механика, которая не наказывает за один пропущенный день, но не даёт расслабиться на двух подряд.
Tech stack
Инструменты выбраны под задачу, а не ради стека.
Bot framework
Python 3 + python-telegram-bot 22.7 со встроенной job-queue для ежедневной рассылки в 10:00. Минимальный overhead, нет лишних зависимостей.
Хранилище
Плоский JSON-файл — пользователи, streak, дата последнего выполнения. Перечитывается при каждом запросе. На текущей нагрузке нет смысла в базе данных.
Деплой
Procfile под worker dyno — деплоится на любой PaaS без дополнительной конфигурации.
Ограничения
Хранилище в JSON выбрано осознанно: три пользователя, простая структура, база данных была бы избыточна.
Если масштабировать на публику — вот что поменялось бы:
- PostgreSQL для пользователей и streak — вместо JSON-файла, который не выдержит конкурентную запись.
- Timezone-настройки на пользователя — сейчас рассылка в локальном времени процесса. Для аудитории в разных зонах это нужно вынести в профиль.
- Админка для редактирования текстов задач и лайфхаков — без необходимости деплоить новую версию ради правки одной фразы.
