food-market/docs/rebrand-all-market-progress.md
nns 466e546ae2
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker Public / Build + push Public (test + latest) (push) Waiting to run
Docker Public / Deploy :test → test.food-market.kz (push) Blocked by required conditions
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
rebrand: кэш-бастинг логотипа (старое лого залипало в SW/кэше)
Причина: SW веб-админки прекэшировал /logo.svg и отдавал stale, CACHE_VERSION не
менялся при ребрендинге; публичный сайт отдавал лого/favicon без Cache-Control.

- sw.js: CACHE_VERSION fm-v2 → am-v3 (+ASSET_VERSION am3); activate чистит старые
  кэши, skipWaiting+clients.claim; прекэш бренд-ассетов версионирован; бренд в
  комментариях → ALL MARKET.
- ?v=am3 на нехэшированных бренд-ассетах: index.html, manifest, Logo.tsx,
  публичный Logo.astro + BaseLayout favicon.
- nginx web: index.html + бренд-ассеты + manifest → no-cache; /assets/* → immutable.
- nginx public: html + лого/favicon → no-cache; /_astro/* → immutable.

Проверено Playwright: старый клиент (SW fm-v2 + лого Food Market) → после выкладки
+ 1 перезагрузки кэш am-v3, fm-v2 удалён, лого ALL MARKET. Заметка на будущее про
очистку API_CACHE при logout — в прогресс-доке.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 19:47:41 +05:00

11 KiB
Raw Permalink Blame History

Ребрендинг Food Market → ALL MARKET — прогресс

Решение владельца 08.10.2026. Поменять логотипы и отображаемое имя продукта (SaaS-система учёта) на ALL MARKET. Цвета UI и шрифт интерфейса (Inter) — НЕ менять. Обязательна возможность быстрого отката.

Брендбук: ~/.fm-watchdog/brand/all-market/ (README + svg/pdf/png). Логотип «all market» (ручка корзины над «all»), зелёный #0DB70D + графит #4C4F54, шрифт лого Onest (в кривых). Охранное поле ≥ высоты «a», минимум 120 px по ширине на экране. Файлы НЕ перерисовывать.

Отображаемое имя

«Food Market» / «food-market» / «FOOD MARKET» → ALL MARKET (в тексте — ALL MARKET; лого — файлом).

План / статус

  1. Подготовка к откату: тег pre-rebrand-all-market (c8c0be5), docs/rebrand-rollback.md, deploy/rebrand-rollback.sh (dry-run по умолчанию), проверка отката в worktree (ниже).
  2. Ассеты бренда в репозитории (web/public/pos): логотипы, иконки, favicon.
  3. Веб-админка: Logo, вход/восстановление, favicon/apple-touch/manifest/PWA-иконки, , касса «FOOD MARKET · Касса»). Worktree удалён. Скрин — `docs/rebrand-screenshots/rollback-logo-foodmarket.png`.

    Что НЕ трогаем (обоснование остаточных «food-market»)

    • Домены *.food-market.kz, nginx, сертификаты — allmarket.kz ещё не куплен (отдельная задача).
    • C#-namespaces foodmarket.*, имена csproj/проектов/репо/docker-образов/БД/контейнеров.
    • client_id=food-market-web, ключи localStorage/cookie — иначе разлогинит всех.
    • Бонус-приложение магазина (food-market-app/-ios, back.food-market.kz) — бренд магазина, не продукта.
    • Данные организаций («Демо-магазин» и т.п.), в т.ч. демо-орг «FOOD MARKET» в маркетинг-скриншотах.
    • Цвета UI, шрифт интерфейса (Inter).
    • Имена артефактов кассы (food-market-pos-*.zip/.AppImage, exe foodmarket.Pos) — завязаны на AssemblyName (инфраструктура); у кассы ребрендировано видимое: заголовок окна, Name в .desktop, иконка.
    • Встроенные продуктовые скриншоты маркетинг-сайта (public/screenshots/*.png) — генерируются scripts/screenshots.mjs против ЖИВОЙ админки (сейчас прод); обновятся при выкатке ребрендинга на прод (прод в этой задаче не трогаем). На стенде ребренд виден вживую.

    Диапазон коммитов для отката

    Все коммиты с префиксом rebrand: подряд поверх тега pre-rebrand-all-market: pre-rebrand-all-market..HEAD = ec7d2dc … af00f04 (11 коммитов, см. git log --oneline pre-rebrand-all-market..HEAD). Откат: deploy/rebrand-rollback.sh --apply (или git revert --no-edit pre-rebrand-all-market..HEAD + ~/deploy-stage.sh).

    Итог проверки

    • grep: видимых «Food Market/FOOD MARKET» в UI/письмах/сайте/кассе не осталось; остатки — только обоснованные (домены, namespaces, client_id, демо-орг, артефакты, см. выше).
    • Скриншоты Было/Стало: docs/rebrand-screenshots/ + index.html (лого, favicon, письмо, OG, касса вход/продажа, веб-вход, публичная главная; «Было» из тега, «Стало» live).
    • POS: --uitest OK, --smoke OK (старт 157мс), 82 unit зелёные.
    • Стенд: ~/deploy-stage.sh → OK (test.admin.food-market.kz). Реальный вход: лого ALL MARKET, без тостов, без префилла/подсказки пароля.
    • menu-walk: 3/3 passed (demo-admin/keeper/cashier, каждый пункт меню, 0 ошибок/тостов).
    • full-chain C: 16 ✓ / 0 ✗ — ЗЕЛЁНЫЙ.
    • Откат: проверен в worktree (revert собрался, лого Food Market вернулось), стенд не трогали.

    Журнал

    • 08.10 — старт: прочитан брендбук, составлен план, зафиксированы границы.
    • 08.10 — ребрендинг web/api/public/pos/docs (коммиты ec7d2dc…89c5c6d); галерея Было/Стало.
    • 08.10 — ревью Mac-Claude: безопасность входа (префилл/подсказка/сидер/ротация пароля стенда), тост 404 (StageBanner/QuickLoginBlock → fetch), касса (лого крупнее + разделитель, бейдж внутри).
    • 08.10 — deploy-stage OK; menu-walk 3/3; full-chain 16/16 ЗЕЛЁНЫЙ; откат проверен в worktree.
    • 08.10 — кэш-бастинг лого (у владельца в браузере оставалось старое лого из SW/кэша):
      • sw.js: CACHE_VERSION fm-v2 → am-v3 + ASSET_VERSION=am3; activate удаляет старые кэши, skipWaiting+clients.claim есть; прекэш бренд-ассетов версионирован; бренд в комментариях → ALL MARKET.
      • ?v=am3 на нехэшированных бренд-ассетах во всех ссылках: index.html, manifest.webmanifest, Logo.tsx, публичный Logo.astro + BaseLayout.astro favicon.
      • nginx web (deploy/nginx.conf): index.html + бренд-ассеты + manifest → no-cache; /assets/* → immutable.
      • nginx public (src/food-market.public/deploy/nginx.conf): html + лого/favicon → no-cache; /_astro/* → immutable.
      • Проверка Playwright: старый клиент (SW fm-v2 + лого Food Market) → после выкладки + 1 перезагрузки кэш am-v3, fm-v2 удалён, лого ALL MARKET. PASS.
      • При будущей смене логотипа: bump CACHE_VERSION (sw.js) + ?v= в ссылках (index.html, manifest, Logo.tsx/.astro).

    Заметка на будущее (НЕ в этой задаче)

    SW кэширует ответы GET /api/* (API_CACHE). На ОБЩЕМ компьютере после выхода из аккаунта данные прошлого пользователя могут остаться в кэше. Предложение: при logout чистить API_CACHE (caches.delete('am-v3-api') или через postMessage к SW) — отдельной задачей.