Серия «Путь создания фитнес-платформы: от идеи, которая и»

Путь создания фитнес-платформы: от идеи, которая изменила меня, к проекту, который меняет других. Часть 1

Перед началом вашего прочтения данной серии статей сделаю пояснение - я не писатель, а все накаляканные мной истории - первый подобный опыт, потому прошу не судить строго и отнестись снисходительно<3

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

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

Честно, могу лишь пожелать вам большого успеха и дать небольшое напутствие:

«Не опускайте руки, как бы не было трудно. Идите туда, где страшно, помнив, что дорога в рай всегда будет похожа на ад, а дорога в ад - на рай. Запомните, жизнь - мимолетная штука. Сегодня вы побоитесь начать в связи с возможными трудностями на пути, а завтра пожалеете об упущенной возможности. Действуйте, и вы обязательно получите то, о чем мечтаете»

На момент написания статьи у меня самого всего лишь около 50 пользователей в проекте, 40 из которых знакомые, но даже несмотря на это я продолжаю двигаться вперед к своей цели и мечте

*В данной статье под словом ЗОЖ буду подразумевать спорт, питание, нутрициологию, фитнес, диетологию и прочие сферы, интересующие человека, следящего за своей фигурой

Глава I. Жизненный путь. От раннего детства - до возникновения идеи.

Я с раннего детства сильно увлекался спортом. Ранние годы - турники на площадке, естественно использовал их не для каких то там подтягиваний, а просто лазил и радовался жизни. Затем пошел на борьбу, отзанимался около 5 лет, а после чего и дошел до спортзала, в который хожу по сей день уже около 7 лет. Вспоминаяя свой путь понимаю, что основным моим желанием было набрать мышечную массу и стать большим-большим качком, чтобы в дверной проем входить бочком. Первые пару лет тренировок в зале постоянно возникали всякого рода трудности. Как тренироваться? Как правильно питаться? Что под собой подразумевают различные спортивные концепции? Как при слепой погоне за «телом мечты» не потерять здоровье и не травмироваться? Этот путь приходилось проходить полностью самому, без тренера и наставника, лишь по сухим, совершенно пустым советам из интернета, не имеющим под собой научного обоснования. Уже тогда витали в голове мысли, как было бы хорошо, если существовал бы какой то дешевый, но качественный наставник, которому я могу довериться и который сможет персонализированно дать советы и помочь добиться желаемого результата. Ведь те самые ответы из интернета, о которых я писал ранее, вместо пользы приносили только информационный шум, который сбивал с правильного пути и в большинстве своем запутывал, нежели наставлял на путь истинный, а реальный фитнес-тренер был не по карману…

Окончив школу я пошел в институт. Выбрал специальность, связанную с ИБ. К сожалению, выбор для меня оказался не самым удачным, совсем не заинтересовало… Однако, несмотря на это, понравились дисциплины, связанные с программированием, но увы, преподавание ограничивалось одним языком - Turbo Pascal (если что, речь про 2021 - 2022 года). Естественно в тот момент понимание кодинга было нулевое, да и в целом я только вкатывался в айти мир, но уже с того момента понял, что это вызывает большой интерес. За время обучения меня не покидала мысль, что было бы крайне интересно создать какой то свой проект, который можно будет монетизировать, и который будет вносить реальный полезный вклад в жизнь пользователя, однако идей не было, а денюжек на жизнь было не много. Так повелось, что человек я честный, а потому впаривать ненужный хлам совесть не позволяла и я стал думать, что именно заинтересовало бы лично меня и главное - дало бы реальную пользу. Проучившись три года из пяти необходимых мне пришла интересная мысль - создание своего фитнес-помощника, который будет стараться максимально выделяться на рынке своей доступностью, точностью, индивидуальностью и полнотой функционала.

