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>
76 lines
8.9 KiB
Markdown
76 lines
8.9 KiB
Markdown
# Исправления публичного сайта 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)
|
||
|
||
1. **/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), остальные поля
|
||
игнорирует** — см. раздел «нужно решение владельца».
|
||
2. **Мобильная шапка (≤ lg).** Добавлены гамбургер + выезжающая панель со ВСЕМИ пунктами
|
||
десктоп-меню и кнопками «Войти»/«Начать бесплатно». `aria-expanded`/`aria-controls`,
|
||
закрытие по тапу вне и по Esc, доступно с клавиатуры; зоны нажатия ≥ 44 px. Проверено на
|
||
390 px: меню открывается, тап по «Тарифы» ведёт на /pricing, горизонтальной прокрутки нет.
|
||
3. **og/twitter-картинки** перегенерированы (`scripts/og.mjs` → `public/og/*`): из home убрано
|
||
«ОФД РК», в import «REST API» → «Excel, CSV, 1С, МойСклад», из for-grocery убран «ABC-анализ».
|
||
4. **База знаний и блог — убраны обещания несуществующего** (сверено с «В разработке» на главной
|
||
и /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 убраны.
|
||
5. **/import**: чужой английский HR-скриншот (`/photos/import-hero.jpg`) заменён на реальный
|
||
скриншот каталога продукта (`/screenshots/catalog.webp`).
|
||
6. **Рендер /kb/***: тело статей было завёрнуто в ```` ```markdown ```` с дублирующим front-matter
|
||
и вторым `#`-заголовком → показывалось сырым моноширинным текстом. Развёрнуто: front-matter
|
||
не виден, markdown рендерится, заголовок один. Проверены все /kb/* и /blog/* (блог был чист).
|
||
7. **Аналитика**: убраны заглушки `data-id="REPLACE_ME"` (Google/Яндекс.Метрика) — скрипты
|
||
подключаются только при реальных `PUBLIC_GA_ID`/`PUBLIC_YM_ID`, иначе в HTML ничего нет.
|
||
8. **robots.txt**: `Sitemap:` → рабочий `/sitemap.xml` (был 404 `/sitemap-index.xml`).
|
||
9. **Противоречия сведены** к оферте (она главнее): удаление данных — 30 дней (было 30/60 в KB);
|
||
возврат — по письменному заявлению в случаях по закону РК (убрано «14 дней без обоснования»);
|
||
«Старт без лимита пользователей» → «до 2 сотрудников» (как на /pricing). Дубль в футере
|
||
«Дорожная карта»/«Changelog» (один URL) — убран, остался «Changelog». /status «Касса
|
||
(Windows) — в разработке» → «Скоро» (согласовано с «Скачать · скоро»).
|
||
10. **Мелочи**: зоны нажатия — ссылки футера `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 оставлена фраза про счёт-фактуру «с НДС
|
||
или без» (режим налогообложения клиента) — формально не противоречит, но при желании свести.
|
||
- **Скидки за предоплату / платные консультации** — убраны как неподтверждённые; вернуть, если
|
||
такие условия реально есть.
|