Сайт за день: как мы запускаем новый сайт по нескольким ответам

Каждый новый сайт начинался с одного и того же дня подготовки: скопировать старый проект, всё переименовать, настроить языки, юридические страницы и выкладку. Мы превратили этот день в короткий список вопросов, а для компаний из нашей CRM не нужны даже вопросы.

Смотреть проект:
astro-ui.dev.yatoday.es
astro-ui.dev.yatoday.es
Сайт за день: как мы запускаем новый сайт по нескольким ответам - Сайт

Задача

Небольшому бизнесу нужен сайт, который быстро открывается, говорит на языках его клиентов, содержит юридические страницы, которых требует испанский закон, и правильно показывается в поиске. Ничего из этого не уникально для одного клиента, и всё же каждый проект начинался одинаково: скопировать последний сайт, везде поменять название, убрать лишнее, настроить языки, вручную написать выкладку и надеяться, что от прошлого проекта ничего не осталось.

Мы хотели, чтобы первый день проекта уходил на содержание и дизайн клиента, а не на подготовку. Поэтому сделали три вещи: генератор, который создаёт готовый проект по нескольким ответам, библиотеку компонентов, из которой собирается каждый сайт, и способ дать компаниям из нашей CRM сайт, который сам собирается из их профиля.

Новый проект за десять вопросов

Генератор - небольшая консольная программа. Она спрашивает название проекта, отображаемое имя, адрес боевого сайта, языки (например, “es, en, ru”) и какой из них основной, нужен ли блог и как настроить репозиторий.

По этим ответам получается рабочий проект:

  • Название сайта, адрес и идентификатор проекта уже прописаны в настройках, заголовках страниц, юридических страницах, файле выкладки и самом пакете - переименовывать вручную ничего не нужно.
  • В проекте остаются только выбранные языки. У сайта на одном языке простые адреса без языкового префикса, у многоязычного - своя версия для каждого языка. Примеры статей на языках, которых у сайта нет, удаляются, чтобы первая сборка не упала из-за отсутствующего языка.
  • Так же остаются только нужные функции: если блог не нужен, его страницы, утилиты и папка с материалами удаляются, а не прячутся.
  • Репозиторий готов сразу. Программа создаёт git-репозиторий, ставит зависимости до первого коммита, чтобы lock-файл совпадал, и может создать закрытый репозиторий в нашем GitLab и отправить туда первый коммит.

Видео в начале страницы - настоящий запуск: десять ответов, после чего новый сайт за несколько секунд собирает 42 страницы на испанском, английском и русском.

С чего начинается каждый новый сайт

Шаблон, на котором работает генератор, - это полноценный сайт на Astro, а не пустая папка:

  • Три языка с первого дня: переключатель языков, ссылки hreflang и карта сайта.
  • Юридические страницы для Испании: правовое уведомление, политика конфиденциальности и политика cookie, уже заполненные названием и адресом сайта.
  • Баннер cookie, совместимый с Google Consent Mode, с возможностью хранить запись о согласии на нашей платформе.
  • Блог в двух режимах: статьи файлами внутри проекта или публикации из платформы Yatoday.
  • Подготовленная аналитика для Google Tag Manager или Google Analytics: включается добавлением идентификатора в настройки.
  • Светлая и тёмная темы, переключатель можно показать или скрыть.

Выкладка без лишней работы

В каждом созданном проекте есть свой конвейер GitLab CI. Пуш в основную ветку ставит зависимости, собирает сайт и публикует его на Cloudflare Pages; если проекта в Pages ещё нет, конвейер его создаёт. Git-хук поднимает номер версии перед каждым пушем в основную ветку, а сборка показывает этот номер на сайте - всегда видно, какая версия сейчас опубликована.

Одна библиотека компонентов для всех сайтов

Шапки, первые экраны, сетки преимуществ, карточки, галереи, слайдеры, отзывы, вопросы и ответы, шаги, подвалы, баннер cookie и карта - всё это берётся из нашей собственной библиотеки @yatoday/astro-ui: около 60 компонентов для Astro и Tailwind CSS. Секции во всю ширину ставятся на страницу как есть, а блоки поменьше - внутрь обёртки, которая задаёт ширину.

Раз все сайты собраны из одних и тех же компонентов, исправление или улучшение доступности, сделанное один раз, попадает во все сайты с обновлением версии. Библиотека открыта под лицензией MIT, публикуется в npm и описана на собственном сайте документации, где каждый компонент показан вживую рядом с кодом, который его выводит. Каждый релиз автоматически собирается и публикуется в npm из GitHub, а сайт документации заново выкладывается из основной ветки.

