Никита Бойко
Все кейсы
Планирование питания1 месяц до продакшена

«Контейнер»: план питания, который начинается с календаря, а не с калорий

Личное веб-приложение под заказ: видит рискованные дни недели заранее и готовит к ним еду «с собой». Месяц от первой строчки кода до запуска

«Контейнер»: план питания, который начинается с календаря, а не с калорий

Коротко о проекте

Для кого
Для тех, чьи дни делятся между домом, офисом и разъездами и кто вне дома срывается на фастфуд. Пользователь у этой версии один — сам заказчик.
Кто делал
Владелец продукта — сам заказчик: требования и решения его. Код писался в паре с Claude Code, ИИ-агентом для программирования.
Задача
Заранее видеть рискованные дни и готовить к ним еду, а не считать калории постфактум.
Что получилось
Приложение для компьютера и телефона, ставится прямо из браузера. Раскладывает три приёма пищи в день вокруг расписания недели, вставленного текстом, считает калории блюд из книги на 123 рецепта и собирает список покупок — а корзину во ВкусВилле наполняет одной кнопкой.
Сроки
5 сентября — 4 октября 2026 года: месяц от первой строчки кода до запуска и полного редизайна.
Объём
294 автотеста в 17 файлах, ~30 000 строк кода, CSS и тестов, 41 задокументированное архитектурное решение. Ни одной сторонней библиотеки.
Статус
В продакшене, версия 1.0.0, на закрытом сервере под паролем. Аналитики нет, поэтому нет и цифр использования.

С чего всё началось

Польза простая: рискованные дни видно заранее, и еда к ним уже готова. Месяц работы, 294 автотеста и один очень придирчивый заказчик — он же единственный пользователь😅

Началось с наблюдения: на фастфуд срываются не дома, а в дни разъездов — дорога, выезды, встречи. Обычные трекеры калорий считают уже съеденное, то есть опаздывают: когда обед попал в дневник, выбор уже сделан.

Заказчику нужен был инструмент, который заранее смотрит на неделю, видит рискованные дни и готовит к ним еду «с собой». Отсюда и название: еда на такие дни едет в контейнере.

Требования и продуктовые решения — за заказчиком, сборка — вместе с Claude Code. ИИ здесь — инструмент разработки: внутри приложения неделю разбирают правила по ключевым словам, а блюда выбирает человек.

Поработав с первой версией, заказчик выдал новый запрос: «хочу, чтобы это был сервис, а не одна страничка». Так появился редизайн в четыре вкладки: «Сегодня», «Неделя», «Покупки» и «Я».

Что умеет «Контейнер»

Путь недели простой: вставили расписание, поправили теги, выбрали блюда — а меню и список покупок собрались сами.

Скриншоты — настоящее приложение, запущенное локально на демо-неделе 7–11 сентября 2026 года: рабочая копия закрыта паролем. Данные демонстрационные, так что замазывать ничего не пришлось.

1. Неделя вставляется текстом

Расписание вставляется обычным текстом. Парсер разбирает его на дни и события со временем начала и конца, а теги ставит по ключевым словам: вне дома, работа или дом. Неверный тег можно поправить вручную.

Вокруг событий приложение раскладывает три приёма пищи в день. У каждого есть окно по времени, место (дома или «с собой») и уровень риска: срывы ведь случаются как раз вне дома.

Календарь недели с приёмами пищи между событиями

2. Блюда выбираются по фото

Кнопка «Собрать неделю» по очереди ведёт по пустым приёмам. Для каждого блюдо выбирается из фотосетки книги рецептов: 123 рецепта, на карточке калории и белок. Есть поиск по названию и составу и фильтры для быстрых или белковых блюд.

Калории, белки, жиры и углеводы приложение суммирует само, а дневную норму можно задать.

Выбор блюда по фото с калориями и белком

3. Вся неделя на одном экране

Вкладка «Неделя» показывает весь план: три тарелки в день, калории за день и переключатель «Офис / Дома» для каждого дня.

Вкладка «Неделя»: пять дней по три тарелки

4. Список покупок, который превращается в корзину

Список собирается из выбранных блюд, на всю неделю и по дням. Если рецепту нужна часть того, что продаётся целиком, он округляет вверх: рецептам нужно 1,66 луковицы, а в списке будет 2.

Список можно скопировать текстом — или нажать «Собрать во ВкусВилле», и приложение само найдёт товары в магазине и сложит их в корзину. У подбора есть лимит: на демо-неделе в него уходят первые 20 позиций из 24.

Вкладка «Покупки» с округлением и кнопкой ВкусВилла

5. «Сегодня»

В течение недели вкладка «Сегодня» первым показывает ближайший приём пищи — когда и где — и кнопку «Съел». Остальное свёрнуто.

Вкладка «Сегодня»: ближайший приём пищи и кнопка «Съел»

6. На телефоне

«Контейнер» открывается в браузере телефона и ставится на главный экран как обычное приложение, а четыре вкладки переезжают в нижнюю панель. Изменения без связи ждут в очереди до синхронизации.

«Контейнер» на телефоне: «Сегодня», «Неделя» и календарь

Как им пользуются каждый день

Скажу честно: пользователь у «Контейнера» один, и аналитика не подключена. Так что здесь нет заявлений про сэкономленное время, меньше срывов на фастфуд или здоровье. Только то, что сделано.

Приложение задумано под недельный ритм (это сценарий, а не измеренное использование):

  • Раз в неделю: вставить расписание, проверить теги, заполнить пустые приёмы, скопировать список или отправить его в корзину ВкусВилла. «Новая неделя» начинает следующую.
  • Каждый день: открыть «Сегодня» и нажать «Съел». Там же видно, сколько позиций купить к сегодня, и превью завтрашнего дня.
  • Когда планы меняются: поправить расписание или тег. Хранится только ввод человека, так что приёмы, суммы и список покупок просто пересчитываются.

