mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
docs: update plans, backlog
This commit is contained in:
+72
-41
@@ -24,6 +24,10 @@
|
||||
|
||||
## Мелочи всякие
|
||||
|
||||
Порядок правок полей и раскладки — `docs/plan-fields-audit-fixes.md`, сами
|
||||
находки («что плохо», с датой аудита) — `docs/tools-audit.md`. Здесь — как это
|
||||
исправить; находка в аудите не отменяет задачу здесь.
|
||||
|
||||
- [ ] Пересмотреть тесты - исправить всякие хрупкие, которые проверяют
|
||||
количество инструментов, точное совпадение текстов, поиск по
|
||||
`img[alt="Result image"]`, svelte классам и тому подобные
|
||||
@@ -55,6 +59,9 @@
|
||||
шрифты с кириллицей? сделать галочку "только с кириллицей"??? (решение о
|
||||
наборе и лицензиях: `docs/plan-platform.md` §4 — только OFL/Apache с
|
||||
паспортом, семейства с кириллицей)
|
||||
- [ ] поле ввода текста - сделать по умолчанию нормального размера, а не одну
|
||||
строку для svg - форматирование или подсветку синтаксиса??? для bin\hex -
|
||||
форматирование по колонкам??? для hex\bytes\rgba - пример в placeholder
|
||||
- [ ] сделать загрузку картинки исходника по ctrl+v и drag-and-drop (dropzone)
|
||||
- [ ] square-mask-png - проверить работу - параметры неверно считаются. width -
|
||||
100, height - 100, x - 100, y - 100, обрезает 50% на 50% картинку
|
||||
@@ -64,16 +71,32 @@
|
||||
значения
|
||||
- [ ] для keep Aspect field - пересчитывать второе поле, учитывать какое было
|
||||
изменено
|
||||
- [ ] поле ввода текста - сделать по умолчанию нормального размера, а не одну
|
||||
строку для svg - форматирование или подсветку синтаксиса??? для bin\hex -
|
||||
форматирование по колонкам??? для hex\bytes\rgba - пример в placeholder
|
||||
- [ ] обновить страницу 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 после переименования
|
||||
просто перестают открываться — это осознанно, миграция усложнила бы код
|
||||
ради пары пользователей.
|
||||
- [ ] придумать процесс редактирования и настройки pipeline - drag-n-drop,
|
||||
удаление, добавление инструментов. переход один инструмент - pipeline без
|
||||
перезагрузки
|
||||
- [ ] Слаги инструментов (`*-png`) — надо переименовть, они работают с любыми
|
||||
изображениями. Надо сделать отдельный интерфейс маппинга инструмент ->
|
||||
ссылка
|
||||
- [ ] `CatalogToolbar`: фильтры используют сырой `<button>`, а не `ui/Button` —
|
||||
единый контрол для всей библиотеки
|
||||
(`web/src/lib/components/CatalogToolbar.svelte`).
|
||||
@@ -99,17 +122,20 @@
|
||||
|
||||
## SEO/GEO
|
||||
|
||||
Общий план: `docs/plan-seo.md` (S0–S4). Старт возможен — пока только domain-free
|
||||
часть S1.
|
||||
Общий план: `docs/plan-seo.md` (S1–S4). Старт возможен — пока только domain-free
|
||||
часть S1. Полное содержание этапов не дублируется здесь, только идентификаторы.
|
||||
|
||||
- [ ] переименование бренда + домен: чек-лист в локальном плане
|
||||
`docs/plan-domain.local.md` (вне git, имя домена в репо не публикуется;
|
||||
план-seo §6, R1/R2)
|
||||
- [ ] переименование бренда + домен: чек-лист в локальном файле
|
||||
`plan-domain.local.md` (в git не входит, в клоне отсутствует; подробности
|
||||
и порядок — `docs/plan-seo.md` §6, R1/R2)
|
||||
- [ ] снять `noindex` со страниц инструментов, когда будут sitemap, canonical и
|
||||
контент (S1h; блокирует индексацию всего сайта) — `docs/plan-seo.md` §4
|
||||
- [ ] download с селектором формата PNG/JPG/WebP/BMP для всех инструментов (райз
|
||||
№7 → S1f)
|
||||
- [ ] форматные страницы (`crop-jpeg`, …) — только по вордстату с уникальным
|
||||
контентом; редиректы только для опечаток; клонов с canonical не делать
|
||||
(план §5)
|
||||
«Download» → S1f)
|
||||
- [ ] форматные страницы по конкурентным слагам (`crop-jpeg`, …) — только по
|
||||
вордстату с уникальным контентом; редиректы только для опечаток и
|
||||
переименований уже опубликованных страниц; клонов с canonical не делать
|
||||
(`docs/plan-seo.md` §5)
|
||||
- [ ] sitemap.xml из реестра + `Sitemap:` в robots.txt (S1b/S1c)
|
||||
- [ ] Seo.svelte: canonical + OG-теги, per-tool OG-картинки (S1d/S1e)
|
||||
- [ ] контент страницы инструмента: seo-блок в словарях, H1/how-to/FAQ/related
|
||||
@@ -119,12 +145,14 @@
|
||||
|
||||
## Платформа (API/PWA)
|
||||
|
||||
Общий план: `docs/plan-platform.md`; WASM-ядро и CLI уже в `docs/roadmap.md`
|
||||
(фазы 3–8) — здесь только новые треки.
|
||||
Общий план: `docs/plan-platform.md`; WASM-ядро, эталоны и CLI —
|
||||
`docs/roadmap.md` (фазы 2–8). Здесь только треки, которых нет в roadmap.
|
||||
|
||||
- [ ] PWA: manifest + service worker, оффлайн-режим, установка (после S1)
|
||||
- [ ] API: спайк серверного ядра (нативный Rust vs edge-wasm), ключи, free tier
|
||||
(после wasm-фаз 5–7)
|
||||
- [ ] Шрифты: лицензирование (F1–F4) и DOM-free рендер (F5–F6) — до фазы 8
|
||||
(`docs/plan-platform.md` §4)
|
||||
|
||||
## Качество production UI
|
||||
|
||||
@@ -137,6 +165,10 @@
|
||||
|
||||
## Идеи
|
||||
|
||||
Идеи 1–5 и 15 относятся к **пайплайну (цепочкам шагов)**, которого в коде пока
|
||||
нет: это фаза 11 `docs/roadmap.md`. Идеи 6–14 — к существующим инструментам и
|
||||
UI. Оценки (S/M/L) — оценка труда, не приоритет.
|
||||
|
||||
1. **Менять первый инструмент цепочки** — оценка M. Сейчас базовый инструмент
|
||||
зафиксирован при открытии страницы; хочется заменить его на другой без
|
||||
разборки цепочки: шаги и их параметры сохраняются, вход перечитывается.
|
||||
@@ -149,8 +181,9 @@
|
||||
|
||||
3. **Несколько цепочек: сохранение и загрузка** — оценка M. Именованные цепочки
|
||||
в localStorage (список, создать/переименовать/удалить), быстрое переключение.
|
||||
Формат экспортного JSON расширить опциональным полем имени, старые файлы
|
||||
читаются как безымянные.
|
||||
Формат экспортного JSON расширить опциональным полем имени; обратной
|
||||
совместимости со старыми выгрузками не делаем (см. задачу про `id`/`slug`
|
||||
выше — формат ещё не устоялся).
|
||||
|
||||
4. **Batch-обработка архивов выбранным chain** — оценка L. Вход — zip-архив
|
||||
картинок (распаковка в браузере), прогон текущего или выбранного сохранённого
|
||||
@@ -164,16 +197,15 @@
|
||||
поднимается в выдаче поиска (бонус к popularity при скоринге).
|
||||
|
||||
6. **Конвертация формата — НЕ отдельный инструмент, а выбор в кнопке Download**
|
||||
— оценка M/L. Инструменты `convert-png-to-jpg` / `convert-png-to-webp` (и др.
|
||||
форматы) не должны жить как самостоятельные инструменты цепочки. Механическая
|
||||
часть уже есть: `ToolEntry.output` (`OutputFormat`: mime/ext/qualityParamId)
|
||||
и кодирование по нему в `SchemaToolView.download()` — `docs/architecture.md`,
|
||||
раздел 3. Осталось (UX-райз «Download»):
|
||||
- выбор формата/качества прямо в кнопке/диалоге Download для любого
|
||||
результата (не отдельными конвертерами);
|
||||
— оценка M/L. Решение и продуктовое обоснование: `docs/plan-seo.md` §0 и
|
||||
задача **S1f**; почему селектор не заменяет существующие convert-страницы —
|
||||
`docs/plan-seo.md` §5. Механическая часть уже есть: `ToolEntry.output`
|
||||
(`OutputFormat`: mime/ext/qualityParamId) и кодирование по нему в
|
||||
`SchemaToolView.download()` — `docs/architecture.md`, раздел 3. Что осталось
|
||||
сверх S1f:
|
||||
- экспорт с лимитом размера → закрывает отложенный `reduce-to-size-png`
|
||||
(целевой KB, бинарный поиск по k из квантования). Проработать вместе с
|
||||
достройкой download-флоу нового UI.
|
||||
достройкой download-флоу.
|
||||
|
||||
7. **`watermark-image-png` (водяной знак картинкой)** — оценка M. Нужна
|
||||
overlay-механика: второй источник изображения (getOverlay/store), параметры
|
||||
@@ -208,20 +240,19 @@
|
||||
а `--color-danger` в light-теме на границе: после завершения редизайна
|
||||
вернуть порог 4.5 и перепроверить оба токена.
|
||||
|
||||
14. **Отображение маски для инструментов (runMask/preview-mask)** — придумать и
|
||||
реализовать процесс показа маски результата. **Контекст:** в старом
|
||||
контракте поле `preview` у `remove-color`/`remove-background` показывало
|
||||
быстрый ч/б превью-маску (`colorMask`/`backgroundMaskPreview`) того, что
|
||||
будет вырезано. При миграции на единый `run(ctx)` поле убрано (шаг 8,
|
||||
`web/src/lib/registry/alpha.ts`) — новый executor и schema-превью зовут
|
||||
`run()` напрямую, маска пока не нужна. **Идея 1:** дать каждому `run`
|
||||
возможность вернуть (или инструмент — объявить) `runMask` — ч/б изображение
|
||||
маски изменений либо иной подход (отдельное поле `mask` + функция маски,
|
||||
второй результат, overlay). Оценка — на усмотрение при проработке (S/M).
|
||||
Пока живём без неё. **Идея 2:** каждый `run` возвращает два изображения —
|
||||
для отображения (показывает маску или сам результат) и для передачи в
|
||||
следующий инструмент (всегда результат). Оценка — на усмотрение при
|
||||
проработке (S/M). Пока живём без неё.
|
||||
14. **Отображение маски для инструментов (`runMask`)** — придумать и реализовать
|
||||
процесс показа маски результата. **Контекст:** удалённый UI-v1 умел
|
||||
показывать ч/б превью-маску «что будет вырезано» отдельным полем; при
|
||||
переходе на единый `run(ctx)` этого поля не осталось — executor и
|
||||
schema-превью зовут `run()` напрямую, маска не возвращается. **Идея 1:**
|
||||
дать каждому `run` возможность вернуть (или инструмент — объявить) `runMask`
|
||||
— ч/б изображение маски изменений либо иной подход (отдельное поле `mask` +
|
||||
функция маски, второй результат, overlay). Оценка — на усмотрение при
|
||||
проработке (S/M). Пока живём без неё. **Идея 2:** каждый `run` возвращает
|
||||
два изображения — для отображения (показывает маску или сам результат) и для
|
||||
передачи в следующий инструмент (всегда результат). Оценка — на усмотрение
|
||||
при проработке (S/M). Пока живём без неё. Первые кандидаты на маску:
|
||||
`remove-color-from-png`, `remove-background-png`.
|
||||
|
||||
15. **Набор файлов в пайплайне: 1 → many не должен быть терминальным** — оценка
|
||||
L. **Сейчас** `execute` принимает один `source: PixelImage | undefined` и
|
||||
|
||||
Reference in New Issue
Block a user