Дальше плавно начал вставать вопрос о реализации, из которого вытекала туча более мелких вопросов (если бы можно было составить визуально график вопросов - получилась бы целая иерархия, вплоть до потери первичных мыслей). На каком языке писать код? Как много времени займет разработка проекта, с учетом полностью нулевой отправной точки? Какие существуют конкуренты, насколько они влиятельны, точны и функционально наполнены? И тд и тп… Я утопал в вопросах, но огонь идеи создания реально качественного и интересного продукта не погасал и питал меня. Спустя время, чуть со всем разобравшись, я начал делать первые шаги по достижению своей цели

Глава II. Первые шаги

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

1) Легкость в реализации - на фоне сайта и приложения тг-бот выглядит в разы проще в разработке

2) Популярность платформы - независимо от возраста и территориального расположения Телеграм есть практически у каждого второго жителя СНГ

3) Доступность бота для пользователей - не нужно ничего дополнительно скачивать, все вшито внутри уже установленного мессенджера

4) Кросплатформенность - отсутствие привязки к конкретному устройству. Нужен лишь вход в свой аккаунт

5) Простой и интуитивно понятный интерфейс - ответы на вопросы + кнопки и больше ничего

6) Отсутствие проблем с оплатой - несмотря на санкции никаких трудностей с оплатой не будет

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

Далее я решил посмотреть основным трудностям в глаза, которые, вероятно, в большинстве случаев обрывают путь от идеи до первых шагов в ее реализации, а именно - я говорю об анализе конкурентов. На тот момент (осень, 2023 год) конкуренция в данной области, в интерфейсе тг-ботов, была несущественная. Имелась парочка крупных проектов, которые сначала немного пошатнули мою уверенность (а может даже и психику) и вызвали мимолетные мысли о том, что я не смогу повторить что то подобное. Однако несмотря на это я продолжал верить и двигаться дальше.

После анализа конкурентов я решил практически сразу действовать, на тот момент я слабо задумывался о конечном виде своего проекта, витали лишь какие то иллюзорные мысли создания чего то уникального, крайне точного и доступного. Время близилось к середине января, уже наступившего на тот момент 2024 года, и я начал действовать. Честно, сейчас самому смешно вспоминать начало пути, но думаю это неотъемлемая глава в реализации того, что получилось в конечном итоге. Моими самыми первыми шагами в написании кода стало консольное приложение калькулятора КБЖУ, написанное на Pascal ABC, да, именно на Паскале я начал зарождение своего детища. На тот момент я буквально за 3-5 дней завершил разработку калькулятора и знаете что я сам себе сказал?) ЧТО БОТ ПОЧТИ ГОТОВ. До сих пор улавливаю поднятие кончиков рта высоко к ушам, когда вспоминаю этот момент. Полученный кальк был невероятно бестолковым. Самый базовый функционал, практически никакой уникальности и персонализации за которыми я так гнался. Просто сухой, бездушный счетчик. Но самое главное - это был мой, собственноручно написанный бездушный счетчик. Возможно, не сделав этого тогда, все бы так и осталось лишь идеей, отложенной в далекий ящик

*Забавный факт: у меня до сих пор хранится данный скриптик, написанный на паскале в папке под названием «С чего начинал ползать…». Очень надеюсь, что когда мой бот будет уже пользоваться какой-никакой популярностью (а дай Бог еще какой) я однажды зайду в эту папку, тепло улыбнусь, будто взглянул на старую игрушку из детства, случайно найденную на чердаке, и вспомню, с чего же действительно я начинал ползать

Затем встал вопрос стека разработки. Узнав, что наиболее простой и корректный выбор для создания телеграм ботов  - Python + aiogram я как раз и остановился на данном решении. Базу данных выбрал MySQL - популярное, быстрое и простое решение, большего на тот момент и не требовалось.

Первоначальной задачей я решил разработать некоторое количество популярных спортивных калькуляторов (калькулятор КБЖУ по итогу я даже не стал переносить, начал реализовывать с нуля), но с одной важной оговоркой - сделать их более гибкими, точными и персонализированными, чем большая часть популярных решений. Все, что было в интернете, зачастую оказывалось одними и теми же формулами, без дополнительных параметров и оговорок, менялся лишь дизайн, обертка ядра. Для воссоздания реально качественного продукта я понял, что придется много всего изучить. Все свободное время уходило на чтение актуальных исследований, а также спортивной и медицинской литературы. Данное действие внесет ключевое влияние в разработку и сделает проект действительно максимально точным и персонализированным на рынке, что будет закрывать вопрос о желаемой точности