Цифры и стоимость

Проект в цифрах

Эксплуатация. Точной цифры расходов нет: приложение живёт на закрытом сервере заказчика.

Похожее решение для вас. Стоимость согласуем после короткого брифа.

Как это устроено

От расписания недели до корзины в магазине

Сохраняется один раз, пересчитывается каждый раз

Что сохраняется и что пересчитывается

Многие приложения сохраняют результаты: готовое меню, список покупок. «Контейнер» хранит только ввод — текст расписания, исправленные теги, выбранные блюда, отметки — и пересчитывает всё остальное при каждой отрисовке.

Так экраны не расходятся: поменялось расписание во вторник — и старого списка покупок не останется, он всегда считается от текущей недели.

Кстати, доменная логика тоже не смотрит на часы: текущее время ей передают параметром. «Обед через 1 ч 40 мин» — это расчёт из ввода и заданного момента, так что тест может выставить любой момент и проверить ответ.

Именно это позволило покрыть тестами весь доменный слой.

Офлайн-изменения и одно правило слияния

Офлайн-изменения ждут в очереди и попадают на сервер позже. Две копии одних правил синхронизации легко расходятся, так что копия одна: сервер импортирует тот же модуль, что и клиент, и обе стороны сливают изменения по одному правилу.

Бюджет первого экрана

Редизайн: меньше на первом экране

Первую версию, одну страницу, пересобрали в четыре вкладки. А чтобы экраны снова не обросли лишним, в проекте появилось железное правило — «бюджет первого экрана»: не больше одной главной кнопки и трёх элементов.

Самое приятное: бюджет проверяет автотест, причём без браузера. Изменение, которое его нарушает, просто не проходит тест🔥

На той части экрана телефона, которая видна без прокрутки:

Экран Элементов Знаков
«Сегодня» 22 → 9 1 819 → 324
«Прогресс» → «Я» 20 → 6 1 632 → 163
«Рецепты» 63 → 61 5 928 → 4 162

Это подсчёт элементов и текста, а не исследование удобства. «Сегодня» потерял больше половины элементов и четыре пятых текста. «Рецепты» изменились меньше всего: минус два элемента и ~30% текста.

В пределах лимитов ВкусВилла

Магазин ограничивает число запросов, поэтому товары ищутся по одному, а не пачкой. Если в ответ прилетает «слишком много запросов», очередь останавливается.

Клиент для магазина и подпись запросов к хранилищу написаны вручную: сторонних библиотек у проекта нет вообще. Минус один источник обновлений и поломок, но код протоколов приходится поддерживать самому.

Разработка: один месяц

Дата Что произошло
5 сентября 2026 Первый коммит.
5–24 сентября Первая версия — одна страница. После запроса «сервис, а не одна страничка» её переделывают в четыре вкладки.
24 сентября Редизайн закончен: этим днём датирована заметка о его передаче.
4 октября 2026 Месяц после первого коммита: приложение в продакшене, редизайн на месте.

Кому это подойдёт

  • Сервисам готовой еды, питания и фитнеса — планы под реальную неделю клиента, а не под идеальную.
  • Продуктовым магазинам и доставке — планировщик, который ведёт прямо в их корзину.
  • Диетологам и тренерам, чьи клиенты срываются в дни вне дома.
  • Людям и небольшим командам с собственным ритмом: приложение на телефоне, свой сервер и никаких сторонних пакетов.
Технические подробности

Технические детали

Архитектура

  • Данные: однонаправленный поток — хранится только ввод, остальное доменный слой выводит при каждой отрисовке; история — 10 версий. Время в домен приходит параметром.
  • Интеграции: свой MCP-клиент для ВкусВилла (поиски по одному, остановка на rate_limited) и написанная вручную подпись SigV4 для S3. Ни одной npm-зависимости (ADR 0001).
  • Документация: 41 ADR, CLAUDE.md с правилами проекта для ИИ-агента, инструкция по развёртыванию на VPS и заметки о передаче этапов.

Качество и тесты

  • 294 автотеста в 17 файлах на встроенном тест-раннере Node (node:test); на первом релизе их было 214. Доменный слой покрыт целиком, бюджет первого экрана тоже проверяется тестом.
  • Оговорка: цифры по тестам взяты из кода и заметок проекта, а не из свежего прогона для этого кейса.

Данные и приватность

  • Один пользователь, аналитики нет. Рабочая копия на закрытом VPS под паролем, скриншоты — с локального запуска на демо-неделе.
  • ВкусВилл получает поисковые запросы товаров, когда из списка собирается корзина.

Технологии

Слой Технологии
Сервер Node 24 (ES-модули), 9 API-маршрутов, без npm-зависимостей
Фронтенд Чистый JavaScript без сборщика; PWA с service worker; 46 команд в интерфейсе
Синхронизация Офлайн-очередь; общий с клиентом модуль синхронизации
Хранилище Объектное хранилище S3; подпись SigV4 вручную
Интеграция с магазином MCP-сервер ВкусВилла через свой MCP-клиент
Тесты node:test
Хостинг VPS с Ubuntu, Caddy, systemd
Инструмент разработки Claude Code (ИИ-агент для программирования)

~30 000 строк кода, CSS и тестов: доменная логика, интерфейс и сервер.

Хотите что-то похожее?

Расскажите о своей задаче, и я вернусь с планом: что сделаем, за какой срок и как поймём, что сработало.

Обсудить проект
Связаться