Сегодня UI в продукте — не просто красивая картинка. Это полноценный драйвер роста компании в борьбе за первенство. И не получается относиться к этому как «просто запили мне нормальный UI». Каждый элемент стоит денег и ресурсов разработчиков и дизайнеров.
В первой части статьи мы посмотрели, как ИИ помогает менять скорость релизов с помощью Claude 4.5 и влиять на результаты бизнеса. А теперь давайте разберёмся, как это сделать с другими инструментами.

Кому и зачем читать эту статью
Будет полезно дизайнерам, инженерам, тимлидам и продактам, которым:
нужно быстро генерировать и поддерживать UI на Flutter или других фреймворках;
хочется кроссплатформенности и максимальной автоматизации;
нужно формализовать процесс: внедрять гайды, контролировать логику, формировать обучающие правила;
интересно, как работать с MCP (протоколами интеграций) и жить в парадигме «дизайн по подписке»;
надоело вручную переносить дизайн и фиксить повторяющиеся ошибки.
Почему стоит прочесть её сейчас:
проекты требуют итеративных изменений, а рутинные задачи занимают всё больше ресурсов;
растут требования к качеству и однородности интерфейсов;
увеличивается число супераппов: мультисервисные платформы диктуют стандарты и ускоряют процессы;
идёт конкуренция между командами и платформами: скорость обновлений напрямую влияет на выживаемость продукта;
Figma становится отраслевым стандартом, а Cursor — новым мастхэвом для тех, кто хочет делегировать рутину, не теряя в качестве.

Кстати, дальше мы подробнее расскажем, что делать с такими ошибками.
Cursor, Figma, нейросети и MCP
Чтобы понять, как автоматизировать создание UI-компонентов, важно погрузиться в инструменты и протоколы, с помощью которых всё и происходит.
Cursor — AI-помощник для кода и UI
Cursor — IDE на базе VS Code, в котором есть агентный режим «из коробки». Он умеет читать дизайн и генерировать код, в том числе Flutter-компоненты. Инструмент позволяет:
вести диалог в формате чата, задавать вопросы и уточнять детали;
обращаться к внешним источникам (например, Figma-макетам) напрямую;
интегрировать правила и логику команды в процессе генерации;
исправлять ошибки и предупреждения, выдаваемые линтерами, автоматически под управлением Makefile и кастомных скриптов.
Cursor помогает получить стартовый рабочий код, который потом можно довести до продакшн-качества.
Figma — стандарт проектирования
Собственно, про Figma знают все. Это графический редактор с мощным набором инструментов для UI/UX:
центральное хранилище макетов, стилей и компонентов;
инструменты коллаборации и комментариев;
dev-режим с возможностью просмотра и копирования CSS, PNG и всей нужной метаинформации;
возможность экспортировать компоненты и получать API-доступ к стилям, переменным, цветам и иконкам.
Figma-данные в этом ключе предстают как некий источник истины, вокруг которого строится вся автоматика генерации UI.
MCP (Multi-Context Protocol) — протокол интеграции и доступа
MCP — это не просто API, а стандартизованный протокол коммуникации ИИ и внешних систем. В нашем кейсе он:
обеспечивает Cursor доступ к «живым» данным из Figma;
позволяет доставать сразу PNG из кеша, а не каждый раз дергать дорогостоящий сетевой API;
передаёт стили и переменные локально, экономя время и ресурсы;
обеспечивает синхронизацию между визуальной частью и кодовой базой через стандартизованное взаимодействие.
MCP помогает устранить один из главных недостатков генерации кода по картинке — невозможность видеть и использовать стили и данные из макета напрямую.
Нейросети
Нейросеть в этом кружке инструментов — это, по сути, тот самый мозг, который по запросам и входным данным создает Flutter-компоненты.
Но просто нейросеть — это далеко не всё. Ей нужны обучающие правила (MD-файлы с описанием правильного и неправильного кода), контролирующий Linter, который взаимодействует с Cursor через make команды, и порядок: изучение контекста → изучение правил → изучение Figma MCP → генерация с последующим анализом и исправлением.
Работа этих компонентов дает реальный результат, а не очередной черновик.
Генерируем UI-компонент по картинке из Figma
Посмотрим на практике, как происходит автоматическая генерация Flutter-компонента с помощью Cursor на базе изображения из Figma.
1. Готовимся к запуску
Берём типичный экран е-кома — главную страницу с программой лояльности — с бонусной картой. В ней содержатся тексты про количество бонусов, иконки, какие-то декоративные элементы.
Задача — получить единый компонент BonusWidget по изображению PNG из Figma.
Что делаем:
в Figma в Dev-режиме копируем PNG карточки;

