Сделано за вас
Поиск, модели, приложение на телефоне, роботы и карта сайта, изображения — что проект уже делает без вас.

Всё на этой странице уже построено и работает. Она существует, чтобы вы видели, что ваш проект делает без вашего участия, — и могли проверить любое из этого сами.
Статическая генерация
Публичные страницы собраны заранее и отдаются как файлы — практически с нулевой нагрузкой на сервер. Динамическая страница считается заново на каждый заход: мультиязычный сайт со ста страницами и десятью языками пересчитывает тысячу вариантов для каждого посетителя, и рост посещаемости превращается в рост счёта.
Сделать статику намного труднее, чем динамику, и трудность односторонняя: любой шаг «на минуту» ведёт от статики к динамике, обратно — никогда. Достаточно чтения куки, заголовка запроса или проверки сессии в макете, и весь слой под ним становится динамическим — молча, без ошибки. Отдельная ловушка ждёт в момент, когда в проект добавляют приватные страницы: раз динамический слой всё равно появился, кажется проще держать динамическими и остальные. Известны счета в десятки тысяч долларов, выросшие ровно из нескольких таких строк.
Поэтому правило закреплено машиной, а не договорённостью. Публичные и приватные страницы лежат в физически разных слоях, а проверка обходит весь публичный слой и ищет признаки динамики — при находке сборка останавливается. Не предупреждение и не запись в журнал: выпуск не состоится, пока нарушение не убрано. Чек-лист исполняется, пока о нём помнят; первая же правка «на минуту» вернула бы динамику, и узнали бы об этом по счёту.
Поиск
Многоязычность с современной поисковой оптимизацией и устанавливаемым приложением — это обычно долгий цикл разработки. И это ровно та часть, которую проекты, написанные с помощью ИИ, теряют незаметно: страницы из заранее собранных превращаются в пересчитываемые на каждый заход, переводы начинают читаться как копии друг друга, и половина языков до поиска не доходит.
Языковые сигналы стоят на каждой публичной странице: она объявляет оригиналом себя, называет свои переводы на всех включённых языках и добавляет x-default для тех, кого вы не покрываете. Без этого поисковик читает переводы как копии друг друга, и целые языки до выдачи не доходят — при том что сайт выглядит совершенно исправным.
Модели
То же сделано для читателя, о котором вспоминают последним, а приходит он уже сегодня, — для модели. Она приходит сама, читает и пересказывает ваш сайт своими словами, поэтому проект публикует машинную карту себя и чистую markdown-версию каждой страницы, собранную из того же текста: разойтись они не могут.
Роботы и карта сайта
Роботам отвечают поимённо — отдельно поисковым, отдельно моделям, — и каждая карта объявлена им в первом же файле, который они открывают. В карте главная, каталог, блог и каждая статья на всех включённых языках; страниц за входом в ней нет никогда: у каждого посетителя они свои, и поисковик получил бы форму входа.
Приложение на телефоне
Ваш сайт ставится как приложение: свой значок на экране, запуск без браузерной обвязки, уже виденные страницы открываются без сети. Офлайн-копия никогда не подменяет живой сайт — пока сеть есть, страница всегда приходит из сети, поэтому текст, изменённый в панели, виден сразу.
Изображения
Страница приходит с картинкой ВНУТРИ себя: в разметку вписана крошечная размытая копия изображения, около 150 байт, — отдельного запроса за ней нет, и посетитель видит форму и цвета будущей картинки в ту же миллисекунду, что и заголовок. Место под неё занято заранее, по её настоящим размерам, поэтому текст не прыгает, когда файл доезжает. Настоящая картинка приходит следом и заменяет размытую сама.
Это не украшение, а две из трёх величин, которыми поисковик измеряет вашу страницу: прыжок вёрстки при загрузке и время появления самого крупного элемента экрана — им чаще всего и оказывается картинка. Телефон при этом не качает файл, рассчитанный на большой монитор: нужные размеры делаются из одного оригинала по требованию, формат подбирается под браузер, а всё, что ниже первого экрана, грузится только когда посетитель до него дойдёт. Работает и с выключенным JavaScript.
Данные
У проекта уже есть четыре хранилища, и все они на вашем сервере: база строк, склад файлов, векторная память для поиска по смыслу и граф знаний для вопросов о связях. Ни одно из них не нужно поднимать, настраивать или где-то регистрировать. Схему данных вы не проектируете никогда: новая таблица объявляется одной строкой и появляется во всех средах сама, без файлов миграций и без состояния «на сервере новее, чем локально».
Здесь нет ступени, на которой бесплатное становится платным, а потом — оплатой за каждый запрос и гигабайт. Данные стоят ровно столько, сколько стоит ваш сервер, сколько бы обращений к ним ни было; всплеск посещаемости превращается в нагрузку на уже оплаченный процессор, а не в счёт. Вырастете — возьмёте сервер побольше: цена растёт линейно, а данные переезжают вместе с вами, потому что это файлы. И мы тратим этот сервер бережно: публичные страницы собраны заранее и в базу не ходят, ответы кешируются со сроком, список берётся одним запросом на страницу, а не одним на строку.
Авторизация
Вход, учётные записи и разграничение доступа работают с первой минуты и не стоят ничего: облачный сервис входа не подключается, ежемесячной платы за активных пользователей нет. Почта и пароль работают без настройки; вход по ссылке из письма и через Google включаются вводом ключей в панели — код для них написан. Библиотека, на которой всё построено, поддерживает более восьмидесяти провайдеров: их подключение — правка одного файла, самостоятельно или с нашей помощью.
Самое ценное здесь незаметно: роли уже прикреплены к маршрутам. Чтобы страница была доступна только нужным людям, её не надо защищать — достаточно построить её на существующем маршруте, и доступ окажется у владельцев роли сам. Слоёв четыре: личный кабинет, сотрудники, финансы, администрирование; первый зарегистрировавшийся получает все роли сразу. На скорость это не влияет: публичные страницы собраны заранее и о входе не спрашивают вовсе.
Дизайн-система
Никто не решает сделать сайт разнородным — расхождение накапливается по одной безобидной правке. Здесь заголовок чуть крупнее, там отступ чуть меньше, на третьей странице скругление побольше. Каждое решение по отдельности разумно, и ни одно не выглядит ошибкой.
Дальше начинается главное, и оно касается именно разработки с ИИ: агент читает существующий код как образец. Пока способ описать заголовок один, он его повторяет. Как только способов стало три, агент делает безупречный с его точки зрения вывод — единого правила здесь нет, значит можно как удобно, — и каждая новая страница добавляет четвёртый. Чем больше вы разрабатываете, тем быстрее идёт расхождение. В этом проекте оно закрыто примитивами, токенами и четырьмя машинными законами, которые стоят в сборке: нарушение не попадает в продукт, а останавливает выпуск.
Работает с выключенным JavaScript
Страницы приходят с сервера готовым HTML, а ссылки — обычные ссылки, поэтому сайт читается и листается при отключённых скриптах. Это не преимущество перед динамическим приложением, и интерактивные части при этом деградируют; но если у вас информационный сайт, посетители могут спокойно им пользоваться в любых условиях, включая те, где скрипты им запрещены.
Во что это обходится
Здесь это построено, многократно проверено и держит нагрузку без роста расходов на сервер: заранее собранная страница стоит одинаково и на сотне визитов, и на сотне тысяч.
Поэтому единственное, что остаётся вам, — выбор языков. Что бы вы ни выбрали, строить здесь больше нечего.