Проблема

В июле 2018 года я заканчивал универ и готовился искать свою первую работу в IT. Казалось бы, спокойное и беззаботное время. Вся жизнь впереди, но... Тогда я весил целых 132 килограмма, а это много даже при моём росте 190+ см.

Начались проблемы со здоровьем: болели ноги, мне было тяжело ходить и даже сидеть, а из-за высокого артериального давления у меня постоянно шла кровь из носа. Стало понятно: с этим нужно что-то делать.

Для начала я решил обратиться к врачу и пройти обследование. Его первой частью была биоимпедансометрия. Меня подключили к устройству, которое анализирует состав тела и выводит подробный отчёт на основе множества метрик. В моём случае важны были две:

  1. Должный основной обмен (ДОО). Показывает минимальное количество энергии, необходимое организму в сутки.

  2. Процент активной клеточной массы (% АКМ). Определяет уровень обмена веществ. Как я понял, чем его значение выше, тем лучше организм сжигает жиры. У меня оно было сильно ниже нормы.

Отчет о моем составе тела в 2018 году
Отчет о моем составе тела в 2018 году

Вторая часть обследования состояла из обычного осмотра и сдачи анализов. По её итогу никаких болезней выявлено не было. Причина моих проблем была проста: я мало двигался и много ел.

Врач мне порекомендовал:

  1. Контролировать питание. Количество потребляемых калорий должно быть в пределах моего ДОО — до 1767 ккал в день. В дни, когда я занимаюсь спортом, — до 2000 ккал.

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

  3. Регулярно заниматься спортом.

  4. Раз в месяц проходить повторный осмотр. Он включает анализ состава тела и отслеживание основных метрик — ДОО и %АКМ.

Для контроля питания врач дал мне дневник. В него нужно было записывать всё, что я ем.

По рекомендациям врача я:

  • отказался от бананов, сладостей, белого хлеба, булок, картофеля и частично риса;

  • начал есть фрукты и овощи каждый день. Причём фрукты нужно было есть строго до 14:00;

  • увеличил количество сложных углеводов: гречки, кускуса, булгура, киноа и других круп. Стал есть больше белка: яиц и мяса на пару;

  • заменил булочки, чипсы и конфеты на грецкий орех, фундук, миндаль и кешью. В умеренном количестве они стали хорошим вариантом для перекуса;

  • перестал добавлять соль и сахар в еду;

  • выпивал по 1.5-2 литра воды в день;

  • стал больше бегать и ходить. Начал делать зарядку.

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

Страница дневника с пометками от врача
Страница дневника с пометками от врача

Как появилось приложение

Я вёл дневник питания на протяжении нескольких месяцев. Взвешивал продукты, считал калории и всё в него записывал. Это отнимало много сил и времени.

Да и дневник заканчивался — оставалось буквально несколько страниц. Поэтому я начал делать сканы разворота и заполнять их, чтобы не чертить таблицу вручную:

Параллельно я безуспешно искал работу. Опыта у меня не было, только диплом... И тут я понял: у моих проблем одно решение — написать приложение, которое будет автоматизировать подсчёт калорий, добавить его в портфолио и показывать на собеседованиях.

Я быстро начал разрабатывать веб-приложение. Времени было немного, так что я фокусировался на главном и не заморачивался над красотой UI и функциональностью. Стек выбрал тот, который тогда знал лучше всего:

  • .NET Framework 4.6;

  • ASP NET MVC 5;

  • MS SQL;

  • Bootstrap, jQuery.

Труднее всего мне давалась вёрстка и логика UI, поскольку до этого я почти не занимался фронтендом. Я читал статьи и целые блоги, искал готовые решения, периодически копипастил готовый код. Ну а кто так не делал?

В октябре 2018 года я запустил у себя на компьютере первую версию приложения «Дневник питания» (Food Diary) и начал им пользоваться. Тогда оно выглядело так:

Идея приложения проста: вы создаёте запись, указываете продукт и его количество. Записи группируются по приёмам пищи — завтрак, обед и так далее — и по дням. Энергетическая ценность продуктов в килокалориях на 100 г. веса указывается во встроенном справочнике. Приложение берёт эту цифру и через пропорцию рассчитывает количество калорий для введённого веса продукта. Калории из всех записей суммируются и выводятся в таблице.

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

