Сайт за день: как мы запускаем новый сайт по нескольким ответам
Каждый новый сайт начинался с одного и того же дня подготовки: скопировать старый проект, всё переименовать, настроить языки, юридические страницы и выкладку. Мы превратили этот день в короткий список вопросов, а для компаний из нашей CRM не нужны даже вопросы.
Задача
Небольшому бизнесу нужен сайт, который быстро открывается, говорит на языках его клиентов, содержит юридические страницы, которых требует испанский закон, и правильно показывается в поиске. Ничего из этого не уникально для одного клиента, и всё же каждый проект начинался одинаково: скопировать последний сайт, везде поменять название, убрать лишнее, настроить языки, вручную написать выкладку и надеяться, что от прошлого проекта ничего не осталось.
Мы хотели, чтобы первый день проекта уходил на содержание и дизайн клиента, а не на подготовку. Поэтому сделали три вещи: генератор, который создаёт готовый проект по нескольким ответам, библиотеку компонентов, из которой собирается каждый сайт, и способ дать компаниям из нашей 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 готовы и работают на демонстрационной компании, подключение оконных компаний только начинается.




