Помощник в похудении для тех, кто уже срывался и бросал. Успех здесь меряется не скоростью, а тем, вернулся ли человек после пропуска: никаких стриков, штрафов и красного цвета.
Нужно было: рассчитать честный план и дату цели по проверенным формулам, подбирать рацион из реальных рецептов под норму калорий и белка, показывать тренд веса вместо скачков на весах — и всё это внутри Telegram.
• Онбординг из 8 вопросов, скрининг противопоказаний, три темпа с честной датой цели и замороженный план «при 100% соблюдении».
• Расчёты: BMR и TDEE, адаптивный TDEE, тренд веса по EMA, определение плато — по собственному исследованию формул.
• Подбор рациона под калории и белок с учётом аллергий, времени готовки и бюджета: жадная сборка с локальным поиском.
• Контент-пайплайн: сбор рецептов по JSON-LD с соблюдением robots.txt, сопоставление ингредиентов со справочником, расчёт КБЖУ по составу. Итог: 9 896 рецептов + 17,6 тыс. продуктов из Open Food Facts.
• Бэкенд: FastAPI, SQLAlchemy (async), PostgreSQL, Alembic, arq-воркер с ночным пересчётом плана.
• Бот на aiogram 3: напоминания по часовому поясу, инвайты, лист ожидания, админ-команды.
• Фронтенд: React 19, TypeScript, Vite, Recharts, framer-motion, светлая и тёмная тема Telegram, сканер штрихкодов.
• 537 тестов pytest (в т.ч. property-based на hypothesis), 48 на vitest.
• Деплой: Docker Compose + Caddy на VPS, Makefile с выкладкой и бэкапами.
Приложение работает в закрытом пилоте на своём сервере (вход по инвайтам, бот @cozyyfood_bot).
— Сборку рациона на проде ускорил с 7,5 до 0,24 секунды.
— Графики: тренд веса, прогноз с коридором, отклонение от плана, обхваты.
— Окно закрытия дня и спокойное объяснение про воду после переедания.
— 537 тестов бэкенда.
Срок: 16 дней, 206 коммитов; около 10,5 тыс. строк Python и 9,6 тыс. строк фронтенда.