Год спустя

В течение года я вёл дневник питания с помощью своего приложения. Чтобы было удобнее, я написал скрипт, выгружающий отчёты из базы данных. Их я относил врачу, и мы вместе анализировали состав тела и мой рацион.

За год у меня накопилась целая стопка таких отчётов
За год у меня накопилась целая стопка таких отчётов

В итоге через год мой вес снизился до 97 кг:

Проблемы со здоровьем, которые меня беспокоили, исчезли. Энергии и сил стало больше. Визуально изменения тоже были заметны:

Слева я в 2018 году, а справа — в 2019
Слева я в 2018 году, а справа — в 2019

Казалось, цель достигнута, видимый результат есть и можно расслабиться, но нет. Врач сказал, что в моём организме начали перестраиваться обменные процессы, а на это нужно время — около двух лет. Если бы я забил на диету, лишний вес вернулся бы через месяц. 

Поняв, что всё только начинается, я решил сделать своё приложение более современным, удобным и функциональным. В общем, полностью его переосмыслить и переписать.

Как я развивал приложение

2019

Изначально моё приложение было монолитом — фронтенд и бэкенд были вместе. Я решил их разделить на два независимых приложения, а также обновить стек. Основными критериями в выборе инструментов были современность и популярность. Я хотел не только сделать приложение, но и приобрести навыки, которые мне пригодятся в будущем.

С выбором инструментов для бэкенда я не заморачивался. .NET я знал неплохо, а потому просто перешёл с .NET Framework на .NET Core. Он тогда набирал популярность и получил стабильную третью версию. А ещё я заменил MS SQL на PostgreSQL.

С фронтендом было сложнее. Я был наслышан о разных популярных фронтенд-фреймворках и библиотеках, упрощавших разработчикам жизнь: React, Angular и отстававший от них Vue. Я стал изучать React.

Я начал разрабатывать вторую версию приложения. Всё шло неплохо, пока мне не пришло в голову разработать собственную дизайн-систему.

«Моё приложение должно быть суперудобным и красивым. Зачем мне готовые компоненты? Хочу свой уникальный дизайн! Конечно, я не дизайнер, но что там сложного? Сидишь, кнопочки тыкаешь в Фигме» — думал я.

На отрисовку компонентов и UI ушло около двух месяцев, на вёрстку примерно столько же. В итоге получился вот такой «шедевр»:

Тогда мне казалось, что я сделал крутой UI. Ровно до того момента, пока сам не начал им пользоваться.

2020

Со временем пришло осознание, что моя дизайн-система, мягко говоря, не очень. Приложение выглядело безобразно, а пользоваться им было неудобно.

Только тогда я задумался об использовании готовых компонентов. Критерии их выбора не отличались от тех, по которым я выбирал инструменты для разработки: популярность и современность. Мне подходили Ant Design и Material UI. Я остановился на последнем и полностью переделал интерфейс.

2021

Прошли 2 года, в течение которых я должен был контролировать вес. Я перестал ходить к врачу и контролировал себя сам: вёл дневник и каждую неделю взвешивался. Вес держался на уровне 95-97 кг. — меня это устраивало.

2022

Со временем я перестал вести дневник. Какое-то время я по привычке развивал приложение, но потом потерял к нему интерес и забросил его.

2023

В декабре 2023 года ситуация изменилась: встав на весы, я внезапно увидел 99 кг. Возвращаться к лишнему весу и проблемам со здоровьем не хотелось, особенно после всей проделанной работы.

Тогда я вспомнил про своё приложение и снова стал вести дневник питания. Спустя какое-то время я понял, почему вес стал расти — калораж моего рациона увеличился до 2300-2400 калорий в день, а это сильно выше моей нормы.

Мой «Дневник питания» снова мне помог. Благодаря ему я вернул контроль над калориями и стал держать вес на уровне комфортных 95-97 кг.

2024

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

Так я решил превратить своё веб-приложение в мобильное. У меня не было опыта мобильной разработки, так что я сделал PWA и адаптировал интерфейс под экраны смартфонов.

Первая проблема возникла уже на этапе добавления нового продукта — приходилось вручную вводить его название, калории и граммовки. На смартфоне это было делать неудобно. Тогда же я узнал, что OpenAI выпустила новую модель GPT-4o. Она умела отвечать на вопросы по картинкам.

