feat: update brand name, add domain

This commit is contained in:
2026-10-12 06:03:55 +05:00
parent 5a7f598d50
commit b7ba1f501f
28 changed files with 96 additions and 113 deletions
+2 -10
View File
@@ -28,17 +28,10 @@
| `docs/plan-fields-audit-fixes.md` | Разбивка аудита на волны правок | draft |
| `docs/plan-seo.md` | SEO/GEO-план | active |
| `docs/plan-platform.md` | API/PWA/шрифты-план | active |
| `docs/plan-domain.local.md` | Чек-лист переименования бренда и покупки домена | active |
| `docs/checklist-manual-testing.md` | Ручная приёмка production UI | active |
| `web/eslint-plugins/README.md` | Правка lint-правил, токенов и их конфигов | active |
| `docs/archive/README.md` | Архивирование и удаление старых документов | active |
`docs/plan-domain.local.md` **исключён из git** через `.gitignore`: выбранное
имя домена не должно попасть в историю до покупки. В клоне файла нет — это
ожидаемо, и ссылки на него в `plan-seo.md` и `backlog.md` не разрешаются. Строка
в таблице оставлена, чтобы задачу R1/R2 можно было найти по индексу; сам
чек-лист лежит только на машине разработчика.
## Правила
- У каждой темы ровно один владелец: остальные документы ссылаются на него, а не
@@ -64,8 +57,7 @@
- Поиск по `docs/` задевает `docs/archive/`: там вынесены завершённые планы и
исследования, поэтому grep по `docs/` даёт больше шума, чем пользы. Для правок
production-кода архив не нужен: grep по `docs/*.md` без `archive/`.
- Проверка ссылок в документации не автоматизирована; ожидаемо неразрешимыми
считаются ссылки на `docs/plan-domain.local.md` (файл вне git). Всё остальное
неразрешимое — ошибка.
- Проверка ссылок в документации не автоматизирована; любая неразрешимая ссылка
— ошибка.
- Протокол «остановиться и показать изменения» — `docs/agent-workflow.md`,
раздел 6.
+1 -3
View File
@@ -41,9 +41,7 @@
5. Найти оставшиеся входящие ссылки:
`git grep -n "<filename>" -- 'docs/*.md' AGENTS.md README.md web/eslint-plugins/README.md`.
Шаг 4 ломает их, и агент без этого шага напишет в новом документе ссылку на
удалённый файл. Ожидаемо неразрешимыми остаются ссылки на
`docs/plan-domain.local.md` — он вне git, это не ошибка (`docs/README.md`,
раздел «Правила»).
удалённый файл.
6. Не менять архивный документ под новые требования.
## Удаление
-3
View File
@@ -230,9 +230,6 @@
## SEO/GEO
- [ ] переименование бренда + домен: чек-лист в локальном файле
`plan-domain.local.md` (в git не входит, в клоне отсутствует; подробности
и порядок — `docs/plan-seo.md` §6, R1/R2)
- [ ] снять `noindex` со страниц инструментов, когда будут sitemap, canonical и
контент (S1h; блокирует индексацию всего сайта) — `docs/plan-seo.md` §4
- [ ] форматные страницы по конкурентным слагам (`crop-jpeg`, …) — только по
+37 -37
View File
@@ -30,14 +30,14 @@
## 0. Решения
- **Бренд: переименовать до индексации** (новое имя и домен сознательно не
записаны в этом репозитории — чек-лист в локальном файле
`plan-domain.local.md`, см. §6, он вне git: выбранное имя не должно утекать в
историю коммитов до покупки домена). Легенда честная: «started as PNG tools,
now all formats» — это контент-плюс, а не баг. Адреса страниц
(`/tools/crop-png`) и localStorage-ключи не переименовывать (см. решение про
`slug` ниже). Точка истины по бренду: константа в i18n + README; хардкод в
компонентах недопустим.
- **Бренд: `easy-image-tools`, домен `easy-image-tools.com`.** Переименование до
индексации выполнено (R1): хардкод убран, точка истины — константа `brand` в
i18n + README (хардкод в компонентах недопустим). Домен зарегистрирован
2026-10-11 (R2); остался перевод прода на него (DNS, HTTPS, снятие
`BASE_PATH`, `PUBLIC_SITE_ORIGIN`, 301 со старого GitHub Pages) — теперь это
блокер S1-domain (§4). Легенда честная: «started as PNG tools, now all
formats» — это контент-плюс, а не баг. Адреса страниц (`/tools/crop-png`) и
localStorage-ключи не переименовывать (localStorage-ключи бренда не содержат).
- **Форматы: формат = выбор в UI, не отдельные страницы.** Download-кнопка
каждого инструмента — с селектором PNG/JPG/WebP/BMP (+quality для lossy). Райз
«выбор формата/качества в Download» вытащен из backlog №7 в S1f: механика уже
@@ -203,12 +203,14 @@
`convert-png-to-webp`, `png-to-bmp` остаются самостоятельными лендингами
со своим контентом (§5).
#### S1-domain: с доменом (после покупки + DNS)
#### S1-domain: свой домен (подключён; §6 R2-cut)
- [ ] **[S1a]** Перевести прод на собственный домен: убрать `BASE_PATH` из
`deploy.yml`, задать `PUBLIC_SITE_ORIGIN`, перенаправить
`https://<юзер>/<repo>/…` на корневые URL (301). Делается одновременно с
S1d (canonical), чтобы Google проиндексировал сразу с правильным доменом.
- [x] **[S1a]** Перевести прод на собственный домен — **сделано 2026-10-11**:
`BASE_PATH` убран из `deploy.yml`, задан `PUBLIC_SITE_ORIGIN`, добавлен
`web/static/CNAME`. Редирект `https://<юзер>/<repo>/…` → корневые URL
(301) делает сам GitHub Pages при включённом кастомном домене. Делается
одновременно с S1d (canonical), чтобы Google проиндексировал сразу с
правильным доменом.
- [ ] **[S1b]** Скрипт `web/scripts/gen-sitemap.mjs`: генерирует `sitemap.xml` в
`build/` из `PAGES` реестра (`web/src/lib/registry`) + статических
страниц. Взять адреса у страниц, а не у инструментов: страниц может быть
@@ -314,14 +316,14 @@
> Группы здесь — по категории страницы в реестре (`registry/pages/`), а не по
> смыслу: `round-corners-png` лежит в `alpha`, `add-text-png` и
> `watermark-tile-png` — в `text`.
>
> **Открытый вопрос по интенту «сжать до N КБ».** Лимит размера теперь живёт в
> кнопке Download (`fitWithinBytes` в `web/src/lib/core/io.ts`); интенты вида
> «compress png to 500kb / 1mb» — high-volume и лимит-ориентированные, селектор
> в Download их не закрывает как посадочная. Решение (отдельная страница / приём
> в контенте существующих / ничего) требует вордстата; имя страницы не выбрано.
> Прорабатывать вместе с вопросом «из формата в PNG» выше.
>
> **Открытый вопрос по интентам «из формата в PNG».** У конкурента есть
> `jpg-to-png`, `webp-to-png`, `gif-to-png` как отдельные страницы; у нас таких
> инструментов нет и создавать их не хочется — загрузка файла уже принимает
@@ -398,28 +400,28 @@ with PNG, JPG, WebP» в тексте + селектор формата в Downl
интенты, которые подтверждены вордстатом, и сразу с контентом S2 (страница без
текста — потраченный URL).
## 6. Переименование бренда и домен (сделать до S1-domain, дёшево сейчас)
## 6. Переименование бренда и домен
Выбранное имя и домен **в этом репозитории не записаны**: детальный чек-лист
лежит в локальном файле `plan-domain.local.md` рядом с этим планом, он исключён
из git через `.gitignore`, чтобы имя не попало в историю коммитов до покупки
домена. Агент, работающий из клона, этого файла не увидит — при необходимости
попросить чек-лист у пользователя.
Бренд — `easy-image-tools`, домен — `easy-image-tools.com`.
- [ ] **[R1]** Механический переезд бренда на новое имя. Список файлов и строк с
хардкодом — в локальном плане (раздел «Где живёт бренд в коде»); здесь
только SEO-ограничения. **НЕ трогать:** адреса страниц инструментов
(`/tools/crop-png`) и localStorage-ключи — `theme` и `locale` лежат без
префикса бренда, поэтому переименование с ними не столкнётся (проверено в
`theme.svelte.ts` и `i18n/locale.svelte.ts`); историю `docs/archive`.
Бренд должен стать i18n-константой, а не тремя независимыми хардкодами.
- [ ] **[R2]** Купить выбранный домен (кандидаты и пробы — в локальном плане) и
перевести прод на него без `BASE_PATH` (§0). Домен нужен до S1-domain:
canonical и sitemap генерятся от `PUBLIC_SITE_ORIGIN`.
- **Порядок:** R1+R2 можно делать параллельно с текущими quality-задачами (не
блокируют). R2 (домен) — блокер для S1-domain (canonical + sitemap), а
S1-domain — блокер для S1h (снятие `noindex`). После индексации переименование
= переезд с 301, потеря позиций и ссылок — не делать.
- [x] **[R1]** Переезд бренда выполнен (2026-10-11): хардкод в компонентах
убран, бренд — i18n-константа `t("brand")` (точка истины — словари
`brand` + README). Репозиторий переименован в `easy-image-tools`, remote
обновлён, привязанные к репо ссылки/пути переключены: `BASE_PATH` в
`deploy.yml`, GitHub-URL в `TopBar.svelte`, `repository` в `cog.toml`.
**НЕ трогать:** адреса страниц инструментов (`/tools/crop-png`),
localStorage-ключи (бренда не содержат), историю `docs/archive`.
- [x] **[R2]** Домен `easy-image-tools.com` зарегистрирован (2026-10-11);
`SITE_URL` в `web/src/lib/seo.ts` переключён на него.
- [x] **[R2-cut]** Прод переведён на домен без `BASE_PATH` (§0) — **сделано
2026-10-11**: DNS + HTTPS, `PUBLIC_SITE_ORIGIN` =
`https://easy-image-tools.com` в `deploy.yml`, `web/static/CNAME`. 301 со
старого GitHub Pages делает сам GitHub при включённом кастомном домене.
Canonical и sitemap генерятся от `PUBLIC_SITE_ORIGIN`.
- **Порядок:** R1(код), покупка домена и cutover (R2-cut) сделаны. Осталось
S1-domain (canonical + sitemap: S1b/S1c/S1d), а S1-domain — блокер для S1h
(снятие `noindex`). Переименование делали до индексации (до S1h): после снятия
`noindex` это был бы переезд с 301 и потеря позиций — не делать.
## 7. Что осознанно НЕ делаем
@@ -443,5 +445,3 @@ with PNG, JPG, WebP» в тексте + селектор формата в Downl
- `docs/roadmap.md` — фазы 2–8 (ядро TS→Rust/wasm, CLI), фаза 11 (пайплайн);
фазы 9–10 — API и PWA.
- `docs/plan-platform.md` — планы API и PWA (общее ядро, оффлайн-режим).
- `plan-domain.local.md` — локальный чек-лист переименования и покупки домена;
**в git не входит** (`.gitignore`), в клоне отсутствует.
+5 -4
View File
@@ -1,10 +1,11 @@
# План развития: easy-png-tools
# План развития: easy-image-tools
> **Статус: active.** Фаза 1 выполнена — сайт живёт на типизированном реестре,
> production UI — корневые маршруты. Текущий фокус: SEO S1-free
> (`docs/plan-seo.md`) + открытые задачи (`docs/backlog.md`). Домен нужен для
> SEO (S1-domain). Фазы 2–8 — будущие; 9–10 спланированы в
> `docs/plan-platform.md`; 11 — пайплайн.
> (`docs/plan-seo.md`) + открытые задачи (`docs/backlog.md`). Домен
> `easy-image-tools.com` зарегистрирован; остался cutover для индексации
> (S1-domain). Фазы 2–8 — будущие; 9–10 спланированы в `docs/plan-platform.md`;
> 11 — пайплайн.
>
> **Идентификаторы.** Ссылаться на фазу этого документа. Пространства
> идентификаторов задач: `FA-*` — правки полей и раскладки