# Исправления публичного сайта 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 оставлена фраза про счёт-фактуру «с НДС или без» (режим налогообложения клиента) — формально не противоречит, но при желании свести. - **Скидки за предоплату / платные консультации** — убраны как неподтверждённые; вернуть, если такие условия реально есть.