Демонстрационный проект на современном стеке: продуктовый лендинг сервиса бронирования переговорных, полностью на двух языках (русский и английский).
Задача: показать, как выглядит лендинг, который одинаково хорошо работает для поисковиков и для людей — быстрый, с честной семантикой и рабочим интерактивом, а не с картинками вместо блоков.
Стек: Astro 5, TypeScript в строгом режиме, Tailwind CSS 4. Сайт собирается в статику, но с полноценными интерактивными компонентами.
Сделано: маршрутизация по языкам с hreflang и canonical, переключатель языка, залипающая шапка, мобильное меню, аккордеон вопросов с корректной доступностью, модальное окно с формой и возвратом фокуса, страница 404, метатеги и Open Graph, автоматическая публикация через GitHub Actions. Все тексты вынесены в словари — новый язык добавляется одним файлом.
Живая версия: https://ryabininam8605-bit.github.io/astro-landing-demo/ (английская — /en/).
Исходный код открыт, с документацией: https://github.com/ryabininam8605-bit/astro-landing-demo
JavaScript на странице — около трёх килобайт, никаких тяжёлых фреймворков. Такой подход использую для лендингов и корпоративных сайтов, где важны скорость загрузки и передача проекта другому разработчику без боли.