Мама, я (вайбкодер) предприниматель! Или как я создавал телеграм-бота в 2026-м году
Это история о том, как я внезапно получил много времени в распоряжение и решил создать свой НАСТОЯЩИЙ SaaS-проект при помощи двух пластиковых бутылок, скотча, канцелярских резинок и нейросетей! Присаживайтесь поудобнее, если стоите! Прилягте комфортабельно, если сидите! Становитесь непринуждённо, если находитесь в воздухе!
Интро
Я давно в айти.
Не так давно, как люди, работающие в айти уже 10-15-20 лет, но тоже давно.
Считаю, что 6 лет уже смело можно называть "давно".
Попал с неожиданного для себя входа - тестирование, и очень долго пытался найти себя. Возможно, поиски усложнялись тем, что было темно, не понятно, и плохо пахло.
Тем не менее, я каким-то чудом дошёл до более-менее беловоротничковой автоматизации тестирования, и сознание со временем стало приходить в себя, ясность ума стала возвращаться в норму.
Я стал вспоминать, что в студенческие годы мне нравилось разрабатывать логику и системы: будь то настолка, ночная квест-игра или мобильное приложение для ВУЗа. Точнее, для студентов ВУЗа, потому что я уже оканчивал университет, и хотелось оставить после себя что-то полезное, "для людей".
Проект я умудрился даже выложить в App Store и Google Play, им даже успели попользоваться какое-то время. Но мечте не суждено было сбыться под давлением бесконечного потока бюрократии и смены руководства в гос. учреждении.
Но было действительно интересно: машинка собиралась в конструкторе приложений от гугла - AppSheet. Да, название спорное. Особенно, когда пытаешься объяснить кому-то, на чём построено твоё приложение (надеюсь, каламбур с sheet все выкупили).
Тем не менее, я помню точно, что это было чертовски интересно: БД было на основе гугл-таблиц, "фронт" приложения представлял собой аккуратный наборчик UI из уже готовых компонентов. Можно было использовать гипер-ссылки и мало-мальскую авторизацию.
Планировалось запустить полноценно MVP, обкатать его в течение какого-то времени, и постепенно переводить приложение уже во взрослый Flutter.
Опыт в работе с различными группами людей у меня имелся - долгое время состоял в главном студенческом профкоме, - поэтому, были приняты различные интересные решения по функционалу. Общая новостная лента, разделения на факультеты, на мероприятия, календари (с этого всё и начинается) и много-много чего ещё, что должно было заметно облегчить студенческую жизнь.
Это была моя мечта, которую смыло пеной дней.
И вот, с тех пор, я работал в тестировании, как Росомаха из "Логана" работал водителем лимузина.
Время шло, но желание сделать что-то интересное и полезное никуда не уходило.
Идея и выбор инструментов
Идея пришла ко мне не сразу.
Как говорят коучи по стартапам и тд: "Чтобы понять чужую боль, ты должен её прочувствовать".
Может, эту фразу говорил кто-то другой, но суть ясна.
И мне начало становиться постепенно больно.
Сначала я её не замечал и пытался делать вид, что "так и должно быть", но потом, со временем, стал понимать, что это повальная тенденция, и что рано или поздно кто-нибудь из-за этого пострадает.
Да, это был найм.
- Найм, найм, найм.... (голосом Джокера)
Рекрутёры - славные люди. Но их работа - отнюдь, очень специфическая штука.
Мне всегда казалось, что это как работа с холодными продажами, только хуже:
ты работаешь в АЙТИ! С айтишниками, чьи сердца холоднее, чем любой недоступный абонент.
Ну и с опытом, постепенно, со сменой одного места работы, второго, третьего, четвёртого....(всего их было 8 за 6 лет)
Я каждый раз сталкивался с одним и тем же сценарием - бесконечная возня с временными слотами!
Сколько сервисов, сколько календарей...
Сколько ВСЕГО!
И каждый раз всё разное, каждый раз, что-то где-то может пойти не так.
Каждый раз ты тратишь на это намного больше времени, чем тебе (и рекрутёру тоже) действительно этого бы хотелось.
И у меня появилась идея для своего сервиса.
Выбирать долго не пришлось (спасибо западным партнёрам, которые отрубили доступы ко всему):
Мобильный сегмент - сразу отпал: мои акки разраба так и пылятся в надеждах, а возиться с регистрацией где-то на стороне мне искренне влом.
Веб - тоже отпал: я сам изначально устраивался именно в веб-сегмент, и примерно понимаю всю внутреннюю кухню. Поначалу хотелось начать с него, но потом понял, что хочется что-то более "весёлое", наверное.
И мой выбор пал на создание ботов в Telegram!
"О, мой бог! It's UNBELIEVABLE! Просто невозможно как уникально и нишево!
Твой проект точно выстрелит и ты заработаешь миллионы!" - подумаете вы?
Верно, я так тоже не думал. Будем реалистами, в 2026 году этим уже никого не удивить. Мне кажется, только ленивый не создавал себе бота в @botfather и не пилил туда какую-нибудь логику.
И я так думал изначально, и особо не заморачивался.
И именно поэтому...
Очень СИЛЬНО ошибался.
Архитектура и логика бота
Но романтика разработки бота никуда не девалась, и процесс начался!
Театр начинается с вешалки, а разработка начинается с обучающего ролика на Ютубе! (и бизнес-требований)
Мной были проанализированы текущие "решения": их плюсы и минусы (привет, calendly!), сложность с точки зрения архитектуры и логики.
Хотелось сделать хорошо. Сделать удобно. Чтобы мне самому нравилось.
Понимаю, не всегда при разработке удаётся "вжиться" в роль конечного пользователя полностью (и кто-то такой: что? юзеры? у того, над чем я работаю, есть юзеры?), но я пытался!
За все 6 лет, в общей сложности, по моим приблизительным данным, я в том или ином виде назначал встречи с рекрутёрами, hr-ами, менеджерами и тд свыше 350 раз.
Где-то на хх была статистика по общему количеству поданных откликов, и она перевалила за 1000 ещё года два назад.
ВСТРЕЧ БЫЛО МНОГО!
И были знакомые "практикующие рекрутёры".
Первоначально планировалась парочка таблиц, разделение на роли и минимально удобный для менеджмента встреч функционал.
Но и тут я тоже ошибся!
На данный момент в моём проекте уже 13 таблиц!
лично для меня это до сих пор шок, потому что я искренне был уверен, что у чего-чего, а у БОТА точно не прям много логики будет.
БД решено было сделать на Postgres (18й версии, но об этом "гениальном" решении позже).
Как я говорил выше, в обучающем видео предлагалась работа на mySQL, но при настройке первичных доступов, кодировки и тд, мне стало интересно: "А в чём тогда различие с Postgres?". А различия были! По крайней мере, мне о них любезно (и очень подробно) рассказал Gemini (а, точнее, Режим ИИ в поиске).
Кстати, я совсем забыл перечислить всех ИИ-работяг, с которыми я работал по проекту! Опишу сразу всё, чтобы по ходу повествования было легче ориентироваться:
- В ДипСаке я работал с концепциями и рассуждениями, анализировал гипотезы.
- В ЖПТ я работал с технической частью, составлял каркас, основную логику.
- В Гемини я работал как с очень мощным гугл-поиском: всё, что нужно было очень быстро найти и понять, отлично им обрабатывалось
- В Клоде было удобно работать на макро-уровне, "подчищать" за какой-нибудь из остальных работяжек хвосты.
Идём дальше!
Библиотека бота стандартная - aiogram. При работе с БД задействован Redis. После сборки мало-мальски рабочего функционала всё упаковывается в Docker. Простенькая VPS, куда мы закидываем нашего гомункула
И тут началось. Я действительно не представлял, С ЧЕМ ИМЕННО я имею дело...
Но я сразу оговорюсь, почти со всем этим я имел дело по работе и представлял, как это работает. Но! Одно дело, когда ты тестировщик, и тебе вообще фиолетово, что, где и как: тебе надо проверить тикет, и больше тебя ничего не интересует (что нормально!).
Но вот другое дело, когда ты уже "по ту сторону"...
При работе с Redis (о, мой боже!) оказалось, что он поддерживается только на *nix-системах! Поэтому, пришлось прибегнуть к WSL.
При работе с Docker большую роль имеет менеджмент образов и взаимодействия самого бота с БД. Изначально я поставил базу сразу на сервер, а бота, Redis и тд изолировал в контейнере. Позже было решено изменить решение в пользу размещения всех образов в один контейнер.
Потом Gemini любезно рассказал про существование миграций, и насколько белым этот процесс делает твой воротничок! (белее, чем любой стиральный порошок) И в проект был интегрирован Alembic.
Позже было решено перевести всё на веб-хуки. Это повлекло за собой необходимость покупки домена и всего сопутствующего дальше за этим.
Нужно было хранить бэкапы где-то, и VPS (старый добрый TimeWeb - не реклама!) имел возможность подключения S3, что тоже пришлось настраивать.
Помимо веб-хуков встала необходимость подключения Nginx, чтобы всё было красиво и изолировано.
И во всём этом приходилось разбираться по ходу дела!
Одна только борьба с Postgres чего мне стоила!
Понимаете, когда ты - нубяра, никто не говорит тебе о каких-то вещах заранее. Это и невозможно чисто физически. И, при выборе в композере "пыхтелки" 18й версии, нейронка не знала, в какую западню меня заводит. Оказалось, что бэкапы S3 не поддерживают работу с БД выше 15й или 16й версии. И это была головная боль! Сначала планировал откатить версию самой БД, потом упала работа с данными, которые не совместимы между версиями и тд. Точно не помню, как, но одна из ИИ-работяг помогла мне собрать отдельный билд под бэкап, и всё завелось. Но! Будьте осторожны...
Внутри бота пришлось отказаться от первоначальной концепции разделения юзеров по ролям, и было принято решение внедрить старую-добрую подписку, по которой и будет строиться вся основная логика. Это оказалось проще, потому что делало ВСЕХ пользователей равными! (просто с галочкой "Подписка" равнее...).
Принцип работы прост и гениален одновременно:
Пользователь создаёт встречу и наполняет её данными: название, описание, адрес (мало ли), ссылка на видео-встречу и тд.
Отправляет ссылку на готовую встречу другому пользователю
Другой пользователь пишет только своё имя (это важно) и ему открывается календарь! И тут самое интересное, потому что
Открывается календарь организатора встречи с доступными днями и временными слотами. Дни и слоты настраиваются отдельно и можно очень гибко выстроить свой график.
Выбирается слот и встреча подтверждается. После чего событие синхронизируется у обоих пользователей, и красивенько отображается в календарях у обоих пользователей
Ещё есть возможность создания форм и их привязки ко встречам: чтобы после подтверждения встречи, кандидат на месте прошёл небольшой пред-скриннинг (меня это жутко бесило самого). Ну и формы можно отправлять отдельно, если нужна какая-то дополнительная информация (или вы - форменный маньяк).
Также есть возможность сохранять шаблоны встреч, чтобы при создании можно было выбирать уже из имеющихся. Например, встреча по заранее подготовленной вакансии. Экономит просто огромное количество времени!
Также была добавлена возможность "Приглашения коллег": когда в уже подтверждённые встречи можно сразу отдельно по ссылке приглашать всех причастных (и деепричастных тоже).
Ну и самое жирненькое - интеграция с Яндекс.календарём! Пользователь авторизуется через свой профиль внутри редиректа на яндексе, и все его встречи, при создании, автоматически дублируются в выбранный календарь! Штука очень крутая.
Ну и много всего ещё, просто не хочу раздувать дальше и так раздутую статью.
Это с учётом того, что я написал за день до этого "первичную" статью, и она была похожа больше на пьесу.
Ну и сам сервер было решено раздуть до вменяемых ресурсов "с запасом", чтобы и по мощностям хватало, и по карману не очень сильно било.
Остановился на серверном решении: 4 ядра 3.3 ГГц, 8 гигов оперативы, 80 гигов внутренней памяти. Изначально хотел взять несколько простеньких серверов и настроить оркестрацию по контейнерам через K3s, но искусственный интеллект любезно проанализировал со мной это решение и было решено остановиться пока что на одной машинке. Но, благодаря наличию веб-хуков, ДАЖЕ в случае необходимости, это будет несложно. Были бы деньги.
Результаты, грабли и планы
Тем не менее! Работа была проделана просто огромная. В моменты критического кризиса вспоминался знаменитый мем из Рика и Морти про путешествие на 5 минут - сейчас я чувствую себя примерно так же, как и они в конце путешествия.
Не стал вспоминать и вываливать всё, что было, но скажу одно - если вам кто-то внушил, что работа с ИИ - это панацея - не верьте рекламе!!!
Да, они в разы ускоряют многие процессы, помогают решить проблемы, которые на первый взгляд могут быть неочевидны (и наоборот).
Одних только коммитов мной было сделано порядка 60 за 2 недели! (хотя по работе, дай бог, в неделю делался один)
ВЫ. НИКОГДА. НЕ. ПОЛУЧИТЕ. ИДЕАЛЬНЫЙ. ВАРИАНТ.
С. ПЕРВОГО. РАЗА.
Даже редактирование чёртового маскота в жпт у меня заняло больше времени, чем если бы я сделал это в Adobe Illustrator!
Но, такова жизнь, мы пишем огромный промт для нейросетки, в котором просим сделать что-то, что займёт у нас намного меньше времени. Парадокс!
У меня на всё ушёл где-то месяц.
Удачно сложилось то, что произошла смена проекта, и у меня освободилась куча времени, которое я решил потратить на изучение чего-то интересного.
Но, повторюсь, очень-очень-очень-очень много нюансов!
Интересным кейсом была работа над "правильной" монетизацией.
Меньше всего хотелось быть тем самым жадным разрабом, который пытается ВСЕМИ возможными методами получить с тебя денег. В принципе, это очень большая тема для отдельного обсуждения, но саму статью рекомендую как минимум для ознакомления!
Мною было решено сделать freemium-доступ: когда часть функционала бесплатная, а другая по подписке. Но со временем оказалось, что для многих наличие "мазолящего глаза" функционала по подписке вызывает спазмы в районе кошелька. И я сравнительно недавно принял решение сделать весь основной функционал бота бесплатным, и оставить подписку только на интеграции.
Ну и да, совсем забыл упомянуть, что за время работы с ботом раскидывал его разным своим знакомым, друзьям, рекрутёрам, с которыми взаимодействую периодически. Удалось собрать небольшую тестовую группу и поработать с фидбеком.
Не так давно завёл телеграм-канал для бота, добавил туда возможность писать сразу в сообщения сообществу - очень удобная фича для поддержки пользователей, как оказалось!
Ну и буду стараться отписываться по проделанной работе в виде changelog-ов.
P.S.
На 200% уверен, что при любом другом раскладе, без использования нейросетей, процесс разработки у меня занял бы намноооого больше времени!
И в этом плане хочется пояснить сразу для всех тех, кто до сих пор живёт в иллюзии или обманывает себя:
Нейросети - это факел Прометея. Это концепция, доселе неведомая человечеству.
И каждый сам выбирает, как ему использовать этот огонь
Лично я считаю, что возможность использовать ИИ в качестве технического специалиста и ментора простым смертным - бесценна.
Ну и да, так как я работаю тестировщиком (каждый раз больно), моя проф-деформация вынуждает меня проверять ВСЁ и доводить функционал до идеала. Было приложено действительно много усилий, чтобы всё выглядело "естественно" и "как и должно быть". Но я буду рад любым замечаниям, и приглашаю всех в комментарии!
Ссылка на бота: @calenduly_bot (там же ссылка на канал)
Первая неделя подписки бесплатно!
НЕ РЕКЛАМА!
P.S.S.
Изначально публиковал пост на хабр, но там настолько долго всё это проходит модерацию, что я решил, на Пикабу гражданам тоже будет интересно, наверняка!




















