Обратное сопоставление: скриншот работающего UI → точное место в СУЩЕСТВУЮЩЕМ коде. Определение «существующий проект vs новый», извлечение якорей со скриншота (видимый текст, ключи i18n, иконки, структура), grep-стратегия поиска компонента, трассировка маршрута (Next.js App/Pages Router, React Router), вычисление конкретного контрола и его обработчика, разбор логики (состояние/стор, data-fetch, API), вывод как карта file:line + делегирование правки. Use когда по скриншоту надо найти и понять ...
Scanned 9/11/2026
Install to Claude Code
npx -y skills add Vitammiin/agent-vorcl-flow --skill ui-source-mapping --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ui Source Mapping?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vitammiin-ui-source-mapping-agent-vorcl-flow)More formats (shields.io, HTML) on the badges page.
---
name: ui-source-mapping
description: "Обратное сопоставление: скриншот работающего UI → точное место в СУЩЕСТВУЮЩЕМ коде. Определение «существующий проект vs новый», извлечение якорей со скриншота (видимый текст, ключи i18n, иконки, структура), grep-стратегия поиска компонента, трассировка маршрута (Next.js App/Pages Router, React Router), вычисление конкретного контрола и его обработчика, разбор логики (состояние/стор, data-fetch, API), вывод как карта file:line + делегирование правки. Use когда по скриншоту надо найти и понять уже существующий UI, а не сгенерировать новый."
version: 1.0.0
---
# Навык: UI → Source Mapping (скриншот → существующий код)
Цель — по скриншоту работающего интерфейса **найти его в реальной кодовой базе** и объяснить, как он устроен: компонент, маршрут, контрол, логика — с точностью до `file:line`. Ничего не генерируешь и не правишь; отдаёшь карту и делегируешь правку. Это обратная задача к `screenshot-to-code`. Работает в связке с `frontend-architecture`, `react`/`nextjs`, `data-fetching`/`state-management`, `i18n`.
## 0. Существующий проект или новый
Сначала реши, твой ли это случай:
- Есть кодовая база (`package.json`, `src/`, git) и якоря со скриншота грепаются по ней → **существующий**, работай на привязку.
- Greenfield / скриншот как макет для нового UI → это `screenshot-to-code` (генерация), перенаправь.
- Сомнение → грепни якоря по репозиторию; совпадения решают. Не выдумывай файлы.
## 1. Якоря со скриншота
Открой изображение (инструмент Read показывает картинку) и вытащи то, по чему можно искать в коде (от уникального к общему):
- **Видимый текст** — заголовки, лейблы кнопок, плейсхолдеры, пункты меню, тосты/ошибки, бейджи. Самый сильный ключ.
- **Иконки** — по имени из набора (lucide/heroicons/…), `aria-label`.
- **Структура** — шапка/сайдбар/контент/модалка, тип компонента (таблица/карточки/табы/форма/степпер).
- **Контекст маршрута** — активный пункт навигации, крошки, заголовок вкладки, видимый URL.
- **Состояние** — открытый таб/модалка/шаг, выделение, disabled/active — чтобы не спутать с похожим экраном.
## 2. i18n: текст на экране ≠ текст в коде
В мультиязычном проекте на экране видно **значение перевода**, а в JSX стоит **ключ** (`t('cart.checkout')`). Стратегия: (1) грепни видимую строку по файлам локали (`locales/**`, `*.json`/`*.po`) → получи ключ; (2) грепни ключ по компонентам → получи место. В одноязычном — текст обычно литералом, грепается напрямую. См. `i18n`.
## 3. Grep-стратегия (находим компонент)
- Ищи `rg` от **самой редкой** строки к частой: точная фраза → её часть → ключ перевода → имя иконки.
- Чисти шум: игнорируй `node_modules`/сборку; сначала `src/`.
- Много совпадений — сузь по соседним якорям (текст + иконка + тип блока в одном файле).
- Ноль совпадений — проверь склейку строк (`'Add ' + noun`), формат-шаблоны, вынесенные константы, текст из API/CMS; тогда ищи по стабильному фрагменту или `data-testid`/`aria-label`.
## 4. Маршрут (где открыт экран)
Свяжи компонент с URL по конвенциям:
- **Next.js App Router** — `app/**/page.tsx`, вложенные сегменты, динамические `[param]`, группы `(group)`, `layout.tsx` для общего каркаса.
- **Next.js Pages Router** — `pages/**` (файловый роутинг), `_app`/`_document`.
- **React Router** — `<Route path=…>` / `createBrowserRouter`, вложенные `Outlet`, `index`-роуты.
Иди в обе стороны: от компонента → кто его импортирует/рендерит → до `page`/`Route`; и от активного пункта навигации → его `href`/`to` → до целевого маршрута.
## 5. Контрол (с чем работает пользователь)
Среди найденного вычисли **конкретный** элемент: по тексту/`aria-label`/иконке/позиции относительно соседей. Найди его обработчик — `onClick`/`onSubmit`/`onChange` — и куда он ведёт (локальный хендлер, экшен стора, мутация). Несколько похожих кнопок — раздели по различающему признаку (текст, `variant`, ближайший заголовок).
## 6. Логика (что за контролом)
От обработчика вглубь:
- **Состояние/стор** — `useState`/`useReducer`, Zustand/Redux-срез, контекст (см. `state-management`).
- **Данные** — загрузка/мутация: React Query/SWR/`fetch`/`openapi-fetch`, какой эндпоинт дёргается (см. `data-fetching`).
- **Бэкенд** — при необходимости дойди до роута/контроллера, обслуживающего вызов.
Формулируй как первопричину поведения, а не ближайший JSX.
## 7. Вывод — карта «скриншот → исходники»
Отдай структурировано, каждый пункт с `file:line` + короткий фрагмент:
- **Экран:** компонент — `file:line`.
- **Маршрут:** URL/путь — где объявлен.
- **Контрол:** элемент + обработчик — `file:line`.
- **Логика:** обработчик → состояние/стор → data-fetch → API.
- **Правка:** что менять в существующем коде (без новых файлов/компонентов) и какому субагенту (`frontend`/`backend`) делегировать.
## 8. Границы
Только чтение — не правишь и не создаёшь. Работаешь с тем, что уже есть: цель — переиспользовать существующие компонент/обработчик/стиль. Неоднозначность — список кандидатов с различием, критичное — уточнить. Если это генерация нового UI — верни задачу в `screenshot-to-code`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!