Семейный бюджет в Telegram вместо гугл-таблицы: первую версию я собрала за два дня
Платежи, кредиты, накопления и машина в одном мини-приложении, которое я собрала с Claude Code. Что внутри и как устроена приватность
Мы с мужем уже много лет ведём табличку в гугл-доке, где вносим доходы. Там ещё есть обязательные платежи, график ТО по машине, и мы пробовали вести расходы общие, когда была общая карта, но с отключением Apple Pay это потеряло смысл и в целом стало невозможным.
Так как я люблю и анализировать, и строить стратегические планы, в один вечер мне сильно захотелось сделать приложение. Осложнялось всё тем, что у него Android, а у меня iPhone, и тратить токены на такую разработку не очень хотелось — жадничала.
И вот я вспомнила про Telegram Mini Apps, села и за два дня завайбкодила приложение, которое стало сильно больше, чем семейный бюджет.
Что получилось
«Домашний бюджет» — мини-приложение в Telegram для семейных денег: доходы и расходы, обязательные платежи, кредиты, накопления и машина. Без таблиц и без установки. Открывается прямо в Telegram и работает одинаково на iPhone и на Android.
Сначала я сделала его для нашей семьи, вместо той таблицы. Мы пользуемся им каждый день, и его захотели друзья. Так появился отдельный сервис: у каждой семьи свой бюджет, а суммы, названия, комментарии и имена лежат на сервере в зашифрованном виде, и ключа от них у меня нет. Про это подробно ниже, с оговорками.
Первый запуск: три вопроса
При первом запуске приложение спрашивает три вещи: как вас зовут, кто ещё ведёт бюджет и что у вас есть — машина, кредит, накопления, регулярные платежи. И собирается под ответы: лишних разделов просто не будет.
На каждом новом экране появляется подсказка со стрелкой: что это и зачем.
Каждый день: расход за несколько секунд
Расход записывается за несколько секунд: сумма, категория — готово. Расходы бывают личные и общие. Общие — те самые, которые мы когда-то пытались вести в таблице.
На главной видны остаток месяца и доходы каждого участника. В отчётах видно, куда ушли деньги за месяц, и доходы с расходами по месяцам и годам.
Платежи, кредиты, накопления
Обязательные платежи — ипотека, коммуналка, подписки. Видно, что уже оплачено, а что впереди. Отметка «оплачено» сама создаёт расход, второй раз вносить его не нужно.
В кредитах — остаток долга, график платежей и расчёт «если платить больше».
В накоплениях — вклады, счета и наличные, плюс калькулятор вкладов с налогом на проценты. Это арифметика, а не советы: что делать с деньгами, приложение не подсказывает.
Машина
Добавить можно до пяти машин. По каждой — пробег, регламент обслуживания и журнал работ. Приложение показывает, что скоро пора делать.
Семья и приватность
В семье может быть до шести участников. Присоединяются по одноразовой ссылке.
Теперь о том, где всё это хранится в сервисе. Из профиля Telegram берётся только числовой идентификатор: ни телефона, ни почты, ни имени.
Суммы, названия, комментарии и имена участников зашифрованы ключом семьи (AES-256-GCM). Ключ создаётся на телефоне и хранится в Telegram пользователя. На сервере он не хранится.
Резервный код — тот же ключ, записанный буквами и цифрами. Если его потеряют все участники семьи, записи не восстановит никто, включая меня.
Открытым остаётся «скелет» записей: сколько человек в семье, какие разделы включены, а у каждой записи — дата, вид (личный расход или общий, вклад или наличные, оплачен платёж или нет), кто из участников и какая категория, но номерами. То есть на сервере видно «участник № 2 пятого октября записал общий расход в категорию № 7», но не видно ни суммы, ни названия категории, ни комментария.
Как любой сайт, сервер видит адрес в сети, с которого пришёл запрос. Адреса неудачных попыток входа записываются — это защита от подбора.
И честное ограничение. Пока сервер отвечает на запрос, записи на мгновение расшифрованы в его памяти. Это защита от утечки базы и чужих глаз, а не абсолютная тайна. Об этом прямо написано в самом приложении.
Что есть только в нашем приложении
Банк подключён только в нашем семейном приложении. В сервис для друзей его нет.
Это Альфа-Банк. По счёту ИП Альфа-Бизнес каждое утро сам присылает выписку на отдельный почтовый ящик, а приложение раз в час забирает письма и разбирает вложение. Ни API, ни договора с банком для этого не нужно. Выписку по личной карте, файл Excel из приложения банка, я загружаю вручную. Сам файл не сохраняется.
Операции попадают в список «Из банка». Повторы и переводы между своими счетами отсеиваются сами. Приложение подсказывает категорию и запоминает мой выбор для магазина или плательщика, а я подтверждаю, и операция становится доходом или расходом.
О новых операциях бот пишет в Telegram. Пишет и про машину: уведомление вроде «пора заменить масло». Прикольно.
Ключа семьи в этом приложении нет, поэтому номер счёта и по каждой операции — дата, сумма, контрагент или магазин и назначение платежа — лежат на сервере без такого шифрования. Сервер мой и данные мои. В сервис для друзей банк не перенесён.
Как это сделано
Обычный недорогой виртуальный хостинг: PHP 8.2 и MySQL. Интерфейс написан на чистом JavaScript, без фреймворков.
Этот хостинг не принимает входящие запросы от Telegram, поэтому бот не ждёт сообщений, а сам раз в минуту их забирает.
У сервиса три вида тестов: 112 серверных, 24 сквозных проверки по настоящему HTTP и 85 тестов интерфейса. Отдельные тесты ищут в базе читаемый текст — его там быть не должно.
Приложение написано вместе с Claude Code: ТЗ, план и код. Основа — наше семейное приложение, а версию «для всех», с шифрованием и разделами, я собрала за выходные.
Что пошло не так
Опрос при первом запуске спрашивал про машину, кредиты и накопления, а самих разделов ещё не было. Я отметила всё и увидела только главную и отчёты.
Обучение сначала получилось текстовыми экранами. Я хотела подсказки со стрелкой, поэтому переделывали.
Ради приватности модель предложила перенести всю логику на телефон. Для первой версии это слишком, остановились на шифровании на сервере.
Письма из банка пять дней не разбирались: банк присылал таблицу, а не тот формат, который выбран в настройках рассылки. Пришлось писать второй разборщик.
Сколько ушло токенов
Вернусь к жадности из начала. Первая версия заняла два дня, а оба приложения вместе — шесть рабочих дней. Всё сделано в одном чате, и по его журналу видно, сколько ушло.
Модель написала около 2 миллионов токенов: код, тесты, тексты, команды. Примерно 1,5 миллиона из них ушло на семейное приложение, 0,5 на сервис.
Что дальше
Запись расхода сообщением боту, напоминания о платежах, расчёты между участниками, выгрузка своих данных. Потом — открытый код, чтобы приложение можно было развернуть у себя.
Итог
Здорово, что теперь вместо таблички, записок и прочих напоминалок можно создать сервис для себя, и всё будет в одном месте.
Пользуемся уже вторую неделю, мне нравится.
Занимаюсь постановкой управленческого учёта и автоматизацией процессов. Пишу о работе и автоматизации в Telegram-канале «ок, погнали»: t.me/ok_pognali.