Сайты, которые собираются из CRM

Быстрее всего запускается сайт, который никому не нужно настраивать вручную. Оконные компании, работающие в Estimia - нашей SaaS-платформе и CRM для этой отрасли, - ведут там профиль в каталоге: описание, услуги, бренды, которые они ставят, регионы работы, фотографии готовых объектов, отзывы, частые вопросы и контакты.

Для таких компаний у генератора есть второй режим, в котором он ничего не спрашивает. По идентификатору компании он проверяет, что для неё подключён собственный сайт, берёт из CRM название и домен и создаёт проект из шаблона для оконных компаний на испанском, английском и русском. Затем прописывает переменные сборки в GitLab и создаёт триггер пересборки.

Своего содержимого у такого сайта нет. Во время сборки он читает профиль компании из CRM и превращает его в страницы: первый экран с фотографией и рейтингом компании, услуги, бренды и регионы, галерея работ, отзывы, частые вопросы и блок контактов с картой. Логотип и фирменный цвет компании применяются к оформлению. Конвейер публикует сайт на Cloudflare Pages и подключает собственный домен компании вместе с DNS-записью.

Дальше сайт сам поддерживает себя в актуальном состоянии. Когда компания меняет профиль в CRM, CRM сбрасывает закешированную копию этого профиля и вызывает триггер; конвейер запускается снова, и сайт публикуется с новыми данными. Страницы при этом остаются обычным статическим HTML: пока посетитель на сайте, к CRM никаких запросов нет. В админке CRM команда видит состояние проекта Cloudflare и домена каждой компании.

Технологии

- Генератор: консольная программа на Node.js + TypeScript (prompts, simple-git, API GitLab)
- Сайты: Astro (статическая сборка), Tailwind CSS 4, Svelte 5
- Компоненты: @yatoday/astro-ui (открытый код, MIT, публикуется в npm)
- Сайты из CRM: публичный API мини-сайтов Estimia, задача в очереди Laravel для пересборки
- CI/CD: GitLab CI → Cloudflare Pages (wrangler), собственные домены через API Cloudflare

Результат

Подготовка нового сайта теперь - это список ответов, а не день копирования и переименований. Каждый проект сразу получает три языка, юридические страницы, баннер cookie, блог, карту сайта и рабочую выкладку и собирается из тех же проверенных компонентов, что и остальные наши сайты. Для оконных компаний в CRM сайт становится побочным продуктом профиля, который они и так ведут, и обновляется сам, когда они его меняют.

Статус: генератор, шаблон и библиотека компонентов - это то, на чём мы делаем свои сайты; мини-сайты из CRM готовы и работают на демонстрационной компании, подключение оконных компаний только начинается.

Похожие кейсы

Бэкенд для статических сайтов: блог, отзывы, оплата и личный кабинет без потери скорости

Бэкенд для статических сайтов: блог, отзывы, оплата и личный кабинет без потери скорости

Статический сайт быстрый и дешёвый в обслуживании, но у него нет админки, нет оплаты и негде хранить отзывы. Мы сделали один бэкенд, который добавляет всё это любому нашему сайту, а сами страницы остаются заранее собранным HTML.

SEO на всю Испанию: провинции, иностранцы, премиум-проекты и каталог профилей

SEO на всю Испанию: провинции, иностранцы, премиум-проекты и каталог профилей

Оконной компании, работающей по всей Испании, нужно, чтобы её нашли и семья из Теруэля, и британский владелец дома на Коста-Бланке, и архитектор с проектом виллы, - а вопросы у них разные. Мы сделали страницы для каждого из них, полезные сами по себе, и каталог, который читают и поисковики, и ИИ-ассистенты.

Ventanas Fraktal: 700+ страниц с мультиязычным SEO

Ventanas Fraktal: 700+ страниц с мультиязычным SEO

Полноценный каталог с десятками продуктов, техническими характеристиками, тремя языками и региональными страницами под каждую провинцию Испании. 700+ страниц на статической генерации с мгновенной загрузкой.

ИИ-наполнение каталога: переводы, описания и SEO-тексты только из фактов карточки

ИИ-наполнение каталога: переводы, описания и SEO-тексты только из фактов карточки

Каталог из тысяч технических товаров приходит на одном языке, с неровными описаниями и без SEO-текстов. Хаб за магазином Ezeden заполняет пробелы с помощью ИИ - но только из фактов, которые уже есть в каталоге, по цене, которую менеджер видел заранее, и с проверкой человеком там, где это важно.