Главная
https://wildrussia-demo.id0.it/- Performance
- 100
- Accessibility
- 100
- Best Practices
- 100
- SEO
- 100
- TTFB
- 0 мс
- FCP
- 0,9 с
- LCP
- 1,2 с
- Speed Index
- 0,9 с
- TBT
- 0 мс
- CLS
- 0
10 июля 2026, 06:37 GMT+3
О проекте
Демо создано для вакансии разработчика нового сайта WildRussia. Ниже перечислено только то, что реализовано в текущем репозитории.
Главный результат оптимизации
Официальные отчёты Google для развёрнутого демо подтверждают скорость главной страницы и SSR-каталога в режиме Slow 4G.
https://wildrussia-demo.id0.it/10 июля 2026, 06:37 GMT+3
https://wildrussia-demo.id0.it/catalog/10 июля 2026, 06:29 GMT+3
Это лабораторные mobile-замеры Lighthouse 13.4.0 на эмуляции Moto G Power и Slow 4G. CrUX пока не показывает field data: у нового демо недостаточно реального пользовательского трафика.
01
Список сгруппирован по владельцам и пользовательским сценариям.
apps/web · /
Статический Astro-маршрут Основной HTML формируется во время сборки без обязательной клиентской гидратации всей страницы.
Быстрый подбор тура Форма передаёт в каталог поисковую строку, формат путешествия и месяц через URL-параметры.
Автодополнение поиска Подсказки собираются из названий, направлений, стран и типов путешествий текущего каталога.
Популярные маршруты Карточки строятся из тех же fixtures и web-проекций, что используются каталогом.
Оптимизированный первый экран Hero-изображение имеет явные размеры, responsive-набор и высокий приоритет загрузки.
apps/web · /catalog/
SSR-выдача Начальный список фильтруется на сервере по URL запроса и присутствует в HTML до запуска Vue.
Полнотекстовый поиск Поиск работает по названию, описанию, направлению, стране и форматам путешествия.
Многопараметрические фильтры Реализованы направление, страна, тип тура, месяц, сложность и диапазон длительности.
Предсказуемая логика комбинаций Значения внутри одной группы объединяются через OR, разные группы — через AND.
Сортировка Доступны ближайшая дата, название, длительность и цена, а также направление сортировки.
URL как состояние Фильтры, поиск, сортировка и страница сериализуются в URL и восстанавливаются после загрузки.
Активные фильтры Выбранные значения показываются отдельными тегами; каждый тег можно снять независимо или очистить всё.
Пагинация Astro BFF отдаёт страницы по 24 маршрута, валидирует page/pageSize и ограничивает выход за диапазон.
Асинхронная загрузка Повторные запросы отменяются через AbortController; предусмотрены loading, empty и error states.
Responsive-изображения BFF подготавливает отдельную web-модель карточки и метаданные изображений, не меняя доменный Tour.
apps/web · /tours/[slug]/
Статические страницы Для каждого тура создаётся отдельный маршрут через getStaticPaths.
Основные факты На странице показаны страна, направление, форматы, длительность, сложность, даты и цена, если они есть.
Программа по дням Маршрут отображается последовательным timeline из доменного itinerary.
Состав тура Отдельно выводятся включённые и исключённые услуги.
Оптимизация медиа Локальные изображения обрабатываются Astro Picture в AVIF/WebP с responsive widths.
Форма заявки Vue-форма гидратируется в idle, проверяет поля и отправляет данные типизированным Eden-клиентом.
152-ФЗ Без явного согласия на обработку персональных данных форма не отправляется; ошибки API выводятся пользователю.
packages/catalog-data + apps/api
Парсер исходного сайта Cheerio извлекает данные тура из публичного HTML WildRussia.
Единый Tour-контракт Zod-схема валидирует slug, контент, даты, цену, сложность, itinerary, медиа и SEO-поля.
Fixtures Сгенерированные записи объединяются с curated-данными и повторно валидируются при импорте.
Общая доменная логика Фильтрация, сортировка, facets и разбор query принадлежат catalog-data и не копируются в API или web.
Elysia API Реализованы health, facets, список туров, тур по slug и приём заявки.
Типизированный клиент Browser-вызовы Elysia проходят через Eden Treaty; прямые raw fetch к API запрещены архитектурной проверкой.
Boundary validation Некорректные query/body получают 400 с путём проблемного поля; неожиданные response errors скрываются за безопасным 500.
Защита персональных данных API не возвращает и не логирует исходный e-mail заявки; в подтверждении используется маска.
apps/web · build/runtime
Технические метаданные BaseLayout формирует title, description и canonical для каждой страницы.
Индексируемые маршруты robots.txt и sitemap.xml содержат главную, каталог и статические карточки туров.
Структурированные данные Карточка тура публикует JSON-LD типа TouristTrip с описанием и itinerary.
Минимальный JavaScript Статический HTML используется по умолчанию; интерактивность подключается отдельными Vue islands.
Шрифты и изображения Golos Text поставляется локально, изображения имеют размеры, responsive sources и современные форматы.
Детерминированный Lighthouse gate Production build проверяется в чистом профиле Chrome; главная, каталог и карточка тура должны получить 100 во всех четырёх категориях.
repository + runtime
pnpm-монорепозиторий Web, API, catalog-data, style-system и общие конфигурации разделены по владельцам.
Presentation BFF Каталог получает paginated web DTO через /catalog/routes.json; этот DTO не подменяет доменный Tour.
Style system Lism используется только как reset; проект владеет токенами, слоями, primitives и product-компонентами.
Архитектурные проверки Скрипты контролируют CSS layers, raw values, selector ownership, API-клиент и порядок стилей в production build.
Автоматические тесты Покрыты scraper, фильтры, API validation, API/BFF parity, pagination, response guards и proxy boundary.
Production runtime Web и API собираются отдельными Dockerfiles; web проксирует /api и предоставляет health endpoint.
02
Доменная логика остаётся в catalog-data; транспортные и presentation-слои её только вызывают.
wildrussia.travel HTMLИсходная публичная разметка.scraper.ts + ZodПарсинг, нормализация и проверка.packages/catalog-dataFixtures, Tour, query, facets, filters и sorting.apps/api / Astro BFFElysia API для доменных данных и заявок; BFF для paginated web DTO.Astro + Vue islandsHTML страниц и локальная интерактивность каталога и форм.03
Основные публичные поверхности текущего демо.
//catalog//catalog/routes.json/tours/[slug]//api/[...path]/health/health/api/facets/api/tours/api/tours/:slug/api/leads04
Команды, которые формируют текущий release gate.
pnpm lint:stylepnpm lintpnpm lint:architecturepnpm typecheckpnpm testpnpm buildpnpm perf:audit