diff --git a/docs/backlog.md b/docs/backlog.md index 9065e6f..ac95892 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -1 +1,43 @@ # Backlog + +## 1. Популярность инструментов — оценка: S + +Поле `popularity` (число) в записи реестра; проставить всем текущим инструментам значения вручную (crop/resize/rescale выше остальных). + +- Сортировка выдачи поиска и каталога: сначала популярные среди равного скоринга. +- Опционально: блок «Популярные» под героем поиска на главной. + +## 2. Иконки инструментов — оценка: M + +У каждой записи поле `icon`; отображается в результатах поиска, каталоге `/list-tools`, легендах шагов цепочки. + +- Источник иконок: готовый открытый набор (Lucide, MIT) — подобрать по смыслу для всех инструментов; недостающие — нейтральная заглушка. +- Рендер одним SVG-спрайтом, без отдельных файлов на иконку. +- Кропотливая часть — подбор 50 осмысленных иконок, техника тривиальна. + +## 3. Карточки результатов поиска — оценка: S + +Заменить строки выдачи на карточки: иконка слева, название и описание справа; сетка в одну-две колонки в зависимости от размера героя. + +- Зависимость: лучше делать после №1 (иконка), но можно раньше с плейсхолдером. +- Сохранить клавиатурную навигацию ↑↓ Enter Esc и подсветку активной карточки. + +## 4. Несколько языков — оценка: L, разбита на подзадачи + +### 4a. Инфраструктура i18n — M + +Модуль словарей (`locales/ru.ts`, `locales/en.ts`), функция перевода с фолбэком на базовый язык, состояние активной локали (localStorage), переключатель в шапке, обновление ``. + +### 4b. Перевод каркаса интерфейса — S/M + +Шапка, кнопки, подписи полей и состояний («Результат появится здесь», тексты ошибок исполнителя), главная-герой, страница каталога. + +### 4c. Перевод контента реестра — L по объёму, механическая + +Вынести title/description инструментов и label/options параметров в словари локалей с фолбэком. Объём: ~51 инструмент плюс параметры — основной трудозатратный кусок волны. + +### 4d. Поиск по любому языку — M + +Матчинг запроса против названий/описаний во всех поддерживаемых локалях сразу (не только активной); нормализация: нижний регистр, ё→е, снятие диакритики (NFD). Скоринг существующий сохраняется, лучшая локаль даёт балл. + +Транслитерация ru↔en наизусть — не входит, отдельно при необходимости. diff --git a/docs/plan-hero-search.md b/docs/plan-hero-search.md new file mode 100644 index 0000000..5a744f9 --- /dev/null +++ b/docs/plan-hero-search.md @@ -0,0 +1,60 @@ +# План: герой-поиск v2 — иконки, популярность, карточки + +> Статус: план к выполнению. + +## 1. Что получается + +Выдача поиска на главной превращается из списка строк в сетку карточек: слева иконка инструмента, справа название и описание. Инструменты получают два новых поля реестра — `popularity` (приоритет в выдаче) и `icon` (идентификатор иконки). Иконки переиспользуются в каталоге `/list-tools` и в легендах шагов цепочки. Поиск работает по-прежнему: нечёткий скоринг, клавиатура ↑↓ Enter Esc. + +## 2. Данные реестра + +- **`popularity?: number`** (0–100, по умолчанию 50) — приоритет внутри равного скоринга запроса. Значения проставляются вручную осознанно: базовые операции (обрезка, размер, удаление фона, конвертации JPG/PNG) — 80–95; цветовые и геометрия — 40–70; узкие и генераторы — 10–30. +- **`icon?: string`** — имя иконки из набора Lucide. Явный словарь-маппинг для всех инструментов в одном месте; отсутствие записи даёт нейтральную заглушку (Wrench). +- Тест целостности расширяется: популярность в диапазоне, иконка — непустая строка из разрешённого набора. + +## 3. Иконки + +Зависимость `lucide-svelte` (MIT) — один пакет, иконки рендерятся компонентами, дерево не раздувается за счёт выборочного импорта. + +Маппинг ведётся одним объектом `tool-icons.ts` рядом с реестром: 51 запись вида `'crop-png': Crop`. Подбор по смыслу: обрезка — Crop, размер — Scaling, поворот — RotateCw, отражение — FlipHorizontal2, оттенок — Palette, размытие — Droplets, резкость — Focus, удаление фона — Scissors, анализ — Info и так далее; для семейств конвертаций — FileInput/FileOutput варианты. + +Иконка появляется в трёх местах: карточка выдачи, карточка каталога `/list-tools`, легенда шага цепочки («Шаг N: [icon] Название»). + +## 4. Карточки выдачи + +- Сетка: одна колонка на узком экране, две — начиная со среднего героя. +- Композиция карточки: квадрат иконки слева, справа название (полужирное) и однострочное описание с обрезкой. +- Состояния hover и активной с клавиатуры — тот же акцент подсветки, что сейчас. +- Сортировка выдачи: скоринг запроса ↓, затем популярность ↓, затем название. + +## 5. Этапы и проверки + +- **A. Реестр** — поля `popularity` и `icon`, словарь иконок на все 51, расширение тестов целостности. Проверка: `pnpm test/check`. +- **B. Карточки поиска** — сетка выдачи с иконками и учётом популярности, клавиатура без изменений. Проверка: визуально, `check/build`. +- **C. Распространение** — иконки в каталоге `/list-tools` и легендах звеньев. Проверка: визуально, `build`. +- **D. Итог** — полный прогон и смоук §8. + +## 6. Смоук-чеклист + +1. Пустой запрос на герое показывает популярные первыми после первого символа. +2. Запрос «обрез» поднимает карточку обрезки выше прочих совпадений. +3. У каждой карточки есть иконка; у большинства — разные, соответствующие смыслу. +4. Наведение и стрелки подсвечивают карточку; Enter открывает инструмент. +5. Открытый инструмент работает как раньше: параметры в колонках, результат, скачивание. +6. Цепочка: легенда каждого шага показывает иконку выбранного инструмента. +7. `/list-tools`: карточки категорий с иконками, ссылки работают. +8. Регресс: старые сценарии (загрузка файла, цепочка, скачивание) не изменились. + +## 7. Критерии готовности + +- Все инструменты имеют иконку и ненулевую популярность; тесты это гарантируют. +- Выдача поиска — сетка карточек с корректной сортировкой и живой клавиатурой. +- Иконки присутствуют в поиске, каталоге и легендах шагов. +- `test/check/build` зелёные, смоук §6 пройден. + +## 8. Что сознательно не делаем + +- Автоматический расчёт популярности из статистики использования — значения ручные. +- Собственный набор SVG-иконок — берём готовый открытый. +- Переводы названий и поиск на других языках — отдельная i18n-волна. +- Изображения-превью в карточках поиска — только иконка и текст.