РИТМ / ПЕРЕДАЧА ПРОЕКТА
Материалы,
расчёт и проверка.
Объём
Один содержательный URL с якорями «Цены», «Мастера», «Работы», «Как найти»; две служебные страницы и состояние 404. Шесть услуг, три мастера, шесть фотоисторий с двумя ракурсами, три объявления и шесть ответов FAQ. 17 уникальных созданных изображений, схема входа и локальные шрифты Oswald и Golos Text.
Редактирование
Исходники находятся в ops/examples/ritm/. Справочник data.json отдельно хранит услуги, мастеров, работы, объявления и FAQ. Стабильные идентификаторы связывают работу с услугой и мастером. Измените текст, цену или длительность в справочнике, затем выполните node ops/examples/ritm/build.mjs. Команда обновит HTML и реестр контента. Стоимость в прайсе, записи и объявлениях берётся из одного справочника; в текстах объявлений для цены используются подстановки вида {{price:combo}}. После изменения изображений обновите materials.json и проверьте подписи и alt.
Цена и время
Цена равна стоимости выбранной услуги и одинакова у всех мастеров. Скидок и доплат в демонстрации нет. Время окончания = время начала + длительность из справочника. Число резервируемых получасовых интервалов = длительность / 30: один, два или три. Комплекс 2 500 ₽ длится 90 минут и занимает три последовательных интервала.
Календарь
Часовой пояс — Москва, как и в Казани. Диапазон — текущий день плюс 13 следующих. Часы 11:00–21:00, понедельник закрыт. Прошедшее время текущего дня не выбирается. У каждого мастера два искусственно занятых периода: 12:00–13:00 и 16:00–17:00 у Артёма; у Ильи они сдвинуты на 30 минут, у Дениса — на час. На пятом дне диапазона все мастера искусственно заняты двумя периодами 11:00–16:00 и 16:00–21:00: это пример пустой выборки. Выбор «Любой мастер» назначает конкретного доступного мастера. Резерв хранится только в памяти вкладки и исчезает при обновлении.
Форма
Сначала услуга, мастер, дата и время, затем вымышленное имя и контакт. Контакт принимается только в доменах .test и .example. Ввод сохраняется при ошибке и смене услуги; несовместимый слот сбрасывается с пояснением. Переключатель ошибки сети управляет демонстрационным отказом, не выполняя запрос. Результат явно сообщает, что заявка не отправлена.
Публикация
Сайт обслуживается отдельной конфигурацией Nginx и отдельным статическим релизом в /var/www/studio/portfolios/ritm/releases/, активный релиз выбирает симлинк current. Backend и база данных не нужны. Все ресурсы имеют префикс /ritm/. Индексация закрыта метатегом и HTTP-заголовком X-Robots-Tag. Исходники включают конфигурацию Nginx и скрипт публикации с блокировками общей интеграции и проверкой предыдущего релиза.
Целевая проверка, 04.10.2026
Пройдены четыре проверки расчёта календаря и 26 браузерных проверок. Ширины 360, 390, 768 и 1440 px: горизонтального переполнения нет. Проверены заполненная и невалидная форма, искусственная ошибка с повтором, отсутствие времени, смена услуги, назначение мастера, два ракурса работы, подстановка услуги и три интервала комплекса. Главный сценарий завершён клавиатурой; фокус остаётся в панели и возвращается после Escape. Отдельно пройден сценарий эмулируемого касания. Это не проверка на физическом телефоне и не подтверждение полевых Core Web Vitals.
Проверка опубликованной версии: 48 страниц и ресурсов ответили HTTP 200; отдельная 404-страница вернула HTTP 404. Карточка с пятью кадрами открывает сайт, прямая перезагрузка работает. Все ответы демонстрации содержат noindex. Лабораторный мобильный профиль 390 × 844 px, пустой кеш, сеть 1,6 Мбит/с, задержка 150 мс и процессор ×4: LCP 788 мс, CLS 0,0001, максимальная наблюдавшаяся длительность взаимодействия 56 мс. Это один лабораторный замер, полевой INP не измерен.
Открыть сайт ↗