
Проблема
В июле 2018 года я заканчивал универ и готовился искать свою первую работу в IT. Казалось бы, спокойное и беззаботное время. Вся жизнь впереди, но... Тогда я весил целых 132 килограмма, а это много даже при моём росте 190+ см.
Начались проблемы со здоровьем: болели ноги, мне было тяжело ходить и даже сидеть, а из-за высокого артериального давления у меня постоянно шла кровь из носа. Стало понятно: с этим нужно что-то делать.
Для начала я решил обратиться к врачу и пройти обследование. Его первой частью была биоимпедансометрия. Меня подключили к устройству, которое анализирует состав тела и выводит подробный отчёт на основе множества метрик. В моём случае важны были две:
-
Должный основной обмен (ДОО). Показывает минимальное количество энергии, необходимое организму в сутки.
-
Процент активной клеточной массы (% АКМ). Определяет уровень обмена веществ. Как я понял, чем его значение выше, тем лучше организм сжигает жиры. У меня оно было сильно ниже нормы.

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

Врач мне порекомендовал:
-
Контролировать питание. Количество потребляемых калорий должно быть в пределах моего ДОО — до 1767 ккал в день. В дни, когда я занимаюсь спортом, — до 2000 ккал.
-
Изменить рацион. Исключить сладкое и мучное, заменить простые углеводы на сложные, увеличить количество белка.
-
Регулярно заниматься спортом.
-
Раз в месяц проходить повторный осмотр. Он включает анализ состава тела и отслеживание основных метрик — ДОО и %АКМ.
Для контроля питания врач дал мне дневник. В него нужно было записывать всё, что я ем.

По рекомендациям врача я:
-
отказался от бананов, сладостей, белого хлеба, булок, картофеля и частично риса;
-
начал есть фрукты и овощи каждый день. Причём фрукты нужно было есть строго до 14:00;
-
увеличил количество сложных углеводов: гречки, кускуса, булгура, киноа и других круп. Стал есть больше белка: яиц и мяса на пару;
-
заменил булочки, чипсы и конфеты на грецкий орех, фундук, миндаль и кешью. В умеренном количестве они стали хорошим вариантом для перекуса;
-
перестал добавлять соль и сахар в еду;
-
выпивал по 1.5-2 литра воды в день;
-
стал больше бегать и ходить. Начал делать зарядку.
Поначалу следовать новым правилам было тяжело, да и получалось не всегда, но я старался. Врач давал рекомендации, что хорошо, а что нужно изменить:

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

Параллельно я безуспешно искал работу. Опыта у меня не было, только диплом... И тут я понял: у моих проблем одно решение — написать приложение, которое будет автоматизировать подсчёт калорий, добавить его в портфолио и показывать на собеседованиях.
Я быстро начал разрабатывать веб-приложение. Времени было немного, так что я фокусировался на главном и не заморачивался над красотой UI и функциональностью. Стек выбрал тот, который тогда знал лучше всего:
-
.NET Framework 4.6;
-
ASP NET MVC 5;
-
MS SQL;
-
Bootstrap, jQuery.
Труднее всего мне давалась вёрстка и логика UI, поскольку до этого я почти не занимался фронтендом. Я читал статьи и целые блоги, искал готовые решения, периодически копипастил готовый код. Ну а кто так не делал?
В октябре 2018 года я запустил у себя на компьютере первую версию приложения «Дневник питания» (Food Diary) и начал им пользоваться. Тогда оно выглядело так:



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

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

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

Казалось, цель достигнута, видимый результат есть и можно расслабиться, но нет. Врач сказал, что в моём организме начали перестраиваться обменные процессы, а на это нужно время — около двух лет. Если бы я забил на диету, лишний вес вернулся бы через месяц.
Поняв, что всё только начинается, я решил сделать своё приложение более современным, удобным и функциональным. В общем, полностью его переосмыслить и переписать.
Как я развивал приложение
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 лет. Как же я не потерял мотивацию и почему продолжаю его разрабатывать? Всё просто: я сам им пользуюсь. Он решает мою конкретную проблему. В остальных моих пет-проектах не было смысла в первую очередь для меня.
Из этой истории я сделал для себя такие выводы:
-
Пет-проект, отнимающий у тебя время и силы, должен решать проблему — твою или чью-то чужую, но близкую и понятную тебе.
-
Если решил начать новый проект, не мудри и не упарывайся. Используй готовые библиотеки и делай как можно проще. Пилить свою дизайн-систему без соответствующего опыта не стоит.
-
Держи фокус на одном или двух проектах. Брать больше не стоит — до конца не доведёшь ни один.
-
Периодически делай перерывы и экономь силы. Не пытайся сделать всё и сразу.
В любом случае свой проект — это круто. Главное, принести явную пользу себе или другим, решить или закрыть какую-то явную проблему. Тогда всё получится.
Автор: pkirilin