Лаборатория архитектуры AI
Сайт и публикация

Сайт, собранный ИИ

Этот сайт собран с нейросетью. Так можно на любой платформе — на конструкторе, на движке или на своих страницах: человек говорит, что нужно, нейросеть собирает страницы. Правка занимает минуты, а не день.

Объём19 страниц из 7 проектов
Себестоимость0 ₽ · 4 391 строк кода
По рынку113 000 ₽/мес — веб-разработчик
ВердиктРаботает

Опубликовано 25.08.2026 · цифры сверены 08.10.2026

Как сделать сайт с помощью ИИ: девять шагов

  1. Тема и цель. Решите, о чём сайт и что человек должен на нём сделать: написать вам, купить, оставить заявку.
  2. Модель. Возьмите Claude, ChatGPT или Gemini. Держать сайт у себя удобнее с Claude Code или Codex, быстрый результат в браузере дают Lovable, v0 и Bolt.
  3. Вопросы к вам. Попросите: «Задай мне 10 вопросов, чтобы понять, какой сайт мне нужен, и предложи два варианта структуры».
  4. Исследование. Попросите: «Найди пять сайтов в моей теме, разбери их структуру и скажи, чего у них нет».
  5. Инструмент. Выберите, из чего собирать: под разные задачи разные инструменты, список под шагами.
  6. Первый вариант. Просите готовые страницы, а не описание, и правьте словами: «шрифт крупнее», «цены выше первого экрана».
  7. Проверка фактов. Сверьте цены, сроки, названия и телефон: модель пишет гладко, но факты путает.
  8. Домен и хостинг. Домен около 200 ₽ в год, хостинг от 200 ₽ в месяц: обычным страницам хватит самого дешёвого тарифа.
  9. Поиск. Добавьте сайт в Яндекс.Вебмастер и Google Search Console, отдайте им карту сайта и через неделю проверьте, сколько страниц попало в индекс.

Что под какую задачу

  • Визитка, портфолио, лендинг — обычные страницы HTML и CSS или конструктор с ИИ: Тильда, Craftum.
  • Блог, витрина работ, документация — сборщик страниц из ваших данных: правка в одном месте расходится по всем.
  • Интернет-магазин — готовая платформа InSales или Shopify либо Lovable: корзина, оплата и склад уже написаны.
  • Сервис со входом — Next.js с базой данных, собирать в v0, Lovable или Claude Code.

Ниже — как это сделано на самом сайте: что собрано, сколько стоило и чем пришлось заплатить.

01 · Этапы

Где проект сейчас

СделаноСборкаbuild.py, 1853 строки, без зависимостей
СделаноПроверкаcheck.py, 645 строк, 19 групп правил
СделаноГенераторarticles/, 1662 строки, восемь модулей
СделаноСтиль статейproekt.css, свои шрифты, без Google
СделаноТекстывсе семь текстов написаны, цифры сверяются
СделаноСервервыложено 27.08.2026, свой сервер и TLS

Код написан и работает. Сборка и проверка вместе проходят на этой машине за 0,31 секунды.

За последние сутки прибавился генератор статей: раньше страница проекта собиралась из markdown по одному шаблону, теперь готовая статья приходит отдельным файлом со своей схемой и своими числами.

02 · Задача

Что было нужно

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

Ограничение, из которого выросла вся конструкция: одна правка в исходнике обязана разойтись по девяти местам — реестр на главной, счётчик в чипе направления, строка «Итого», страница направления, разметка ItemList, карта сайта, llms.txt, блок «читайте также» на соседней странице и сама страница проекта. Девять мест руками не удерживаются.