Изначально все совместить (изучение программирования на python + изучение aiogram + изучение подвязки к бд + развитие в теме ЗОЖа) оказалось крайне трудоемкой задачей, особенно если учесть, что учеба не уходила на второй план, а наоборот занимала чуть ли не большую часть времени. При этом, по вечерам меня ждали свои тренировки, которые я также не мог исключить из графика (по итогу, в дальнейшем, бот все таки вытеснил их, хоть и не полностью, но об этом далее). Потому я решил начать писать калькуляторы для начала под консольное приложение с замахом на то, что в дальнейшем я повешу на них элементы из aiogram и без труда склепаю визуальный интерфейс (естественно, все оказалось не так радужно, как ожидалось). Не стану описывать процесс создания каждой функции. Вместо этого освещу некоторые фишечки некоторых разрабатываемых калькуляторов:

1) Один из таких был во все том же калькуляторе КБЖУ. Для того, чтобы добиться еще большей точности и максимально выделиться на рынке - реальный квалифицированный диетолог, специалист своего дела, составил таблицу распределения БЖУ для человека в зависимости от всех вводимых в калькуляторе параметров

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

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

В следующей статье из серии будет описана разработка BODIX...

Показать полностью 3
0

Путь создания фитнес-платформы: от идеи, которая изменила меня, к проекту, который меняет других. Часть 2

*Для тех, кто не читал статью "Путь создания фитнес-платформы: от идеи, которая изменила меня, к проекту, который меняет других. Часть 1" - рекомендую начать именно с нее перед прочтением текущей. Там описано, как мне пришла идея, с чего я только начинал реализацию и небольшое наставление ребятам, кто также как и я берется за разработку своего проекта)

Глава III. Разработка

Данная глава будет, как не странно, наиболее объемной и информативной. Не буду прям очень подробно вдаваться в детали по типу что, зачем и почему, но в общих чертах опишу процесс разработки своего проекта.

Глава III. Часть 1. Базовый минимум

Написав «консольные калькуляторы» я приступил к изучению библиотеки aiogram. Параллельно изучал принципы работы с базами данных и общую матчасть СУБД для более корректного понимания дальнейшей архитектуры проекта. Не постыжусь сказать, что далось мне все это не сильно просто и времени было затрачено приличное количество, однако по итогу я разобрался в изучаемых темах и достиг нужного уровня для продолжения создания своего детища

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

На дворе конец лета 2024 года, я наконец то завершаю перевод основных калькуляторов под интерфейс бота и перехожу к созданию регистрационной формы и личного кабинета с подвязкой к БД. Ах да, отдельно забыл упомянуть о пройденных кругах ада при тестировании калькуляторов, на которое я в сумме потратил времени примерно как половина написания полного кода этих же кальков. К моему счастью создание последовательности действий для регистрации и разработка личного кабинет прошли гораздо более шустро. Но естественно не обошлось и без проблем - одной из таких стала функция отправки уведомлений с мотивационными фразами, которая выступала в качестве вопроса в анкете «Желаете ли вы получать уведомления с мотивационными фразами, если да, то вручную задайте расписание их получения» (кстати в дальнейшем я эту функцию вырезал, уже после исправления всех ошибок). Сама же сложность заключалась в сохранении и возобновлении задач в планировщике в случае, если бот перезапускается. Не много, не мало провозился я с этим почти до конца октября того же года, но сделаю оговорку, работал в это время не только над сохранением/извлечением задач, но и над другими функциями, однако та, о которой мы сейчас говорим, наибольшим образом забирала меня и выделяемое на бота время. Изначально я начал делать костыльный вариант с сохранением самих задач в отдельную таблицу в MySQL и при перезапуске подтягивать их оттуда, но к сожалению ничего не сработало и уведомления просто не приходили. Спустя еще n-ое количество попыток я наконец то дошел до базы данных Redis, используемой для кэширования необходимой мне информации. Сказать честно, я и немного ранее знал, что внедрение редиса решит мою проблему, однако, несмотря на это, продолжал долбиться в стенку (не знаю зачем, в дальнейшем Redis мне помог реализовать огромное количество дополнительных логик в проекте). Redis смог решить мою проблему и я наконец то двинулся дальше

