Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow

Что это за курс

Я решил на практике показать, как создать приложение с помощью вайбкодинга — от идеи до готового продукта. Это не строгий курс с пошаговой инструкцией «как надо». Мы пройдём весь живой процесс со всеми ошибками, сложностями и решениями. Весь курс будет опубликован здесь бесплатно, поэтому ставьте реакции на пост, задавайте вопросы в комментариях — так больше людей сможет увидеть курс.

Первую часть и описание идеи продукта можно найти здесь:

Где мы остановились

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

Поэтому в этом уроке мы продумаем user flow — путь пользователя от регистрации до готового договора — и доведём прототип до состояния, когда его можно прокликать как настоящее приложение.

Описываем путь пользователя

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

Сначала прогнал текст через /prompt-master, затем запустил результат в режиме Plan и, посмотрев план, попросил его выполнить:

/prompt-master Давай более подробно опишем user-flow Пользователь регистрируется в приложении - Регистрация происходит по электронной почте с письмом-подтверждением - Главной страницей является дашборд с актуальными открытыми проектами, количеством правок на согласовании и информацией о новых правках, появившихся с момента последнего визита - Есть страница настроек, где можно управлять своим аккаунтом — поменять пароль, имя, которое отображается в интерфейсе - Есть страница управления реквизитами — здесь можно заводить организации, от имени которых пользователь может подписывать договор. В реквизитах можно выбрать физлицо, ИП, ООО и заполнить стандартный набор реквизитов для данных организационно-правовых форм, а также должность подписанта и основание, на котором он подписывает - На странице шаблонов можно создать шаблон — через конструктор пунктов, где можно добавлять, удалять пункты, изменять порядок пунктов и разделов. Помимо создания через конструктор должна быть возможность загрузить Word, PDF или текстовый файл, из которого автоматически заполнится конструктор - Из готового шаблона можно создать проект. В проекте фиксируется актуальная версия шаблона. Изменение шаблона впоследствии не влияет на текст договора в проекте Что нужно - Описать данный процесс в продуктовой книге - Дополнить раздел вопросов, блокирующих разработку - Определить, какие экраны потребуются для реализации данных юзерфлоу - Доработать прототип Давай заполним прототип реалистичными моковыми данными В результате прототип должен выглядеть как полноценное работающее приложение и давать возможность проверить все функции без написания кода самого приложения

Обратите внимание на последний абзац. Если не попросить моковые данные явно, агент сделает пустые экраны с заглушками, и прокликать сценарий целиком не получится. А нам важно именно «пожить» в продукте до того, как писать код.

Отдельно я попросил дополнить раздел вопросов. Каждый новый кусок user flow рождает новые вопросы — например, пускать ли человека в дашборд до подтверждения почты. Пусть агент их выпишет, а не решит за нас.

Что получилось

Сначала про книгу. Агент описал новый путь пользователя на странице «Как устроен продукт сейчас», составил список экранов и добавил семь новых открытых вопросов: что можно делать до подтверждения почты, что считать визитом для блока «новое», видит ли контрагент имя пользователя, какой точный набор полей у реквизитов и другие. Часть старых вопросов закрылась сама — ответы были в моём промпте.

Прототип живёт внутри книги и открывается отдельно
Прототип живёт внутри книги и открывается отдельно

Теперь сам прототип. Он начинается с входа и регистрации, как настоящее приложение. Письмо, конечно, никуда не уходит — вместо него кнопка-заглушка «Подтвердить почту».
После входа — дашборд: открытые проекты, сколько правок ждёт согласования и что нового появилось.

Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow

Реквизиты сделаны так, как я и хотел: сначала выбираешь форму — ООО, ИП или физлицо, — и форма показывает только нужные поля. Хотя тут есть несколько нюансов которые мы исправим позже

Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow

Шаблоны собираются в конструкторе: разделы, пункты, порядок меняется кнопками и с клавиатуры. Импорт файла пока имитация — выбираешь Word, PDF или текст, и конструктор заполняется готовым примером.

Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow

Из шаблона создаётся проект. Здесь главный экран продукта — договор одним потоком с редакциями и комментариями сторон. Сверху управление ссылкой для контрагента и выбор наших реквизитов.

Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow

Ссылку контрагенту можно выдать, отозвать и выдать снова. А по ссылке контрагент видит только сам договор — без дашборда, шаблонов и наших реквизитов.

И проверяем адаптивность на телефоне:

Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow
Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow

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

Прокликиваем как пользователь

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

Ошибки. Самая неприятная — печать. На бумагу уходит исходный текст шаблона, а принятые редакции теряются. А это ровно то, ради чего вообще делается продукт. Ещё в конструкторе кнопка «Вниз» у первого пункта стирает соседний раздел, а если удалить все реквизиты, проект перестаёт открываться.

Дыры в логике. В книге написано: итог ставится, когда спорных пунктов нет. Но что такое спорный пункт — нигде не сказано. Прототип решил за нас: спор — это когда обе стороны написали свои редакции. А если контрагент предложил правку, а мы молчим, — это согласовано? И как контрагенту сказать «согласен» с нашей редакцией, если у него нет такой кнопки? Кнопки «Утвердить итог» тоже нет. Это ровно то, о чём я писал в первом уроке: пропустили вопросы — нейросеть додумала.

Неудобства. Комментарий и редакция выглядят одинаково — цветная плашка с мелкой подписью. Создать проект с дашборда нельзя, только из конструктора. Конструктор на 15 пунктов превращается в 45 кнопок «Вверх / Вниз / Удалить». На большом мониторе договор стоит узкой колонкой, а по бокам пусто.

Четыре одинаковые плашки в одном пункте — какая из них правка, а какая разговор? 
Четыре одинаковые плашки в одном пункте — какая из них правка, а какая разговор? 

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

Правила — про то, как работать, а не про то, что делаем

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

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

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

Доработки

Давайте в рамках данного урока постараемся исправить часть описанных проблем
Начинаем с правил:

/prompt-master Давай разделим правила и книгу. В правилах должны быть только подходы к разработке, а все что описывает сам продукт - в книге Сейчас в .cursor/rules есть описание проекта: - pervaya-versiya.mdc целиком про то что входит в первую версию, причем там уже устаревшее - внутреннее обсуждение и загрузка первой версии документа - в kniga.mdc упоминаются пустые UX-кит и прототип, хотя они уже заполнены - в yazyk-i-vid.mdc требования к виду продукта Что нужно - Пройтись по всем правилам и убрать из них все что описывает продукт - функции, границы версии, экраны, требования к виду. Если этого еще нет в книге - перенеси в книгу. Устаревшее не переноси - В правилах оставить только то как мы работаем: книга - единственный источник правды, нет факта в книге - вопрос и стоп, открытый вопрос блокирует код, порядок изменений, трогаем только файлы задачи, не коммитим без просьбы, язык текстов - Правила не должны ссылаться на конкретные функции и разделы продукта, максимум на оглавление книги - Если правило после чистки пустое - удали файл В конце покажи что ушло из правил и куда

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

Исправляем ошибки

Дальше — ошибки, которые я нашёл, когда прокликивал прототип. Просто перечислил их своими словами, по одной в строке:

Прошелся по прототипу как пользователь и нашел ошибки, давай исправим - В версии для печати выводится исходный текст пункта, а принятые редакции пропадают. Печатать нужно итоговый текст, без комментариев - В конструкторе если у пункта 1.1 нажать «Вниз», пропадает следующий раздел. С Alt+стрелками то же самое - После «Вверх»/«Вниз» сбивается фокус и дальше с клавиатуры работать нельзя - Если удалить все реквизиты, проект перестает открываться. Организацию, которая выбрана в проекте, удалять нельзя или хотя бы надо предупреждать. Любое удаление только с подтверждением - При регистрации проходит пароль из одного символа, хотя в подсказке написано про 4. В настройках то же самое. При смене пароля надо спрашивать текущий - Если войти с неподтвержденной почтой, ошибка нигде не показывается - Кнопка «Назад» в браузере выкидывает из прототипа, а после обновления страницы попадаешь на вход - В блоке ссылки нет кнопки «Скопировать», хотя в UX-ките она есть - Из вида контрагента нельзя вернуться обратно - Пометка «шаблон меняли после проекта» появляется у шаблона, из которого еще не создавали проектов - Кнопка «Поменять шаблон» ничего не делает. Ее лучше убрать, оставить пометку и ссылку на создание нового проекта из шаблона Все демо-переключатели (пустой дашборд, открыть как контрагент и т.п.) вынеси в отдельную плашку «Режим прототипа», чтобы они не выглядели как функции продукта Что считать спорным пунктом пока не трогай, это отдельный вопрос После правок проверь каждый пункт в браузере и посмотри, чтобы в консоли не было ошибок

Ошибок много, и они затрагивают разные части прототипа, поэтому запускал в режиме Plan. План утвердил без изменений и попросил его выполнить.

Отдельно обратите внимание на строку «Что считать спорным пунктом пока не трогай». Без неё агент, скорее всего, решил бы этот вопрос сам — а это продуктовое решение, его принимаем мы.

Результат: все одиннадцать пунктов исправлены. Агент сам прошёл сценарии в браузере, как я и просил.

Печать теперь выводит итоговый текст без комментариев:

Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow

Есть момент, на которые стоит посмотреть внимательнее.

Агент принял продуктовое решение сам. Чтобы исправить печать, ему нужно было решить, какой текст считать итоговым. Он решил: принятая редакция или наша редакция, если она есть. И записал это в книгу как факт. Получается, что в печать попадает наша формулировка, с которой контрагент ещё не согласился.

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

Отвечаем на вопросы про спор и итог

В книге было написано «итог ставится, когда спорных пунктов нет», но что такое спорный пункт — нигде не сказано.

Как и во втором уроке, просто пишу ответы на вопросы своими словами. Прототип в этом шаге не трогаем — сначала книга. Заодно исправляю то, что агент сам решил про печать в прошлом шаге:

/prompt-master Давай закроем дыры в логике согласования. Пока только книга, прототип обновим следующим шагом Ответы на вопросы: Что такое спорный пункт? Пункт согласован, когда у него нет непринятых редакций. Если одна сторона предложила редакцию, а другая еще не ответила - пункт ждет ответа. Если обе стороны предложили разные редакции - это спор Как контрагент соглашается с нашей редакцией? Так же как мы с его - кнопкой «Согласен» на пункте. После этого наша редакция становится текстом пункта Когда можно утвердить итог? Когда все пункты согласованы. Кнопка «Утвердить итог» есть всегда, но пока есть открытые пункты она неактивна и объясняет почему. Итог ставит только своя сторона Что после утверждения? Договор больше нельзя править. Доступна версия для печати - итоговый текст без комментариев Как подписаны стороны? С точки зрения того, кто смотрит: «Вы» и название другой стороны из реквизитов Что считать визитом для «нового»? Редакция новая, пока человек не открыл этот пункт. На дашборде показываем, сколько таких редакций в проекте Что идет в печать? Только согласованный текст. Наша редакция, которую контрагент еще не принял, в печать не попадает. Сейчас в книге записано по-другому - исправь Что нужно - Записать ответы в книгу и обновить «Как устроен продукт сейчас», чтобы ничего не противоречило - Сделать отдельную страницу «Статусы» - какие статусы у пункта (согласован, ждет нас, ждет другую сторону, спор) и у документа (на согласовании, готов к утверждению, утвержден), когда они наступают и что видят стороны - Добавить новые открытые вопросы без ответов: кто и когда получает письма, как восстановить пароль, сколько живет ссылка и что если контрагент перешлет ее коллеге, что делать со старым комментарием когда сторона пишет новый, куда уходит проект после утверждения