МетодЧто из него взятоКаноническое имя · источник
Один хозяин у данных · single source of truthцифра, которая повторяется, лежит в src/data и попадает в текст сборкой. Число проектов считается один раз как длина спискаSingle source of truth; принцип DRYHunt & Thomas, «The Pragmatic Programmer», 1999
Разделение по проверяемости · ошибка против замечаниято, что проверяется механически, останавливает выкладку; то, что требует глаз, печатается замечанием и её не держитУровни серьёзности: ошибка останавливает, замечание нетсобственное правило лаборатории, внешнего источника нет
Громкий отказ вместо тихого · fail loudlyлишний закрывающий тег ловится разбором разметки и возвращает код 1, а не уезжает на сервер незамеченнымFail fast; ворота перед выкладкойShore, «Fail Fast», IEEE Software, 2004
Приёмка порогами · линейка задана до запускапороги записаны в check.py, а не в списке для памяти: ровно один h1 на странице, description на месте, canonical на местеПререгистрация порогов; WCAG 2.1 AA для контрастаNosek et al., PNAS, 2018 · W3C, WCAG 2.1, 2018
Точное совпадение вместо довериякарта сайта сверяется с реально существующими файлами как множество с множеством: и лишний адрес, и недостающий — обе ошибкиСверка множеств (reconciliation)собственное правило лаборатории, внешнего источника нет
Тесты на швах · шов между сборкой и серверомхэши инлайновых скриптов пересчитываются на каждой сборке и сверяются с тем, что записано в политике для nginxКонтрактные тесты на границе сборка → серверFowler, «IntegrationContractTest», 2011
Осознанные исключения с причинойпрощённая проверка живёт отдельным файлом с объяснением, а не правкой порога: так жили пять строк про контраст фирменной магенты, пока 08.09.2026 цвет не затемнилиДокументированные исключения (waivers)собственное правило лаборатории, внешнего источника нет
03 · Сборка

Как собрано

Сайт собран в паре с ИИ (Клод): в истории правок больше 280 записей, 229 из них помечены его соавторством. Человек формулирует, что должно появиться на странице, ИИ пишет разметку, стили и код сборки, человек принимает работу и решает, что выкладывать. Порядок работы от площадки не зависит — так же можно вести сайт на конструкторе или на готовом движке, меняется только место, куда ложится результат.

Конвейер линейный и односторонний: src/ читается, site/ пишется, обратной дороги нет. Сборка берёт семь проектов, шесть исследований, пятнадцать файлов данных и три страницы, создаёт 41 файл, из них 21 HTML, пересчитывает хэши инлайновых скриптов и кладёт готовую строку политики безопасности в site/csp.txt.

Дальше check.py читает уже собранные файлы, а не исходники: сверяются те самые байты, которые уедут на сервер. Ошибка возвращает код 1, и выкладка останавливается до первого скопированного файла.

Генератор статей стоит сбоку от этого конвейера. Он не участвует в сборке сайта: статья пишется один раз, кладётся в src/projects/ готовой страницей и дальше только копируется. Пределы длины ячеек он знает те же, что и проверка, — таблица на девять чисел живёт в одном файле на всех.

ИСХОДНИКИmarkdown и CSV7 проектов · 15 файлов данных · 3 страницыГЕНЕРАТОР СТАТЕЙarticles/, 1662 строкичерновик JSON → готовая страницаСБОРКАbuild.py, 1853 строки41 файл, из них 21 HTMLПРОВЕРКАcheck.py, 645 строк19 групп правил, 0,19 сошибок нетесть ошибкаВЫКЛАДКАrsync --deleteСТОПкод 1 · выкладки нетПРЕДЕЛЫ9 чисел на ячейкипунктиром — пределы длины · розовым — дверь, за которой начинается выкладка
Проверка стоит между сборкой и сервером, а не после него: ошибка возвращает код 1, и до rsync дело не доходит.

Правило, которое нельзя нарушить случайно, стоит дороже правила, о котором нужно помнить.

04 · Правила

На чём держится конструкция

Шесть правил, и ни одно не держится на договорённости: под каждым стоит проверка, которая возвращает код 1 и останавливает выкладку.