Следующим этапом я решил реализовать логику поздравления пользователей с Днем Рождения. Данная идея совмещала приятное с полезным: отправка теплого сообщения и автоматическое обновление возраста в базе данных (с возрастом обновлялись и некоторые дополнительные параметры). Тут встали две новые, еще более сложные проблемы:

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

Как мне реализовать функцию отправки поздравления максимально корректно, учитывая часовой пояс, а также чтобы она выполнялась независимо от контекста работы пользователя с ботом?

Я решил идти по порядку. С часовым поясом удалось разобраться достаточно быстро, если бы не одно НО. В анкетировании достаточно было просто ввести дополнительный вопрос, однако при изменении данного параметра в личном кабинете пришлось учитывать изменение и планировщика (ой, проболтался раньше времени о способе решении второй загвоздки), что вызвало некие дополнительные трудности. Решением второй проблемы, как вы уже поняли, стало очередное использование планировщика задач, да не простого, а золотого. Суть в том, что он не сохраняет задачу для каждого пользователя, когда ему присылать поздравление. Вместо этого каждый час он ищет пользователей, у которых, согласно часовому поясу, сейчас полночь, затем проверяет, сегодня ли День Рождения и если да, то уже выполняет необходимые действия. Дополнительно к этому прикрутил логику при наличии простоев, когда бот не работает и вуаля, готово!

После планировщика и мысли о ежегодном обновлении возраста и иных параметров я решил вернуться к разработанной на тот момент анкете. В голову пришла мысль, что при сборе такого пласта данных пользователей необходимо ввести корректное пользовательское соглашение на обработку этих самых данных. В этом мне помог deepseek, однако я немного засомневался в его компетентности, потому, после прочтения соглашения, решил обратиться к знакомому юристу, дабы удостовериться в качестве работы. На выходе я получил документ с уймой правок и внес уже корректную версию в стартовое окно бота :)

Глава III. Часть 2. Расширение функционала и первый «отпуск»

После этих действий бот уже в целом представлял из себя архитектуру, которая может впустить пользователя и дать ему возможность воспользоваться калькуляторами и прочими маленькими дополнительными функциями. Далее я решил серьезно дополнять функционал. Передо мной встала задача придумать что то такое, что будет интересно, востребовано и самое главное - полезно. Так родилась на свет идея с уникальной функцией «Донабор КБЖУ». Рассказывать о ней в статье не стану, предлагаю вам лично зайти и протестировать, она как раз доступна для ознакомления в бесплатной подписке. После этого решил добавить еще парочку новых калькуляторов, одним из которых стал калькулятор биоритмов. Ранее я сам пользовался таким кальком на каком то случайном сайте, но когда решил добавить его в свой проект крайне был ошеломлен тем, что то, чем я лично пользовался ранее, оказалось некорректно по производимым расчетам. Спросите как я это узнал? Да очень просто (нет). Всего лишь пришлось изучить архивные методические указания одного из медицинских университетов и сопоставить их с +-актуальным исследованиями. Окончательно побудило меня на это то, что воспользовавшись калькулятором на разных сайтах везде, АБСОЛЮТНО ВЕЗДЕ, был разный результат. Я же решил расставить все точки над i и ввести в свой калькулятор точные и единственно корректные найденные формулы. Затем я решил дополнить калькулятор статистикой о критических фазах и подкрутить возможность получения уведомлений об актуальных биоритмах в заданное пользователем время (снова встреча с планировщиком задач).

Кстати разработанный калькулятор наконец то стал реально коррелировать с моим состоянием, что помогло мне немного изменить распорядок дня и добиться большей продуктивности

