Нужен был простой учёт личных финансов прямо в Telegram: регулярные доходы и расходы (зарплата, аренда, кредиты), разовые траты и график накоплений с прогнозом: когда я достигну цели, если всё пойдёт как идёт.
Сервис публичный и многопользовательский: каждый видит только свои данные. Запись траты должна занимать секунды, а прогноз — считаться точно даже на десятилетия.
• Движок прогноза вынесен в общий пакет и работает и на клиенте, и на сервере: слайдер горизонта (1 год … 100 лет) пересчитывает график на лету без запросов, а сервер тем же кодом проверяет достижение цели.
• Деньги — целые копейки, без ошибок округления на длинном горизонте; индексация фиксов раз в год.
• Быстрая запись одним сообщением: «кофе 350» — и трата в учёте.
• Бот на grammY сам спрашивает, пришла ли зарплата или платёж в срок, — отметка в одно нажатие.
• Цель и прогресс к ней, сверка баланса, экспорт в CSV.
• Вход по подписи Telegram initData, все данные разделены по пользователям.
• Стек: React + Vite + Tailwind 4 + Recharts на фронте, Fastify + PostgreSQL + Zod на бэке, монорепозиторий на TypeScript.
• Деплой: Docker, nginx, GitHub Actions.
Приложение работает в боте @cashmap_bot.
— Прогноз накоплений на горизонте до 100 лет пересчитывается при перетаскивании слайдера, без сети.
— Трата записывается одним сообщением в чат.
— 101 автотест движка и API: 31-е число в феврале, индексация, цель за пределами горизонта, скорость пересчёта.
Срок: около двух недель.