1
Один источникцифра, которая повторяется, лежит в данных и попадает в текст сборкойчисло проектов считается один раз как длина списка и расходится в разметку ItemList, счётчик чипа, строку «Итого» и llms.txt. Проверка сверяет все четыре места между собой
2
HTML руками не правитсяпапка результата перезаписывается каждой сборкойправка пункта меню — одна строка в menu.csv вместо двадцати одной страницы. Всё, что вписано в site/ руками, исчезает на следующем прогоне
3
Проверкадверь, а не совет: ошибка возвращает код 1в скрипте выкладки стоит set -euo pipefail, а проверка идёт вторым шагом, до rsync. Обойти её, не переписав скрипт, нельзя
4
Текст авторавсегда данные: значения экранируются на выходесловарь исходника отдаёт значения уже экранированными, а сырое значение берётся отдельным вызовом. Забыть экранирование можно только нарочно
5
Один внешний запросшрифты и стили свои, чужой адрес одинвосемь файлов woff2 вместо Google Fonts. Единственный чужой адрес — счётчик Метрики: он назван в данных сайта и пропущен в политике безопасности поимённо. Любой другой проверка считает ошибкой
6
Скрипт разрешается по хэшучетыре инлайновых скрипта описаны sha256хэши считает сборка и кладёт готовой строкой для nginx. Правка скрипта без пересборки заблокирует его на сервере, и проверка скажет об этом заранее
05 · Решения

Решения и основания

Решений немного, потому что почти всё, что можно было добавить, решено не добавлять. Каждое ниже отвечает на вопрос «почему тут нет» — фреймворка, базы, зависимостей, панели администратора.

РешениеОснование
Генератор на стандартной библиотекени pip, ни файла блокировки версий: Python на маке уже есть, ставить нечего. Единственная внешняя зависимость — playwright, и та стоит сбоку: её просят только браузерные замеры, сборка и обычная проверка идут без неё
Статика вместо CMSни базы, ни PHP, ни админки, ни форм. Ломать в самих страницах нечего: поверхность атаки — это сервер и nginx, а не сайт
Свой микро-markdown вместо библиотекинужны заголовок второго уровня, абзац, цитата и три подстановочных блока. Полная реализация спецификации тянет зависимость ради того, что не используется
Статья приходит готовой страницейу проекта своя схема, свои числа и своя длина текста. Общий шаблон это не удержит, а разные шаблоны в одной сборке — это две сборки
Сборка ничего не удаляетлишние файлы печатаются списком, удаление живёт за отдельным флагом. Иначе первая же ошибка в путях сносит папку результата целиком
Страница 404 вне карты сайта21 HTML-файл, 19 адресов: вне карты 404 и политика конфиденциальности. Проверка отдельно требует у 404 noindex и отдельно — чтобы её не было среди адресов карты
Прощённые проверки — отдельным файлом с причинойпять строк про контраст фирменной магенты (4,32 при норме 4,5) жили там, пока 08.09.2026 цвет не затемнили до 5,00. Порог не понижали, сейчас файл пуст
Своя проверка вместо готового линтералинтер знает про HTML, но не знает, что число проектов на главной обязано совпадать с числом файлов в исходниках
06 · Ограничения

Чем платит конструкция

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

РешениеЧем ограничивает
Статика без формнаписать с сайта нельзя: единственный обратный канал — ссылка на Telegram в подвале
Свой микро-markdownтаблица, список и вложенная цитата в теле страницы не соберутся — этих правил в разборе нет
HTML только из сборкиразовую правку одной страницы внести некуда: любое изменение проходит через исходник и полную пересборку
Статья не пересобираетсятекст живёт в готовой странице. Общая правка стиля расходится сама, а правка формулировки — только руками в файле
Политика по хэшам скриптовлюбая правка инлайнового скрипта требует пересборки и новой строки в конфиге сервера, иначе браузер его не выполнит
Разбор разметки своим парсеромловится баланс тегов и битые ссылки, но не валидность по спецификации: ошибка вложенности внутри правильно закрытых тегов пройдёт
Выкладка одним rsyncатомарного переключения нет: пока идёт загрузка, на сервере лежит смесь старой и новой версии
Один редакторсовместная правка через браузер невозможна в принципе — нужен доступ к репозиторию и Python на машине
07 · Результат