Наконец то настало время заслуженного отдыха, а точнее в моем институте наступила сессия. Так уж повелось, что с начала разработки и по сей день во времена, когда наступает сессия, я приостанавливаю разработку своего проекта и готовлюсь к сдаче экзаменов. Тот раз, о котором идет речь - не стал исключением. Скажу даже больше, я настолько разгубастился, что еще и после сессии не кодил проект около двух недель. За это время изучал Docker, как правильно деплоить проект и тд, тогда я еще не знал, что до этого мне придется разрабатывать проект еще примерно около 8-9 месяцев (думал будет намного меньше, но мой внутренний перфекционист, кричащий о качестве и честности победил). Спустя «отдых» я вернулся за плотную работу. Начал с более приземленных вещей, чем разработка нового функционала, а именно с оптимизации запросов к базе данных (сделал их гибридными с кэш слоем, где это было наиболее предпочтительно), полностью переработал анкету и личный кабинет, провел глобальное тестирование и начал двигаться дальше

Генерация индивидуальных рационов питания. Тут больше и нечего сказать. Вспоминаю то время как страшный сон. Я сидел и разрабатывал днями и ночами в постоянном беспокойстве, что у меня ничего не получится при том что расчет был на то, что данная функция будет одной из ключевых в боте. Честно, если углубляться, то история разработки данной функции и мои переживания можно растянуть на еще одну главу, но все же опишу в общих чертах. Пришлось проделать очень много работы. Изучить реальные рационы, составленные фитнес-тренерами и диетологами. Проанализировать ассортимент популярных магазинов, чтобы понять, какие продукты могут быть в рационе, а какие нет. Прикинуть время на приготовление тех или иных блюд и взвесить их пользу, согласно имеющимся нутриентам в продуктах. Визуально проанализировать как выглядит n-ое количество граммов определенных продуктов. После этого я начал писать код. Было огромное количество правок, тестов, тестов и правок, правок и тестов… Спустя три месяца я впервые сгенерировал полностью готовый, корректно составленный рацион, который отвечал всем поставленным требованиям, однако проблема - генерация на одного пользователя занимает около 3-х минут. Пришлось делать разбивку по неделям, подкручивать брокер задач и стараться максимально оптимизировать код. Стало намного лучше. Подтянул функцию генерации рационов в PDF-файл и наконец то перешел к чему то иному

Глава III. Часть 3. Разработка концепции бота. Зарождение названия и дизайна

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

Моя кривая работа, сделанная в фотошопе :)

Моя кривая работа, сделанная в фотошопе :)

Названия у бота еще не было, как и идеи по общей концепции, однако в скором времени на ум, совершенно случайно, взбрела следующего рода мысль: «Так, я делаю проект по улучшению фигуры человека без вреда для здоровья, учитываю множество параметров его организма. Что если назвать бота в честь элемента, на всестороннюю проработку которого он нацелен? А именно в честь нашего организма? Так-так-так, организма? Да нет же, лучше тела! Как наше тело звучит на английском? Правильно, body. А как можно изменить это слово, чтобы получить его модифицированную версию, которую можно использовать в качестве нейминга проекта? Bodix!». Честно говоря мне безумно понравилось это название, но после данной мысли я отнесся к нему скептично, а все потому что я думал, что такое звучное название ну 100% занято какой то крупной корпорацией по разработке иновационных лекарственных средств и придется придумывать все заново. Насколько же я был приятно удивлен (да что уж там удивлен - ошеломлен!) когда понял, что по сути это слово (а точнее извращенная модификация слова:)) никем и ничем не занято

Пришло время прорисовывать дизайн. Как таковых заготовок и идей не было, но слава Богу, дизайнер был, на мой взгляд, очень компетентен и хорош в своем деле. Он прислал эскиз логотипа и после этого мы вместе стали разрабатывать полноценную концепцию. В основе лежала идея легкости, ненавязчивости и узнаваемости, но в стиле минимализма. Окончательно разработанный логотип представил из себя совмещенные воедино два тела - мужское и женское, что подчеркивало корректность подхода работы бота для обоих полов. Цветовая гамма (сине-розовая) во всем проекте продолжает мысль баланса соотношения. Далее дизайнер разработал, согласно уже продуманной идеи, три фона под наполнение различным контентом. После этого я с чистой совестью оплатил работу дизайнера и начал базово изучать Adobe Illustartor с целью добавления того самого соержания на подготовленные фоновые изображения. Спустя месяц все необходимые картинки были готовы и внедрены в код. Нужно было приступать к очередному добавлению функционала