Задача не сложная — только тексты в книге, поэтому без режима планирования.

Что получилось. В книге появилась отдельная страница «Статусы»: какие статусы бывают у пункта и у документа, когда они наступают и что при этом видит каждая сторона.

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

Печать в книге исправлена: только согласованный текст и только после утверждения. Строку про «нашу редакцию», которую агент добавил сам, он убрал.

Сейчас книга и прототип расходятся: в книге печать только после утверждения и кнопка «Согласен», в прототипе — нет. По нашим правилам это дефект, и чиним его следующим шагом.

Доводим до ума

Описываю, что хочу увидеть, и прошу агента самому пройти весь сценарий:

Давай обновим прототип по новой странице «Статусы» и ответам про спор и итог - У каждого пункта и у всего документа виден статус - У контрагента появляется кнопка «Согласен» на пункте с нашей редакцией - У нас кнопка «Утвердить итог». Пока есть открытые пункты, она неактивна и объясняет почему - После утверждения договор нельзя править, остается только версия для печати - Над договором строка вроде «Согласовано 9 из 14, ждут вас 2, спор 1» и кнопка перехода к следующему открытому пункту - Дашборд считает правки по статусам, а не по комментариям - Кнопка «Согласен» есть у обеих сторон, вместо нашей «Принять редакцию контрагента» - Печать только после утверждения и только согласованный текст - Стороны подписаны с точки зрения того, кто смотрит: «Вы» и название другой стороны Пройди весь сценарий в браузере: создать проект, выдать ссылку, контрагент соглашается с одним пунктом и предлагает свою редакцию в другом, мы принимаем, утверждаем и печатаем. В печати должен быть итоговый текст

Изменения затрагивают почти все экраны проекта, поэтому снова режим Plan, а затем выполнение плана.

Результат — первый раз за курс в прототипе можно пройти весь путь от начала до конца.

Дашборд показывает статус каждого проекта: на согласовании, готов к утверждению или утверждён.

В проекте над договором появилась строка: сколько пунктов согласовано, сколько ждут нас, сколько ждут другую сторону и есть ли спор. Рядом кнопка перехода к следующему открытому пункту и «Утвердить итог». Пока есть открытые пункты, кнопка неактивна и объясняет почему.

У каждого пункта свой статус, а кнопка «Согласен» теперь есть у обеих сторон. Подписи тоже поменялись: вместо «своя сторона» и «контрагент» — «Вы» и название другой стороны.

Проходим сценарий. Контрагент соглашается с нашими редакциями в двух пунктах. Мы соглашаемся с его редакциями в остальных. Статус меняется на «готов к утверждению», кнопка становится активной.

Вайбкодинг на практике - бесплатный курс. Урок 3. Продумываем user flow

Утверждаем. Договор больше нельзя править — кнопки у пунктов пропали. Появилась версия для печати, и в ней ровно то, о чём договорились.

Нашлась одна мелочь: контрагенту после утверждения пишется «доступна версия для печати», а кнопки печати у него нет. Исправим позже

Материалы к уроку

Получившуюся книгу я скопировал в lessons/lesson-3/ и сделал коммит.

В следующем уроке займёмся улучшением дизайна

Что я понял в этом уроке

  • Моковые данные нужно просить создать явно. Без них прототип нельзя увидеть таким, каким он будет после реализации кода
  • Новый кусок user flow почти всегда рождает новые вопросы. Пусть агент их выписывает, а не решает сам.
  • Прокликать прототип руками — самый дешёвый способ найти дыры в логике.

Заключение к уроку

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

Версия документации по результатам данного урока здесь:

Также напомню про мой телеграм-канал «Своими словами», где я:

— разбираю решение реальных задач управленца с помощью ИИ;— помогаю людям без IT-бэкграунда разобраться в технических инструментах (те же ssh, cron, docker, git и прочие);— рассказываю об интересных кейсах и важных темах в M&A.

Предыдущие уроки:

Скоро