Что получилось

адресов в карте сайта19grep -c <loc> site/sitemap.xml, 08.10.2026
сборка и проверка вместе0,31 с/usr/bin/time -p, лучшее из пяти прогонов, 08.10.2026
строк кода без зависимостей4 391wc -l build.py check.py og.py sokratit.py articles/*.py
страниц опубликовано19выложено 27.08.2026, пересчитано 08.10.2026
Строки кода по файлам
build.py — сборка1853
check.py — проверка645
articles/research.py441
articles/razmetka.py340
articles/shema.py209
articles/sborka.py208
articles/dopolnit.py167
articles/predely.py161
og.py — превью160
sokratit.py71
articles/sobrat.py71
articles/kanon.py65
Раздел 13 стандарта витрины добавил в проверку сто шестьдесят пять строк. Генератор вырос 01.09.2026 на словарь канонических имён и дописывание блоков в готовые статьи. Серым — файлы короче трети сборки.
Что лежит в site/ после сборки
файлов всего611,9 МБ
создаёт сборка4167 %
из них HTML2134 %
в карте сайта1931 %
Разница между 61 и 41 — картинки для соцсетей: их рисует отдельный скрипт og.py, а не сборка. Страница 404 и политика конфиденциальности в карту сайта не входят намеренно.

Время снято 08.10.2026 на рабочей машине командой /usr/bin/time -p, лучшее из пяти прогонов; строки кода пересчитаны 08.10.2026. Всё, что относится к сборке и проверке, замерено.

Сборка 41 файла занимает 0,12 секунды, проверка собранного — 0,19. Вместе меньше трети секунды: цикл «поправил исходник — увидел весь сайт заново» короче, чем открытие панели администратора. Это и есть плата за отказ от CMS, полученная обратно.

Проверка возвращает ноль ошибок и ноль замечаний.

Достоверность результата
Выборка
Один сайт, 19 страниц, одна машина. Время сборки и проверки снято на рабочем ноутбуке; на другой машине цифры будут другими, порядок — тот же.
Разброс
Лучшее из пяти прогонов, а не среднее: замер показывает, что цикл укладывается в доли секунды, а не сколько он длится обычно.
Проверки
Строки кода пересчитывает по репозиторию скрипт obnovit-stroki.py, а не человек, и сразу в обеих языковых версиях статьи. Так 01.09.2026 выяснилось, что диаграмма называла 1148 строк сборки при 1293 в репозитории.
Не обобщается
Сравнение «по рынку» — ставка веб-разработчика по вакансиям; конструктор сайтов за 12 000 ₽ в год решает часть той же задачи и сравнивается в вопросах ниже. Обе рамки честны, но это разные рамки.
Не измерено
Скорость отдачи страниц с сервера и поведение читателя: замерены только сборка и проверка на машине автора.
Работает

Сайт опубликован 27.08.2026, сейчас 19 страниц на своём сервере, TLS, ноль внешних зависимостей у сборки. Сборка и проверка проходят за 0,31 секунды и возвращают ноль ошибок.

Повторить самому
Архитектураблок-схема выше ↑Правилашесть правил ↑Код сборкиbuild.py, 1853 строки

Кауфман Lab — лаборатория архитектуры искусственного интеллекта. Мы проектируем процессы и методологии. Код устаревает с каждым новым поколением моделей — методология нет, поэтому в проектах разбирается именно она. Собрать систему по этой схеме сможет любая современная нейросеть.

08 · Грабли

Что пошло не так

Ревизия 24.08.2026 прошла по всем страницам в светлой и тёмной теме и дала 20 находок, 17 из них закрыты в тот же день. Ниже — те, из которых выросли строки проверки: пока ошибка ловится глазами, она возвращается.

допосле126

Проектов на странице 404повторяющееся число живёт в одном месте

Лишний закрывающий тег развалил вёрстку всех шести страницраздел «Грабли», связанные проекты и подвал вываливались из колонки на всю ширину экрана. Стало правилом: баланс тегов разбирается на каждой сборке
Страница 404 обещала двенадцать проектов при шести на сайтецифра была вписана руками и осталась от старого макета. Стало правилом: повторяющееся число живёт в одном месте и сверяется во всех
Три страницы вели за кодом, которого больше нетметодология, вопросы и панель ссылались на репозиторий после того, как его закрыли. Стало правилом: внутренняя ссылка проверяется на существование файла
Ссылки «Промпт» и «Данные» вели на пустой якорьзаглушка выглядела рабочей ссылкой со стрелкой, а клик оставлял читателя на месте. Стало правилом: href="#" — ошибка, а не мелочь
Генератор резал подписи по тридцати знакамв полосе чисел оставалось «ответили на вопрос клиента и д». Стало правилом: не влезло — переписать короче, обрезать по счётчику нельзя
Реестр уезжал за экран при окне 414 pxвиновато было общее правило минимальной ширины таблицы. Стало правилом: горизонтальный скролл меряется в браузере на шести ширинах
Пункт меню правился на четырнадцати страницах сразустало правилом: то, что стоит на всех страницах, живёт одной строкой в таблице данных
09 · Возможности

Что ещё можно добавить к коду

Всё, что повторяется, лежит в src/data, а check.py стоит дверью перед выкладкой, поэтому новый блок, язык или правило добавляются строкой данных и проверкой, без переделки сборки. Ниже — что усилит сайт следующим шагом, в том числе на платных сервисах.

СкоростьБюджет скорости в дверях сборкиLighthouse CI прогоняет каждую страницу в браузере и сверяет вес, время отрисовки и доступность с заданными порогами. Порог встаёт в check.py рядом с остальными проверками. Страница, которая стала тяжелее, не уйдёт на сервер, пока её не облегчат.
НейросетиТаблица «вопрос → страница»Панель уже меряет фиксированный набор из 20 вопросов. Таблица покажет для каждого вопроса, какая страница сайта попала в ответ нейросети. Пустая клетка становится заданием на следующую статью.
ПоискПоиск по сайту без базы и сервераPagefind строит поисковый индекс во время сборки, и его файлы лежат на своём домене рядом со страницами. База, формы и чужие адреса не нужны, политика безопасности расширяется поимённо. Читатель находит проект по слову, а не листает реестр.
ВыкладкаНовая версия включается одним переключениемСборка выкладывается в новую папку на сервере, а nginx переходит на неё сменой одной ссылки. Читатель не видит смеси старой и новой версии, откат — то же переключение назад.
КомандаПравка текста из браузера через CIСборку и проверку можно запускать в CI, например GitHub Actions, на каждый коммит в закрытый репозиторий. Второй автор правит тексты и таблицы данных в веб-интерфейсе, Python на его машине не нужен. check.py держит дверь так же: с ошибкой выкладка не пойдёт.
РаздачаСтраницы из ближайшего к читателю узлаГотовые файлы без базы подходят для CDN как есть, например Yandex Cloud CDN или Selectel CDN. Сервер остаётся источником, страницы и шрифты отдаются из узла рядом с читателем. Всплеск посещений ложится на CDN, а не на свой сервер.
10 · Вопросы

Что обычно спрашивают

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

Что такое сайт с ИИ?

Сайт с ИИ — это сайт, страницы которого пишет и собирает нейросеть, а человек ставит задачу и принимает работу. Подходит студии или лаборатории, которой важно, чтобы числа на страницах сходились между собой. Сборка Кауфман Lab делает 41 файл из markdown и таблиц и сверяет их проверкой перед выкладкой. Не даёт ни панели администратора, ни форм, ни правки текста через браузер.

Сколько стоит держать такой сайт?

Денежных расходов у сборки нет: ни платных сервисов, ни подписок — только Python, который на машине уже стоит. Платить придётся за домен и сервер, и это единственная строка расходов. По рынку тот же набор возможностей закрывается подпиской: Tilda Business стоит 12 000 ₽ в год по опубликованному прайсу, и в эту цену входит редактор, которого здесь нет и не будет.

Почему сборка не удаляет лишние файлы сама?

Потому что первая же ошибка в путях снесла бы папку результата целиком. Лишние файлы печатаются списком в конце прогона, а удаление живёт за отдельным флагом --chistka, который нужно набрать руками. Такой порядок стоил одной лишней строки в выводе и снял целый класс отказов, где генератор стирает то, что не собирал.

Что мешает поправить одну страницу руками?

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

Что останавливает выкладку, если в разметке ошибка?

Проверка стоит вторым шагом скрипта выкладки, до rsync, и возвращает код 1. В скрипте объявлен set -euo pipefail, поэтому на ненулевом коде он останавливается сам, не доходя до первого скопированного файла. Обойти этот порядок, не переписав сам скрипт, нельзя: список правил и порог выкладки лежат в одном файле.

Какие внешние запросы делает сайт?

Ровно один — счётчик Яндекс.Метрики. Восемь файлов шрифтов лежат на своём домене вместо Google Fonts, картинок с чужих серверов нет. Политика безопасности начинается с default-src 'none', а инлайновые скрипты разрешены поимённо по хэшу sha256. Из чужих адресов в неё вписан один mc.yandex.ru; любой другой проверка считает ошибкой и останавливает выкладку — это правило, а не рекомендация.

Сколько времени занимает пересборка всего сайта?

Сборка 41 файла — 0,12 секунды, проверка собранного — 0,19; вместе 0,31 по лучшему из пяти прогонов /usr/bin/time -p на 08.10.2026. Практический смысл цифры не в скорости, а в длине цикла: правка исходника и полный просмотр результата укладываются в одно нажатие, поэтому проверять сайт целиком дешевле, чем смотреть одну страницу.

Какие платформы подходят, если делать сайт с ИИ?

Порядок работы от площадки не зависит: ИИ пишет разметку и текст, а лечь результат может и в конструктор, и в готовый движок, и в свои страницы. Здесь выбран третий путь — страницы собираются заранее и лежат готовыми.

Что ИИ делает сам, а что всё равно руками?

ИИ пишет разметку, стили и код сборки. Человек формулирует задачу, принимает работу и запускает выкладку: она идёт с машины человека, автоматического переключения версий на сервере нет.

Сколько времени занимает одна правка?

Сборка 19 страниц занимает 0,12 секунды, вместе с проверкой — 0,31 секунды на рабочем ноутбуке. Скорость отдачи страниц читателю не измерялась.

Источники
  1. Hunt A., Thomas D. The Pragmatic Programmer. Addison-Wesley, 1999 — принцип DRY: у каждого знания одно авторитетное представление.
  2. Shore J. Fail Fast. IEEE Software, 21(5), 2004. doi:10.1109/MS.2004.1331296
  3. Nosek B. A., Ebersole C. R., DeHaven A. C., Mellor D. T. The preregistration revolution. PNAS, 115(11), 2018. doi:10.1073/pnas.1708274114
  4. Fowler M. IntegrationContractTest, 2011. martinfowler.com
  5. W3C. Content Security Policy Level 2, 2016 — hash-source. w3.org
  6. W3C. Web Content Accessibility Guidelines (WCAG) 2.1, критерий 1.4.3 Contrast (Minimum), 2018. w3.org
  7. OWASP. Cross Site Scripting Prevention Cheat Sheet — output encoding. cheatsheetseries.owasp.org

Нужна такая же система?

Напишите в Telegram: отвечу сам, разберу вашу задачу и скажу, что из этого ей подходит.

Написать в Telegram→
Другие проекты лаборатории
↑ наверх