В следующей статье из серии будет описано продолжение разработки BODIX...

Показать полностью 3
0

Путь создания фитнес-платформы: от идеи, которая изменила меня, к проекту, который меняет других. Часть 3. Заключительная

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

Глава III. Часть 4. Новые функции и разработка полноценного дополнительного раздела

На дворе уже июль 2025 года. Я продолжаю разработку своего комбайна по построению уже не фигуры, а тела мечты (теперь будем чаще говорить о теле, все таки название проекта BODIX должно прямо отражаться в статье). Я решил поставить себе скромную цель - до конца лета сделать две функции в разделе «Спорт»: случайно придуманную и ту, о создании которой я думал с самого начала разработки проекта. Мысль о первой функции пришла спонтанно, но сразу оправдала необходимость своего создания - генератор быстрых тренировок (изначально: генератор ленивых тренировок). Данная функция подразумевает под собой создание быстрых, простых и крайне ленивых тренировок. Они буду полезны для разминки и поддержания общего тонуса организма практически не вставая с дивана. В основе лежит систематизированная генерация плана упражнений, согласно анатомии и биомеханике + техника выполнения + описание целевой направленности такого рода тренировки (тоесть на что она нацелена/на проработку чего она нацелена). Мысли о второй функции появились у меня еще на начальных этапах зарождения BODIX. Данная идея будет крайне полезная для спортсменов уже имеющих какой то опыт в спортивной деятельности. Суть в том, чтобы пользователь мог быстро и всегда точно оценить, какой спортивный разряд он получит при выполнении дисциплины с тем или иным весом, который он выполняет на необходимое количество повторений. Я добавил самые популярные федерации, учел все ограничения этих самых федераций, возрастные коэффициенты, весовые категории, особенности округления и возможные дисциплины. Создал единую базу, представляющую из себя одну общую нормативную сетку и в результате получил функцию, которая буквально за 3 простых действия выдаст спортсмену его актуальный норматив в интересующей дисциплине. Никаких танцев с бубном, поиском нужных сайтов, оценке своих данных и выбора дисциплин - клик клац и все готово! Основная сложность создания такого функционала, заключалась в решении двух вопросов:

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

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

Вот уже близятся 20-ые числа августа и я полностью доделываю запланированные функции

В ближайшие две недели я добавлял еще некоторые функции. Куда то подключал по API нейросеть, где то исправлял баги и ошибки, оптимизировал запросы к базе данных и тд. И наконец появляются мысли о готовности к запуску. Я ставлю себе указание - в выходные делаю платежную систему и выпускаю, пора, если продукт и не будет пользоваться спросом, то я хотя бы буду знать, что сделал действительно все что только мог и полностью вложил себя в этот проект. Но на душе было беспокойство… Я понимал что нет, нужно что то еще, ради чего люди будут приходить и пользоваться BODIX чаще, не будут о нем забывать и тд. Мне на ум пришла очень простая, но крайне полезная идея - создать раздел «Динамика». Смысл до банальности прост - при изменении некоторых параметров пользователя в ходе эксплуатации проекта - все будет записываться в отдельную табличку в базе данных, а обращение к ней будет создаваться в планируемом разделе с целью вывода изменений данных за выбранный срок. Но я был бы не я, если бы решил просто отображать список всех изменений. Решение было такое: сначала добавить наглядное отображение с помощью графиков, затем сделать возможность выбора интервала отображения, добавить кнопку с просмотром всех записей пользователя и самое главное, вишенка на торте, дополнить функцией, которая делает объемный статистический анализ с возможным предсказанием дальнейшего хода изменения и всяческими статистическими методами из матстата. Я не ограничился и на этом. Несмотря на то, что у меня в проекте ко всем функциям предоставляются инструкции и интерпретации результатов, я решил добавить еще одну фишку в динамике - AI-анализ результата получаемой статистики. Идея в том, чтобы пользователь мог не читать про все метрики дабы понимать что они отображают, а вместо этого имел возможность получить краткую выжимку по ним. В итоге у меня получился очень качественный и информативный раздел, способный наглядно отобразить динамику изменения показателей пользователя + сделать по ней подробный и понятный анализ. Разработка данного функционала заняла у меня примерно около месяца, затем я полностью все протестировал, исправил баги и неточности и наконец то перешел к созданию платежной системы.