PNG загружаем в чат Cursor;
запускаем запрос: «Сгенерируй UI-компонент по изображению».
2. Первые результаты
Cursor нам отвечает, что прочитал изображение и приступает к созданию Flutter-компонента. Уже здесь видно:
он ищет и выделяет сущности класса-заглушки с ключевыми параметрами: total_bonuses, expiring, expireZ;
создаёт компонент BonusWidget, хоть и с условным названием;

вместо вставки иконок генерирует QR-код через CustomPainter, что, вообще-то, достаточно оригинально.
3. Что не получилось
Но несмотря на всю мощь Cursor, результат далёк от прода:
стиль компонентов размытый и неполный — Cursor просто «угадывает» стили по картинке, без точного маппинга;
значения частично захардкожены, не всегда используются локализации;
нейминг элементов и классов интуитивный, но без явной связи с архитектурой проекта;
в коде встречаются игнор-комментарии (ignore) — а это не на пользу качества;
частично потерялись декоративные элементы и правильные отступы.
Вот такой первый черновик. Не идеал, скорее, рабочий MVP, который дальше будем отлаживать.
4. Какие уроки стоит извлечь
Просто закинув картинку в ИИ, вы почти никогда не получите готовый, чистый и полный код.
Эффективнее всего использовать такую генерацию как базовую стадию разработки — делать первый прототип для наглядности.
Главное — не лениться работать с контекстом, задавать нейросети правила, логику и обучать на ошибках.
Автоматизация — не волшебная палочка, а мощный ассистент, которого нужно правильно строить.
Создаём правило, настраиваем линтер, учим нейросеть через обратную связь
Мы говорили об этом в первой части, а теперь расскажем подробнее.
Правила (rules) — главный инструмент управления качеством и предсказуемостью результатов работы ИИ.
Они задаются в специальной директории .cursor/rules или через настройки ИИ-ассистента и могут быть глобальными (для всех проектов) и специфичными.
Как лучше работать с правилами:
разделяйте крупные правила на отдельные, которые можно комбинировать — их будет проще поддерживать и расширять;
формулируйте каждое правило максимально конкретно, избегайте размытых формулировок. Например: «Использовать 2 пробела для отступов», «Не использовать ignore для lint»;
добавляйте к каждому правилу примеры корректного и некорректного кода и обязательно давайте пояснение причин — такие правила «лучше усваиваются» ИИ и легче применяются на практике;
прописывайте стиль кода, структуру UI, типовые архитектурные решения, работу с ошибками и документацией;
правила должны быть короткими (до 500 строк), чтобы не потерять фокус и облегчить обновление.
Типы правил
Глобальные — действуют во всех проектах пользователя.
Проектные — хранятся локально в .cursor/rules и подхватываются только в контексте целевого проекта.
Временные или «memories» — создаются Cursor автоматически на основе истории диалога (например, конкретные околокодовые договорённости).
Настраиваем линтер и автоматизируем контроль
Линтер — например, Surf Lint Rules или кастомные Dart code metrics — второй важнейший фильтр качества после правил.
На уровне Makefile/CI/CD прописываем обязательный прогон линтеров после каждой генерации.
Для ИИ прямо в правилах и промптах задаюём требования: «Не сдавай код с warnings», «Исправляй до 0 ошибок, прежде чем закончить задачу».
Используем команды make autofix и make analyze для автоматической правки и анализа кода.
Получаем пример автоматизированного цикла: генерация → autofix → analyze → повторная генерация при ошибках.
Обучаем нейросеть через итерации и обратную связь
После каждой генерации указываем, что и где не так. Например, «Stack внутри DecoratedBox без размеров — исправь», либо «Добавь описание для Text.rich».
После исправления ошибки фиксируем новое правило: «Использовать Text.rich с правильными стилями, объяснить почему».
Помним, что стоит формулировать обратную связь понятно и детально, тогда ИИ быстрее перестаёт повторять одни и те же ошибки.
Не боимся обучать ассистента: по итогам нескольких задач расширяем набор правил, чтобы новые генерации учитывали накопленный опыт.
Регулярно пересматривайте, актуальны ли ваши правила, дополняйте их в соответствии с новыми технологиями и типовыми ситуациями, развивайте и оформляйте стандарты — для всей команды и каждого нового проекта.
В общем, качественная автоматизация UI-разработки стоит на 3 китах: формализованные правила для ИИ, строгая линтинговая политика и последовательная обратная связь. Сочетание этих методов уменьшает число ручных доработок, структурирует процесс генерации и помогает растить внутренний стандарт качества не только для людей, но и для нейросети.
Класс-заглушка: что это и зачем нужно
Класс-заглушка — это своеобразный «каркас» UI-компонента. У него есть название, в него передаются Entity (данные для UI) и остальные поля, которые нужны для UI.
Почему класс-заглушка критически важен для генерации:
снижает риск ошибок, потому что ИИ чётко видит, какие поля доступны, и не пытается «додумывать» или добавлять лишние свойства;
стабилизирует структуру. Если проект большой, и класс не передан явно, нейросеть часто теряет путь к сущности и генерирует значения, которые не интегрируются с остальным проектом;
улучшает обработку интерактивных элементов. Например, наличие поля onTap, даже если оно неочевидно по картинке, поможет ИИ корректно добавить обработчик событий.
Стоит отметить, что ИИ сопоставляет поля класса-заглушки с макетом Figma по именам и типам. Чем точнее и проще названия — тем надёжнее маппинг.
А если передана локализация в структуре класса-заглушки, Cursor сможет корректно подтянуть нужные тексты — иначе будет пытаться взять их из изображения или исходной карточки без понимания языков.
Для правильной работы важно передавать не только класс-заглушки, но и ссылку на макет Figma или компонент, чтобы нейросеть «поняла», где искать информацию.
Ошибки при генерации
ИИ иногда придумывает лишние поля, если не видит класс Entity. Пример — вместо «expireAt» появляется «expirationDate», и компонент перестаёт работать с остальной системой.
Могут также потеряться обработчики событий — например, onTap — если они не явно обозначены в каркасе.
Бывает, что структура не совпадает с бизнес-логикой — поля карты и макета расходятся. Например, поля сгорающих бонусов не подтягиваются, если их нет в заглушке.
Важно добавить локализацию в класс-заглушку, иначе интерфейс будет только на одном языке или с жестко заданным текстом.
Что делать в таких ситуациях
Передаём класс-заглушку вместе с макетом: ИИ работает над задачей по заранее подготовленным данным, не испытывая лишних догадок.
В промпте вместо «реализуй UI-компонент по изображению» пишем «реализуй этот компонент по изображению, вот его класс-заглушка».
Передаём ссылки на части в Figma, особенно если макет большой: это способствует точной обработке стилей и локализации.
Проверяем маппинг имён между макетом и классом-заглушкой: корректная синхронность минимизирует ручные исправления.
В итоге мы получим грамотно организованный класс-заглушку — залог стабильности и корректности генерации UI-компонентов через Cursor. Это решение сэкономит десятки часов на стыковку данных, обработку событий и масштабирование интерфейса, снижая количество ошибок и недоразумений в процессе работы ИИ.
Мастер-запрос в работе с Cursor
Мастер-запрос — это подробная и структурированная инструкция, которую разработчик формулирует для ИИ-ассистента (Cursor), чтобы получить результат высокого качества с минимальными ошибками и максимальным соблюдением правил проекта.
В отличие от простых запросов вроде «сгенерируй UI-компонент по изображению», мастер-запрос содержит четкий план и порядок действий для нейросети — от изучения правил и контекста до анализа стилей и итоговой генерации кода.
С помощью строгого порядка действий мы избежим потери информации.
Мастер-запрос задаёт нейросети последовательные этапы изучения входных данных:
1. Изучить правила.
2. Изучить контекст — например, класс-заглушку или макет в Figma.
3. Обратиться к MCP для получения стилей.
4. И только на этом этапе приступать к созданию UI-компонента.
5. После — минимизировать ошибки генерации — перебросы между этапами дадут Cursor возможность «сверять» результаты и состояния, снижать шанс пропуска важных деталей. Это поможет повысить вероятность соблюдения правил. Потому что если нейросеть сначала загружает все инструкции, при написании кода она будет следовать им, а не пытаться импровизировать.
6. Улучшить читаемость этапов генерации — в диалог с пользователем Cursor информирует, на каком этапе находится, сообщает об отклонениях или проблемах. Так Cursor увидит целостную картину и не будет делать «рывков» кода вслепую. А все обращения к внешним данным начнут отвечать нуждам задачи.
При таком подходе система почти не забывает правила и минимизирует непредсказуемость генерации, а нейросеть становится более предсказуемым и «ответственным» участником процесса.
Логика диалога и прозрачность работы
Cursor при работе с мастер-запросом не просто «выполняет» действия, он ведёт полноценный диалог:
отвечает, что изучает контекст;
подтверждает загрузку правил;
информирует об обращении к MCP;
сообщает о найденных несоответствиях;
просит дополнительную информацию, если что-то неясно.
Это помогает пользователю корректировать процесс и вовремя вносить правки.
Важность ссылок и точной передачи контекста
Мастер-запрос обычно содержит ссылки на ключевые файлы и компоненты. Например, Figma-ссылку на компонент и путь класса-заглушки. Это позволяет Cursor работать с актуальными, согласованными данными, а не полагаться на догадки. Собственно, без этих ссылок генерация часто «размывается» и становится нестабильной.
В общем, Мастер-запрос — это не просто развернутый промпт, а полноценный, пошаговый алгоритм, построенный на изучении контекста, правил и данных. Он помогает Cursor создавать качественный, правильный и поддерживаемый код. Такой подход снижает ошибки, уменьшает ручные доработки и делает взаимодействие с ИИ более предсказуемым и контролируемым.
Что такое MCP и почему он важен
MCP (Model Context Protocol) — это стандартизированный протокол, позволяющий Cursor AI получать прямой доступ к информации дизайна в Figma в реальном времени. Вместо того, чтобы работать с обычными API-запросами, MCP работает через локальный сервер и кеш. Что обеспечивает быстрое и безопасное извлечение стилей, переменных и компонентов напрямую из макета.
Это гарантирует, что ИИ получает максимально точные данные о текущем дизайне, и существенно повышает качество генерации UI-компонентов.
Как подключить MCP
Получаем API-токен Figma. Пользователь генерирует токен в настройках аккаунта Figma, обеспечивающий права чтения макетов.
Настраиваем MCP-сервер в Cursor. В Cursor добавляется MCP-сервер с указанием API-токена и параметров подключения. Для работы требуется локальный запуск WebSocket-сервера, который интегрируется с Figma.
Включаем Dev-режим в Figma. Важный этап, позволяющий Cursor получать актуальные данные напрямую из видимого состояния макета, включая PNG, стили, компоненты и переменные.
Привязываем компонент. Через ссылку «Copy link to selection» в Figma передается точный адрес компонента, который Cursor анализирует и использует для генерации.
Анализ стилей и переменных
MCP передает Cursor подробную информацию:
о темах и цветах. Например, Background, Primary, Surface, Icon и другие цвета темы в точном соответствии с именами из Figma;
об иконках. Cursor получает имена и векторные данные иконок, что позволяет вместо картинок использовать нативные Flutter-виджеты с правильными SVG-форматами или шрифтами;
об отступах и размерах. MCP предоставляет информацию о расположении элементов, padding и margin, а Cursor старается наиболее точно их воспроизвести.
о локализации. Если локализация настроена в макете и классе-заглушке, Cursor подтягивает нужные переводы к компонентам.
Интеграция с макетами и кодовой базой
Подключение MCP существенно упрощает интеграцию с кодовой базой, поскольку Cursor получает возможность напрямую соотносить названия компонентов и их полей в проекте с данными из Figma. Благодаря этому обеспечивается автоматическое применение стилистики, согласованной с темой проекта, ведь MCP передаёт точное сопоставление имён цветов и стилей, что особенно важно для сохранения визуальной консистентности.
В больших проектах использование MCP помогает избежать рассинхронизации между дизайном и кодом, поддерживая актуальность всех данных. Кроме того, MCP обеспечивает возможность встраивать фирменные виджеты и шаблоны из архитектуры кода, что минимизирует избыточность и облегчает поддержку программного продукта.
Подключение MCP — важный шаг к стабильной генерации UI от Cursor AI. Он позволяет получить из Figma точные темы, цвета, переменные и иконки, обеспечивая интеграцию макета с кодовой базой на высоком уровне. MCP снимает ограничения генерации по статичному изображению и превращает процесс в настоящий работающий интерфейс.
Полезные советы
Возвращаясь к нашей беседе с Cursor, расскажем, как избежать ошибок, о которых мы упоминали.
1. Игнор-комментарии (ignore)
В коде часто появлялись игнор-директивы для линтера — они снижали качество и надежность. Советуем требовать удаления таких комментариев и писать код так, чтобы линтер был чист.
2. Потеря декоративных элементов
ИИ иногда не распознает небольшие «украшательные» штуки и не включает их в результат. Как решить? Добавлять подробные описания с цветами и при необходимости отдельные изображения, чтобы Cursor «видел» нужный декор.
3. Нарушение отступов и размеров
Убрать ошибки разметки помогает обратная связь и конкретные команды для исправления параметров размеров.
4. Неправильный нейминг
Cursor иногда придумывал случайные имена для компонентов или параметров. Как решить? Использовать класс-заглушки и дать в промпте точные названия.
Как классно работать с ИИ
Объясняйте причину требований. В правилах и диалогах указывайте не только что делать, но и почему. Например: «Используй text.rich, а не RichText, потому что это сохраняет стили лучше».
Разбивайте задачи на небольшие шаги. Вместо одного большого запроса давайте серию этапов с проверкой результата на каждом.
Используйте ссылки на реальные компоненты и класс-заглушку. Это повышает точность и снижает вероятность придумывания лишнего.
Не бойтесь переобучать Cursor. После каждой итерации фиксируйте новые правила, чтобы нейросеть не повторяла ошибки.
Постоянно ведите диалог. Вовлекайте Cursor в обсуждение, дайте ему понять контекст, и он будет избегать стандартных ошибок.
Чек-лист по генерации UI с помощью Cursor и MCP
-
Подготовка
Убедитесь, что макет в Figma чист и структурирован.
Включите Dev-режим, чтобы получить доступ ко всем переменным и стилям.
Сгенерируйте или подготовьте класс-заглушку с основными параметрами.
Проверьте, что в проекте настроен линтер с понятными правилами.
-
Подключение MCP
Настройте MCP-сервер в Cursor с правильным API-токеном Figma.
Привяжите нужный компонент Figma через ссылку «Copy link to selection».
-
Формирование промпта
Напишите последовательный план действий для Cursor: изучить правила → изучить контекст → обратиться к MCP → сгенерировать код.
Укажите ссылку на класс-заглушку и компонент в Figma.
Добавьте просьбу исправлять до отсутствия ошибок.
-
Работа с ИИ
Передайте промпт и дождитесь первого результата.
Читайте ошибки, предупреждения, высылайте обратную связь.
Просите убрать игнор-комментарии и добавить недостающие элементы.
На каждом этапе фиксируйте новые правила или корректировки.
-
Финал
Запустите make autofix и make analyze для окончательной проверки.
Сверьте с макетом и проверьте визуальные совпадения.
Интегрируйте компонент в основной проект.
Инструкции для правил
Определяйте стандарты наименования компонента и параметров.
Опишите паттерны использования основных Flutter-виджетов.
Определяйте, какие стили нужно подтягивать из Figma, а какие — хардкодить.
Запрещайте или ограничивайте использование ignore-комментариев.
Регулярно обновляйте правила на основе накопленного опыта.
Как успешно всё это счастье внедрить
Внедряйте правила с самого начала. Не ждите, когда ИИ «сам научится». Детализируйте и документируйте требования по стилю, архитектуре и обработке ошибок.
Развивайте процесс итеративно. Стартуйте с минимального набора правил и класс-заглушка, затем последовательно добавляйте новые по мере роста проекта и понимания нюансов.
Обеспечьте коммуникацию между дизайнерской и разработческой командами. Настраивайте Figma с учетом требований MCP: правильные стили, чистые компоненты, именования.
Автоматизируйте проверки. Используйте линтеры с задачами в CI/CD, интегрируйте make-файлы для автофиксов и анализа, чтобы снизить человеческий фактор.
Обучайте команду. Проводите внутренние тренинги по работе с Cursor, правилами и промптами, делитесь успешными кейсами.
Планируйте постепенное расширение ИИ-инструментов. Используйте MVP-стратегию, начиная с простых компонентов и переходя к более сложным с ростом зрелости процесса.
Один большой итог
Внедрение ИИ-генерации UI — это не одномоментный и вообще не разовый процесс. Это полноценное стратегическое изменение подхода к разработке. Чтобы всё работало по-настоящему эффективно, важно заранее продумать правила, настроить работу с данными и наладить систему обратной связи.
Тогда инструменты вроде Cursor AI и MCP смогут раскрыть свой полный потенциал: ускорять работу, экономить ресурсы и помогать делать интерфейсы быстрее и качественнее.
Кейсы и лучшие практики в области системной и бизнес-аналитики, новости, вакансии и стажировки Surf — в телеграм-канале Surf Tech.
Комментарии (3)
Erkina_Elena
06.10.2025 13:29Интересно, сколько времени вообще уходило на промптинг — и насколько в итоге это действительно ускоряет все.
flancer
Пролистал пост в надежде увидеть пример мобильного интерфейса, сделанного ИИ. Не получилось.
Проблема подавляющего большинства статей про ИИ-разработку в отсутствии примеров с результатами этой самой ИИ-разработки :(