В качестве эксперимента я внедрил в приложение функцию подсчёта калорий по фотографии продукта. Я отправлял изображение в API OpenAI, где оно анализировалось — модель находила продукт, высчитывала его примерный вес и количество калорий, а потом возвращала данные в формате JSON.

Теперь мне достаточно сфотографировать продукт или этикетку — остальное дело техники. Работает не всегда точно, но время экономит.

Дневник веса я изначально вёл в Google Sheets, но заполнять таблицу со смартфона тоже было неудобно. Поэтому я добавил в приложение ещё и функцию отслеживания веса:

На текущий момент я использую:

  • Yandex Cloud для развёртывания приложения в облаке;

  • Supabase в качестве базы данных. В бесплатной версии они дают 500 Мб. Мне пока хватает;

  • ProxyAPI для доступа к OpenAI API из России.

Суммарно вся инфраструктура стоит около 30 руб. в месяц. Код можно посмотреть на GitHub.

Впрочем, история на этом не заканчивается. Я продолжаю пользоваться приложением, а значит и развивать его. Сейчас работаю над процессом заполнения новых записей — делаю его удобнее и быстрее.

Почему я не пользуюсь готовыми приложениями

Многие спросят: почему я не пользуюсь похожими готовыми приложениями, а продолжаю писать своё? Зачем изобретать велосипед?

Работая над собственным приложением, я прокачиваю свои скиллы, изучаю новое, применяю эти знания на практике с пользой для себя и делюсь своими наработками с другими. Я не пытаюсь превзойти FatSecret, SnapCalorie и другие подобные приложения.

О силах и времени, вложенных в своё решение, я не жалею. Да и достойных open-source проектов такого типа я не нашёл, тем более бесплатных. Есть, конечно, OpenNutriTracker, но он сыроват, как мне кажется.

Выводы

В интернете есть много подборок «топ X идей для пет-проектов» и советов в духе «сделайте клон «Твиттера», «Нетфликса», «Джиры». Раньше я им следовал и разрабатывал календари, тудушники, клоны популярных приложений. Однако каждый раз я терял мотивацию и тратил время и силы впустую.

«Дневник питания» напротив — существует уже 6 лет. Как же я не потерял мотивацию и почему продолжаю его разрабатывать? Всё просто: я сам им пользуюсь. Он решает мою конкретную проблему. В остальных моих пет-проектах не было смысла в первую очередь для меня.

Из этой истории я сделал для себя такие выводы:

  1. Пет-проект, отнимающий у тебя время и силы, должен решать проблему — твою или чью-то чужую, но близкую и понятную тебе.

  2. Если решил начать новый проект, не мудри и не упарывайся. Используй готовые библиотеки и делай как можно проще. Пилить свою дизайн-систему без соответствующего опыта не стоит.

  3. Держи фокус на одном или двух проектах. Брать больше не стоит — до конца не доведёшь ни один.

  4. Периодически делай перерывы и экономь силы. Не пытайся сделать всё и сразу.

В любом случае свой проект — это круто. Главное, принести явную пользу себе или другим, решить или закрыть какую-то явную проблему. Тогда всё получится.

Комментарии (4)


  1. makobs
    14.02.2025 11:42

    Какая кайфовая история. Паша, спасибо!


    1. pkirilin Автор
      14.02.2025 11:42

      Спасибо)


  1. weart
    14.02.2025 11:42

    Я бы на вашем месте сменил врача с такими рекомендациями.

    Из личного опыта - за последние 3.5 месяца мой вес 92.6 -> 85.9 без ограничений по продуктам питания и дефиците калорий около 15% (питаюсь на 2700кк при росте 187)

    Потреблять больше калорий в дни тренировок и меньше в дни отдыха - это вообще кринж

    Что касается приложения - те, что в маркетах, это, в большинстве случаев, боль. Я довольно много времени потратил на поиск и тестирование, остановился на Tasager (использую на ios). На редкость приятная минималистичная штука, может, подчерпнете какие-нить фишки у них.


    1. pkirilin Автор
      14.02.2025 11:42

      Про Tasager не знал, посмотрю. Спасибо за наводку

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

      Но и в моем, и в вашем случае есть результат, это главное