В 2023-м году я организовал среди друзей бесплатный курс по Frontend-разработке. А в 2024-м начал делать отдельный курс для своей жены, но делал это уже с помощью IDE Cursor и Markdown-файлов в Docusaurus.

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

На момент зарождения идеи, весной 2025, я уже слышал, что технологии OpenAI и другие ИИ как-то используются в учебных заведениях США. Но как это выглядит, после недолгих копаний, узнать не удалось. В общем область показалась не особо раскрытой в обществе и я погрузился в сборку своего пайплайна, который будет собирать план курса.

Первый пайплайн

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

Самописный Dashboard на SSE для отладки пайплайнов
Самописный Dashboard на SSE для отладки пайплайнов

В качестве пайплайна я пробовал n8n, LangChain, самопис на NestJS, на Python и на чём-то ещё, но остановился на неожиданном открытии для себя - Convex. В ходе экспериментов с разными технологиями я смог боле-менее выточить пайплайн с промптами. И план курса на выходе получался уже более вкусный, чем это мог предложить тогдашний o3.

Когда что-то стало получаться, то я понял, что это действительно очень удобно. И это было удивительно, что я могу запросить курс - Как познакомиться с Петром I - курс для боярина в 1702-м году. Где я получал поэтапный план достижения этой цели с учётом положения вещей на тот год.

Уроки

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

Сегодня LLM может генерировать не только текст, но и картинки, звуки, видео. Я решил начать с простого, но максимально эффективного для образовательного генерируемого материала на текущий момент - с текста. Поэтому уроки в моём курсе текстовые. Они генирируются в Markdown, то есть там, как и в ответах ChatGPT, могут быть заголовки, параграфы, таблицы, формулы и т.д. Мне бы хотелось к этому добавить видео, но пока это не видится возможным, а вот изображения или голосовое сопровождение в близкой перспективе - вполне вероятно.

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

Для лучшей связки уроков между собой, ещё до генерации уроков - в одном из шагов генерации плана курса - я добавил генерацию коротких описаний для каждого урока наперёд. Так, уже при генерации урока LLM знает более конкретно - что изучили на момент текущего урока, а что нет.

Но этого всё ещё было недостаточно - иногда в тексте использовались термины не изученные ранее, либо они обозначались синонимами, которые для пользователя были не так очевидны. Поэтому, в дополнение к описанию, я добавил генерацию изучаемых терминов в том или ином уроке. Соответственно, при генерации урока LLM уже будет знать какие термины пользователь успел изучить (и как мы их решили обозночать) в предыдущих уроках, какие нужно изучить в текущем, а какие ещё только предстоит изучить. Теперь курс стал смотреться более полноценно, без рывков.

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

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

Чем платить?

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

Монетизация через открытие модуля или всего курса
Монетизация через открытие модуля или всего курса
Telegram-бот для доступа к сервису
Telegram-б��т для доступа к сервису

Для доступа к сервису я сделал Telegram-бота. Он же используется для идентификации пользователя. Благодаря этому получилось немного облегчить реализацию регистрации/авторизации.

Далее, в этом боте были реализованы возможности по созданию курсов и просмотру их списка. Добавил систему напоминаний - через время после создания курса пользователю приходит предложение настроить напоминания о нём. Можно выбрать дни недели и время в которое придёт сообщение с ссылкой на текущий урок.

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

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

Продвижение и маркетинг

Я frontend-разработчик. За 12 лет добился некоторых карьерных успехов, стал лидом. Для меня нет большой сложности разобраться в технологиях, электронике или в коде. Но с продвижением всё гораздо сложнее. Раньше казалось - сделай хороший продукт и люди сами придут. Но этот миф развенчался для меня уже давно. Да и кто сказал, что я сделал что-то действительно хорошее?

Так вот. Шёл июнь. Первые пользователи - друзья. Я слышал очень положительные отзывы и некоторые полезные идеи.

Однако, через несколько дней про сервис все забыли. Не полетело.

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

Привлекающее объявление для будущих Python-разработчиков
Привлекающее объявление для будущих Python-разработчиков

Что-то не идёт. Стал думать - наверное проблема с дизайном. Тут пришлось тоже поднапрячься. Если с кодом я могу словно чародей - махать палочкой в Cursor, то с продуманным дизайном на тот момент казалось так не выйдет. Пришлось пройти свой же курс по Figma, собрать референсы, продумать пользовательские пути и многое остальное. В общем, насобирав граблей, сделал дизайн страницы с планом курса:

Результат (макет) в Figma после месяца измученных стараний
Результат (макет) в Figma после месяца измученных стараний

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

Сделал свой сборщик лендингов. Прошелся с десяток раз по всей воронке. Освоил Яндекс Директ. Ситуация постепенно стала немного улучшаться - регистраций (открытий Telegram-бота) стало значительно больше, и если рекламное объявление выдалось достаточно привлекательным, то такая регистрация стала обходится примерно в 50-100 рублей за человека. Но платящих пользователей пока днём с огнём. Ну, продолжаю учиться рекламе и изучать аналитику.

Каковы расценки?

Когда начинает идти речь о ценах, то у меня ощущение, что я должен оправдываться. Ведь API стоит недорого, что скрывать. И есть ChatGPT, Claude, DeepSeek и множество аналогов чат-ботов. Но всё же, я верю в то, что могу предложить такое, чего нигде нет.

Если сначала я не понимал во сколько должен обходится один курс пользователю, то постепенно понял, что нужно не только окупать все затраты на токены для запросов к LLM и оставаться в прибыли, но и окупать средние затраты на привлечение платящего пользователя. К сожалению, на текущий момент, эта цена была бы т��кой высокой, что я остался бы единственным пользователем сервиса. Тем не менее, я установил цены исходя, в том числе, из субъективных ощущений и ещё тестирую разные вариации расценок. Ссылки из этой статьи, до поры до времени, будут вести на их самые низкие версии.

Мне хочется в будущем интегрировать и подписочную модель с включением дополнительных интересностей. В случае успеха это помогло бы в масштабировании продукта. Но пока приходится справляться со всем одному за счёт своего времени и денег.

Что дальше?

Недавно я добавил фичу - можно поставить дизлайк уроку и оставить комментарий. Следующие уроки будут учитывать этот комментарий, чтобы делать контент более адаптивным под пользователя. Ещё одна интересная штука - иногда пользователь получает вопросы - часть из них написал я, а часть пишет ИИ под каждого пользователя на основе имеющихся о нём данных. И это не для изучения ЦА, а для того, чтобы эти ответы влияли на курсы, которые получает пользователь. Они становятся ещё более персональными. Я считаю это уже магия.

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

На этой неделе начал, и уже почти закончил, делать просто обалденную вещь. Иногда приходят такие mind-blowing штуки, что не терпится довести до прода и показать их всему свету. Наверное об этом я и расскажу в следующий раз.

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

И конечно, ссылка для входа - https://qpel.ai/habr. Добро пожаловать!