Вайб-кодинг Telegram-бота: от идеи до работающего сервиса за пару часов
Table of Contents
Практическая часть
Когда я познакомился с Cursor и идеей вайб-кодинга, сразу захотелось попробовать их на проекте с нуля. Я вспомнил свою старую задумку: сделать инструмент, который поможет гитаристам-любителям вроде меня запомнить расположение нот на грифе при стандартном строе (e-A-D-G-B-E).
Для начала я настоятельно рекомендую установить один из популярных инструментов для вайб-кодинга, например, Cursor, WindSurf или Loveable. Я начал с Cursor, потому что он построен на базе VS Code. Быстро разобраться с инструментом можно по небольшому руководству или этим видео:
У Cursor есть несколько режимов работы, которые хорошо описаны в этом треде.
Cursor довольно интуитивен, так что освоиться можно за несколько минут. Правда, взаимодействие с ним немного отличается от привычной работы в IDE. Вот алгоритм, которым я пользовался при создании бота:
- В режиме чата я как можно подробнее описываю нужную функциональность: требования к фиче, PRD и так далее. Затем спрашиваю, нужны ли Cursor дополнительные пояснения.
- После уточнений прошу составить план реализации из небольших отдельных шагов, как будто выполнять его будет начинающий разработчик. Отдельно прошу пока не писать код и учитывать опыт того, кто будет работать по этому плану.
- Мой первый промпт был таким: «Я хочу создать на Python Telegram-бота, который поможет пользователям выучить ноты на гитарном грифе. Бот должен показывать гриф в виде ASCII-графики, скрывать одну случайную ноту знаком вопроса и предлагать пользователю ее угадать. Вот пример ASCII-грифа, сгенерированного через ChatGPT: (вставить сюда сам пример). НЕ ПИШИ КОД. Подготовь пошаговый план реализации, как будто его будет выполнять начинающий разработчик. Если без кода не обойтись, используй псевдокод».
- Сохраняю полученный план в файл plan.md, добавляю его в репозиторий и затем использую как контекст.
- Прошу Cursor реализовать первый шаг и проверить результат.
- Если результат меня устраивает, отправляю изменения в репозиторий.
- Если нет, стараюсь как можно понятнее объяснить проблему и прошу Cursor ее исправить.
- Повторяю, пока все не будет готово!
В конце я с помощью ChatGPT сделал иконку и описание, с помощью Cursor упаковал бота в контейнер и развернул его на fly.io. На всю разработку и развертывание ушло около 2–4 часов, плюс еще примерно час на доработку ASCII-грифа.
Результат
Бота можно попробовать прямо сейчас в Telegram: просто найдите @FretBuddyBot.
Репозиторий проекта: https://github.com/amsilf/FretBuddy
Небольшая демонстрация:

Как работать с Cursor эффективнее
Напоследок несколько практических советов, которые помогут воплощать идеи с помощью Cursor со скоростью света:
- Всегда используйте систему контроля версий, даже в личных проектах. Такие инструменты, как Cursor, могут внести много изменений, за которыми сложно уследить.

- Придерживайтесь понятного цикла работы с обратной связью, например, того, что я описал выше, вместо того чтобы просто вываливать требования в чат.
- Подготовьте подходящий файл .cursorrule, чтобы работать эффективнее. Рекомендую посмотреть awesome-cursorrules.
- Если вы опытный инженер, у вас наверняка есть набор правил и подходов, которых вы привыкли придерживаться. Самое время передать этот опыт через контекст Cursor, чтобы код и инфраструктура создавались с учетом накопленных вами знаний.

Разберитесь хотя бы в основах работы больших языковых моделей, чтобы понимать возможности этих инструментов. Вот мои любимые курсы по теме:
- Машинное обучение в продакшене
- Обработка естественного языка
- Механизм внимания в трансформерах
- Как работают трансформеры?
- Рассуждения с o1
Для корпоративных проектов эти подходы нужно адаптировать под требования организации. В частности, убедиться, что ограничения безопасности надежны, пайплайны работают быстро, языковые модели размещены внутри компании, а инструменты разработки соответствуют ее стандартам.
В общем, мне кажется, вайб-кодинг — лучшее, что случилось с индустрией за последние 10 лет. Наконец-то я смогу закончить все свои прототипы и воплотить накопившиеся идеи.