# WEB BOGDANOV — собственный аудит и выпуск R1

**Статус:** собственный проект WEB BOGDANOV, не клиентский кейс.  
**Дата:** 17 сентября 2026.  
**Объект:** https://web-bogdanov.ru/  

## Задача

Проверить собственный сайт по тем же правилам доказательности, которые предлагаются клиентам: зафиксировать исходное состояние, отделить факт от гипотезы, сформулировать проверяемые изменения, внедрить их через контролируемый релиз и повторить проверку на production.

## Исходные подтверждённые проблемы

1. На мобильном не было полноценного доступного меню.
2. На узком экране присутствовал скрытый горизонтальный выход содержимого.
3. Две пары текста/фона не проходили целевой порог контраста обычного текста.
4. На странице первичного разбора прямые контакты находились слишком поздно.
5. Типовой OG-адрес части услуг возвращал 404.
6. `page_view` и `contact_click` были предусмотрены в аналитической модели, но не отправлялись как единый рабочий контракт.
## Что изменили

- добавили мобильное меню на native dialog с Escape и возвратом фокуса;
- исправили shrink/reflow для узких экранов вместо маскировки одним `overflow-x`;
- скорректировали проблемные цветовые пары;
- подняли Telegram, VK, email и телефон в начало `/razbor/`;
- перевели типовые страницы на стабильное OG-изображение `/images/og-default.png`;
- ввели контракт аналитики `r1-2026-09-17`;
- реализовали `page_view`, `contact_click` и `article_to_service`;
- после первого релиза нашли остаточный hidden overflow на 320 px и выпустили отдельный hotfix.

## Как проверяли

Изменения прошли TypeScript, lint, контрактные тесты, production build, Runtime Smoke, backup/restore smoke, подготовку immutable release и штатный production deploy.

После публикации повторно проверены 320, 360, 390 и 768 px. Для `/razbor/` и страницы проектирования ширина документа совпадает с viewport; мобильное меню открывается, переводит фокус на первый пункт, закрывается Escape и возвращает фокус на кнопку.
## Проверяемые результаты

- 320 px: `htmlScrollWidth = 320`, `bodyScrollWidth = 320`;
- 360 px: `360 = 360`;
- 390 px: `390 = 390`;
- 768 px: `768 = 768`;
- mobile menu: `aria-expanded` меняется `false → true → false`;
- после Escape активным снова становится trigger меню;
- OG-файл отвечает `200`, `Content-Type: image/png`, размер 53 208 байт;
- проверенные контрастные пары ≈4.58:1 и ≈4.67:1;
- на production `window.ym` определён как функция;
- `dataLayer` содержит `page_view` и тестовый `contact_click` с версией `r1-2026-09-17` и без email/телефона в параметрах.

## Что этот материал доказывает

Он показывает способность пройти полный инженерный цикл: наблюдение → ограничение вывода → задача → код → автоматические проверки → релиз → production-проверка → исправление остаточного дефекта.

## Чего он не доказывает

Это не клиентский кейс и не доказательство роста трафика, заявок или продаж. Приём целей внутри авторизованного отчёта Яндекс Метрики в этом цикле не подтверждён. Реальные Safari/iPhone и NVDA/VoiceOver остаются отдельной проверкой доступности.
