Причина: 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>
11 KiB
Ребрендинг 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; лого — файлом).
План / статус
- Подготовка к откату: тег
pre-rebrand-all-market(c8c0be5), docs/rebrand-rollback.md, deploy/rebrand-rollback.sh (dry-run по умолчанию), проверка отката в worktree (ниже). - Ассеты бренда в репозитории (web/public/pos): логотипы, иконки, favicon.
- Веб-админка: 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, exefoodmarket.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:
--uitestOK,--smokeOK (старт 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.astrofavicon.- 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) — отдельной задачей. - Домены