Я устал считать калории руками и сделал AI-трекер внутри Telegram. Почему Mini Apps — новый App Store
Привет, VC! На связи инди-разработчик.
Все мы знаем этот цикл: скачиваешь FatSecret или MyFitnessPal, три дня честно взвешиваешь гречку, на четвёртый день забываешь, на пятый — забиваешь. Причём проблема не в мотивации и не в силе воли.
Почему? Потому что это скучно. Это больно. Это трение, которое убивает любую привычку.
Я решил, что в 2025 году вести дневник питания как бухгалтер — это архаизм. У нас есть мультимодальные нейросети, которые видят, слышат и понимают контекст.
Так появился EatOkay — Telegram Mini App, который пытается сделать процесс трекинга питания почти невидимым. Никаких нативных приложений, никаких 100 МБ загрузки из App Store. Просто открыл чат, отправил фото еды — получил результат.
В этой статье рассказываю:
- почему выбрал Telegram Mini Apps вместо нативных приложений,
- как строил архитектуру на React и Supabase,
- с какими проблемами столкнулся при работе с Gemini 2.0 Flash,
- и зачем заставил пользователей публиковать сторис, чтобы не терять прогресс.
Проблема: интерфейс — это враг
Главная проблема всех фитнес-приложений — количество действий до результата.
Чтобы записать «борщ со сметаной» в классическом приложении, нужно:
- Открыть приложение
- Нажать «+»
- Выбрать приём пищи
- Ввести название
- Найти подходящий вариант в базе
- Угадать вес порции
Я хотел сократить это до одного действия: отправил фото / текст / голос → получил результат.
Почему Telegram Mini App, а не нативное приложение
Когда я начинал, передо мной стоял выбор: писать React Native под iOS/Android или идти в Telegram. Я выбрал второе по нескольким причинам.
1. Zero-friction onboarding
Пользователь уже в Telegram. Не нужно скачивать приложение, регистрироваться, подтверждать email или придумывать пароль. Telegram.WebApp.initData сразу даёт авторизацию и базовые данные пользователя.
2. Экосистема
Telegram даёт почти нативные возможности:
- платежи через Telegram Stars (XTR),
- уведомления от бота,
- доступ к камере,
- haptic feedback,
- Telegram Stories.
Для Mini App этого более чем достаточно.
3. Порог первого действия
Вход в Mini App внутри мессенджера снижает трение по сравнению с классическими сторами.
Архитектура: “стекло” и скорость
Я не хотел делать «очередного бота с кнопками». EatOkay — это полноценное SPA.
Стек:
- Frontend: React 19 + TypeScript + Vite
- UI: Tailwind CSS с кастомным конфигом под glassmorphism
- Backend: Node.js (Express) + Telegraf
- Database: Supabase (PostgreSQL)
- AI: Google Gemini 2.0 Flash через OpenRouter
Почему Gemini 2.0 Flash?Я выбирал модель по прагматичному критерию: скорость + цена + стабильность.Для задачи распознавания еды её возможностей более чем достаточно, а стоимость на порядки ниже топовых моделей.
Магия ИИ: как считаются калории
В EatOkay есть три точки входа данных:
- Камера — фото еды
- Голос — «Съел два яблока и протеиновый батончик»
- Текст — свободный ввод
Все они сходятся в одну логику на бэкенде.
Я использую строгую системную инструкцию с JSON Schema enforcement, чтобы модель не «рассуждала», а возвращала чёткую структуру:
- название блюда
- примерный вес
- калории
- БЖУ
- health score (1–10)
Инсайт: Самая частая проблема — нейросеть пытается анализировать вообще всё. Пришлось явно указать в промпте:
Строго проверь, является ли объект на фото едой. Если это кот, ноутбук или нога — верни ошибку.
Если ИИ ошибся с весом, пользователь может сразу поправить цифры в модальном окне.
UX и геймификация: борьба за retention
Чтобы пользователи не забывали про приложение, я внедрил активную геймификацию.
1. Стрики
Классическая механика: пропустил день — серия сгорела.
2. Интеграция с Telegram Stories
Если стрик под угрозой, его можно «заморозить», опубликовав сторис через Telegram API.
Это вин-вин:
- пользователь сохраняет прогресс,
- приложение получает органический охват через сторис.
По сути, Telegram Stories стали альтернативой пуш-уведомлениям.
3. Pantry Chef
Функция «что приготовить из того, что есть». Можно уточнять рецепт в чате: «сделай менее калорийным», «без духовки», «больше белка».
Синхронизация: боль гибридного приложения
Пользователь может:
- отправить фото еды прямо в чат боту,
- или открыть Mini App.
Данные должны быть синхронизированы в обоих случаях.
Я использую:
- optimistic UI,
- локальный кэш,
- фоновую синхронизацию с Supabase.
Интерфейс реагирует мгновенно (анимации + haptic), даже если интернет нестабильный.
Монетизация
Модель Freemium:
- Free — ручной ввод, базовые графики
- Pro — AI-камера, голос, умная кухня, аналитика
Оплата реализована через Telegram Stars. Дополнительно — рефералка и промокоды: оба участника получают неделю премиума. Это работает лучше прямой рекламы.
Что пошло не так
- Telegram Ads Модерация — чёрный ящик. Объявления могут отклоняться без чётких причин.
- Галлюцинации ИИ Однажды Gemini распознал стакан воды как «водка, 100 г, 230 ккал». Пришлось усиливать промпты и добавлять контекст.
- Кроссплатформенные стили Glassmorphism красиво смотрится на новых iPhone, но на старых Android пришлось делать фолбэки.
Итоги и планы
EatOkay — это эксперимент по превращению Telegram в платформу для повседневных задач. Люди реально пользуются камерой, потому что это быстрее, чем печатать.
В планах:
- анализ микроэлементов,
- социальные челленджи внутри чатов.
Если вы думаете о собственном продукте — посмотрите в сторону Telegram Mini Apps. Особенно если важна скорость первого действия. Это всё ещё Дикий Запад, где можно занять нишу без миллионных бюджетов.
P.S. Ссылку не оставляю, чтобы не выглядело как реклама. Буду рад фидбеку в комментариях — особенно по UX.