Глава III. Часть 4. Последний рывок

Платежку я подвязывал еще около недели. Первый день шла чисто теория, изучал вопрос регистрации платежной системы, выбирал кассу, регистрировал магазин и тд. Далее я перешел к действию. С самого начала понял, что функции, где подтягивается необходимая информация из базы данных должны быть улучшены, чтобы в них, помимо имеющегося функционала, дополнительно корректно проверялась подписка, наличие необходимых лимитов на использование некоторых функций и прочие ограничения  +  осталось извлечение нужных данных. Я решил сделать один общий сложный запрос к бд, объединяющий всю продуманную логику воедино. Далее, чтобы не изменять каждую функцию отдельно, разработал Middleware, срабатывающий на определенные колбеки. В нем и происходила проверка подписки + извлечение данных (каких - зависит от колбека) с последующим их сохранением в памяти состояния. Все протестировал, снова подправил неточности, исправил баги и вуаля, все работает! Наконец то я взглянул на своего бота как на действительно законченный проект. Впереди ждала только выгрузка на сервер… Перфекционист, сидящий внутри меня снова все испортил:) Дело в том, что после оплаты подписки пользователю необходимо было нажимать кнопку «Проверить подписку», чтобы обработать получаемый от юкассы запрос. Если же вместо этого пользователь кликал «Главное меню», либо «Назад» - независимо от наличия оплаты подписка не зачислялась. Я решил изучить, как данную проблему можно нивелировать. Остановился на идее с вебхуком, но чтобы все корректно работало в будущем на сервере - нужно иметь личный домен сайта, который будет зарегистрирован в юкассе, чтобы на него приходил ответ после платежа. Пришлось заниматься. Приобрел домен, все подключил, немного переписал функцию оплаты подписки и вот теперь точно вуаля! BODIX был готов к запуску

Глава IV. Деплой на сервер, запуск, эмоции

Деплой бота на сервер не занял слишком много времени. Я сразу приобрел облачный сервак, чтобы было удобно работать с графическим интерфейсом, а не использовать для всех задач только консоль. Несмотря на то, что ранее я поверхностно изучал Docker - использовать его в текущем проекте не решился, по причине того, что у меня в целом не было ничего такого, что было бы крайне проблемно и времязатратно перенести на сервер. Пошел максимально простым путем - быстро поставил MySQL и Reds, открыл необходимые порты для просмотра баз с локального ПК. Перенес свой проект, установил все зависимости, поменял значения в Config-файле и трясущимися пальцами прописал в cmd нужную команду для запуска… Немного подождав, увидел надпись «BODIX готов к работе». Никогда не забуду испытанные в тот момент эмоции. Спустя 2 года упорной и кропотливой работы я наконец то доделал то, о чем непрерывно думал на протяжении каждого дня, то, на что тратил все свое свободное и не всегда свободное время, то, чему я отдал все свои силы и эмоции, то, что заставляло меня грустить и радоваться, улыбаться и отчаиваться, унывать и смеяться… Творение, вышедшее 10.10.2025 из под моих клацаний по клавиатуре наконец то сделало первый глоток двоичного воздуха. Эмоции переполняли меня, я смотрел на свой пройденный путь и в голове рисовалась картинка, как я стою на пике заснеженной горы, оборачиваюсь, а там уходящие в даль мои следы и теплый лучик веры, который вел меня сквозь метели, сомнения и время

Показать полностью 2
Отличная работа, все прочитано!