docs/site-fixes-2026-10-10/{index.html,REPORT.md,screenshots}; tools/site-fixes-verify.mjs
(Playwright-проверка: signup plan/конфигурация/цена, мобильное меню, без промисов/REPLACE_ME).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8.9 KiB
8.9 KiB
Исправления публичного сайта test.food-market.kz — этап 1 «Сайт и выбор тарифа»
Дата: 2026-10-10/11. Источник: src/food-market.public (Astro). Деплой — только на ТЕСТ
(~/.fm-watchdog/deploy-public-test.sh). Откат: образ food-market-public:test-pre-site-fixes
(создан перед деплоем). Прод-сайт, gateway nginx, прод-БД — НЕ трогались.
Проверка после деплоя (Playwright, десктоп 1440×900@2x и моб. 390×844@3x): 10/10 —
см. index.html в этой папке (скриншоты + автопроверки).
Что исправлено (по номерам 1–10)
- /signup читает
?plan=и конфигурацию. Форма на клиенте разбираетplan(start|business|network; неизвестный → «Старт») иshops/cashes/warehouses/employees. Выбранный тариф предвыбран; для «Бизнес» показывается конфигурация и итоговая цена. Расчёт вынесен в общий модульsrc/lib/pricing.ts(БД 10 000 + 2 000/магазин + 500/касса + 500/склад) — одни и те же числа в конструкторе, форме и на /pricing. Проверено:?plan=business&shops=3&cashes=4&warehouses=1&employees=5→ «Бизнес» выбран, конфигурация и 15 500 ₸ видны;?plan=start→ «Старт»;?plan=xyz→ «Старт». Параметры конфигурации уходят в тело запроса регистрации (вперёд-совместимо). Текущий контракт/api/auth/signupпринимает толькоplan(SignupInput.Plan), остальные поля игнорирует — см. раздел «нужно решение владельца». - Мобильная шапка (≤ lg). Добавлены гамбургер + выезжающая панель со ВСЕМИ пунктами
десктоп-меню и кнопками «Войти»/«Начать бесплатно».
aria-expanded/aria-controls, закрытие по тапу вне и по Esc, доступно с клавиатуры; зоны нажатия ≥ 44 px. Проверено на 390 px: меню открывается, тап по «Тарифы» ведёт на /pricing, горизонтальной прокрутки нет. - og/twitter-картинки перегенерированы (
scripts/og.mjs→public/og/*): из home убрано «ОФД РК», в import «REST API» → «Excel, CSV, 1С, МойСклад», из for-grocery убран «ABC-анализ». - База знаний и блог — убраны обещания несуществующего (сверено с «В разработке» на главной и /integrations/): способы оплаты подписки «Kaspi Pay/Halyk/Jusan/Forte/Visa/Mastercard» → «способ уточняется, свяжитесь с нами»; «стандартный REST API» в импорте → «Excel/CSV, 1С, МойСклад»; «Скачать установщик/.msi/Скачать кассу для Windows» → «скоро»; «тип оплаты Наличные/Kaspi/Карта» → «наличные или карта»; «Kaspi Magazin (Q3 2026)» → без даты; «архитектура для будущей маркировки» — убрано; «Триал» как тариф → «Старт/Бизнес/Сеть, 90 дней бесплатно»; платные консультации «5 000 тг/час» и скидки 3/6/12 мес — убраны (нет на /pricing, не подтверждены). Ссылки на несуществующие /kb/users, /kb/loyalty убраны.
- /import: чужой английский HR-скриншот (
/photos/import-hero.jpg) заменён на реальный скриншот каталога продукта (/screenshots/catalog.webp). - Рендер /kb/: тело статей было завёрнуто в
```markdownс дублирующим front-matter и вторым#-заголовком → показывалось сырым моноширинным текстом. Развёрнуто: front-matter не виден, markdown рендерится, заголовок один. Проверены все /kb/ и /blog/* (блог был чист). - Аналитика: убраны заглушки
data-id="REPLACE_ME"(Google/Яндекс.Метрика) — скрипты подключаются только при реальныхPUBLIC_GA_ID/PUBLIC_YM_ID, иначе в HTML ничего нет. - robots.txt:
Sitemap:→ рабочий/sitemap.xml(был 404/sitemap-index.xml). - Противоречия сведены к оферте (она главнее): удаление данных — 30 дней (было 30/60 в KB); возврат — по письменному заявлению в случаях по закону РК (убрано «14 дней без обоснования»); «Старт без лимита пользователей» → «до 2 сотрудников» (как на /pricing). Дубль в футере «Дорожная карта»/«Changelog» (один URL) — убран, остался «Changelog». /status «Касса (Windows) — в разработке» → «Скоро» (согласовано с «Скачать · скоро»).
- Мелочи: зоны нажатия — ссылки футера
block py-2(≈40 px), CTA в шапкеmin-h-[44px]; у lazy-картинок (главная, /pos) проставленыwidth/height(catalog 1440×900, pos 1440×810) против сдвига вёрстки.
Что НЕ сделано / частично и почему
- Зоны нажатия инлайновых ссылок в предложениях (например «офертой»/«политикой» в форме, отдельные «Подробнее →») не раздувал до 44 px — это текст внутри абзаца, увеличение ломает поток; основные интерактивные элементы (меню, кнопки, ссылки футера) подняты до ≥ 40–44 px.
- «Популярный» на /pricing у «Бизнес» не добавлял (есть на главной) — косметическая рассинхронизация, не влияет на факты.
- Формулировка «до 10 сотрудников» (главная) vs минимум 5 в конструкторе — оставлена («до 10» — верхняя граница, не ложь).
Нужно решение владельца
- Способы оплаты подписки — реальные методы не определены в продукте; в KB поставил «уточняется / по счёту — свяжитесь с нами». Нужно задать фактические способы.
- Приём платежей конфигурации при регистрации — сервер
/api/auth/signupне принимает shops/cashes/warehouses/employees. Нужно решение: расширять ли контракт, чтобы тариф/объём фиксировались при регистрации (сейчас параметры показываются и уходят в запрос, но игнорируются). - Юридические документы /legal/ и контакты* — НЕ трогались (решение владельца): видны плейсхолдеры «[НАЗВАНИЕ ТОО]», «[БИН]», телефон «+7 (___)», пометка «подлежит правовой экспертизе». Из формы регистрации пользователь соглашается с офертой и политикой ПДн — т.е. эти документы с плейсхолдерами ему предъявляются. Нужны реквизиты/экспертиза.
- Налоги: оферта 6.3 «с учётом всех налогов»; в FAQ оставлена фраза про счёт-фактуру «с НДС или без» (режим налогообложения клиента) — формально не противоречит, но при желании свести.
- Скидки за предоплату / платные консультации — убраны как неподтверждённые; вернуть, если такие условия реально есть.