docs: update to slug - id changes

This commit is contained in:
2026-09-27 17:04:41 +05:00
parent 7b7e12fafc
commit 8cb3f1a8f0
9 changed files with 204 additions and 164 deletions
+18 -29
View File
@@ -72,28 +72,17 @@
- [ ] для keep Aspect field - пересчитывать второе поле, учитывать какое было
изменено
- [ ] обновить страницу kit или сделать storybook
- [ ] Слаги инструментов (`*-png`) — **развести `id` и адрес страницы.**
Инструменты работают с любым форматом, но называются `crop-png`,
`resize-png`; имя в коде, пайплайнах и i18n должно быть `crop`, `resize`,
а адрес и имя скачиваемого файла — прежними (`/tools/crop-png` →
`crop-png.png`). Решение и его SEO-последствия: `docs/plan-seo.md` §0;
текущее состояние (поля `slug` нет, роут — `tools/[id]`) —
`docs/architecture.md`, раздел 3. Порядок работ: 1. добавить `slug` в
`ToolEntry` + `toolSlug()` / `getToolBySlug()` в `registry/index.ts`,
проверку уникальности `slug` в `registry.test.ts`; 2. перевести
`routes/tools/[id]` → `[slug]` (`entries()`, `load()`, `+page.svelte`),
`ToolCard`, крошку в `+layout.svelte` и имя файла download в
`SchemaToolView` на `toolSlug(tool)`; старые адреса продолжают работать,
редиректы не нужны; 3. переименовать `id` волнами по группам реестра
(`convert`, `alpha`, `color`, `geometry`, `filters`, `analyze`,
`generate`, `text`); в каждой волне — `registry/<group>.ts`, ключи
`tools.*` в `en.ts`/`ru.ts`, `tool-icons.ts`, захардкоженные id в тестах и
e2e (`smoke-i18n.test.ts`, `kit/+page.svelte`); 4. `docs/tools-map.md` при
этом **не меняется**: карта перечисляет id, а они остаются прежними как
адреса. Обратной совместимости не делаем: формат пайплайна ещё не
устоялся, старые экспорты и записи в localStorage после переименования
просто перестают открываться — это осознанно, миграция усложнила бы код
ради пары пользователей.
- [ ] Свести convert-страницы на один инструмент `convert` — реализация уже
умеет «скопировать пиксели, декодировать вход, отдать в заданном формате»,
а страницы различаются только форматом вывода. **Зависит от S1f**
(`docs/plan-seo.md` §1): пока `quality` живёт в схеме страницы, у
`convert-png-to-bmp` и `convert-png-to-jpg` разные наборы полей, и один
инструмент на них не сойдётся. Качество — настройка кнопки Download
(«Download as JPEG»), а не поле страницы; после его переезда пресеты схемы
не нужны, страницы различаются только `output` и `params` шага. Модель
страницы к этому готова: `Page.steps` — список инструментов, один
инструмент может обслуживать много страниц (`docs/architecture.md`, раздел
3).
- [ ] придумать процесс редактирования и настройки pipeline - drag-n-drop,
удаление, добавление инструментов. переход один инструмент - pipeline без
перезагрузки
@@ -193,21 +182,21 @@ UI. Оценки (S/M/L) — оценка труда, не приоритет.
5. **Избранные инструменты (fav tools)** — оценка S/M. Тоггл-звёздочка на
карточках каталога, результатах поиска и в шапке страницы инструмента; список
id в localStorage. Избранное показывается отдельной секцией сверху каталога и
поднимается в выдаче поиска (бонус к popularity при скоринге).
slug в localStorage. Избранное показывается отдельной секцией сверху каталога
и поднимается в выдаче поиска (бонус к popularity при скоринге).
6. **Конвертация формата — НЕ отдельный инструмент, а выбор в кнопке Download**
— оценка M/L. Решение и продуктовое обоснование: `docs/plan-seo.md` §0 и
задача **S1f**; почему селектор не заменяет существующие convert-страницы —
`docs/plan-seo.md` §5. Механическая часть уже есть: `ToolEntry.output`
`docs/plan-seo.md` §5. Механическая часть уже есть: `Tool.output`
(`OutputFormat`: mime/ext/qualityParamId) и кодирование по нему в
`SchemaToolView.download()` — `docs/architecture.md`, раздел 3. Что осталось
сверх S1f:
- экспорт с лимитом размера → закрывает отложенный `reduce-to-size-png`
(целевой KB, бинарный поиск по k из квантования). Проработать вместе с
достройкой download-флоу.
- экспорт с лимитом размера → закрывает отложенную страницу
`reduce-to-size-png` (целевой KB, бинарный поиск по k из квантования).
Проработать вместе с достройкой download-флоу.
7. **`watermark-image-png` (водяной знак картинкой)** — оценка M. Нужна
7. **Страница `watermark-image-png` (водяной знак картинкой)** — оценка M. Нужна
overlay-механика: второй источник изображения (getOverlay/store), параметры
scale/opacity/position/margin/aspect. Решается вместе с вопросом, как второй
источник картинки вписывается в schema-driven preview (`SchemaToolView`).