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

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

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

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

Опубликовано 25.08.2026 · цифры сверены 01.09.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, 1648 строк, без зависимостей
СделаноПроверкаcheck.py, 571 строк, 18 групп правил
СделаноГенераторarticles/, 1601 строка, восемь модулей
СделаноСтиль статейproekt.css, свои шрифты, без Google
СделаноТекстывсе шесть текстов написаны, цифры сверяются
СделаноСервервыложено 27.08.2026, свой сервер и TLS

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

За последние сутки прибавился генератор статей: раньше страница проекта собиралась из 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
Осознанные исключения с причинойпрощённая проверка живёт отдельным файлом с объяснением, а не правкой порога: пять строк про контраст фирменной магентыДокументированные исключения (waivers)собственное правило лаборатории, внешнего источника нет
03 · Сборка

Как собрано

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

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

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

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

ИСХОДНИКИmarkdown и CSV6 проектов · 11 файлов данных · 2 страницыГЕНЕРАТОР СТАТЕЙarticles/, 1601 строкачерновик JSON → готовая страницаСБОРКАbuild.py, 1648 строк38 файлов, из них 22 HTMLПРОВЕРКАcheck.py, 571 строк18 групп правил, 0,18 сошибок нетесть ошибкаВЫКЛАДКА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 вне карты сайта22 HTML-файла, 21 адрес. Проверка отдельно требует у неё noindex и отдельно — чтобы её не было среди адресов карты
Прощённые проверки — отдельным файлом с причинойпять строк про контраст фирменной магенты: 4,32 при норме 4,5. Решение по бренду записано текстом, а не понижением порога
Своя проверка вместо готового линтералинтер знает про HTML, но не знает, что число проектов на главной обязано совпадать с числом файлов в исходниках
06 · Ограничения

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

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

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

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

адресов в карте сайта21grep -c <loc> site/sitemap.xml, 09.09.2026
сборка и проверка вместе0,28 с/usr/bin/time -p, лучшее из пяти прогонов, 09.09.2026
строк кода без зависимостей4 001wc -l build.py check.py og.py sokratit.py articles/*.py
страниц опубликовано21выложено 27.08.2026, пересчитано 09.09.2026
Строки кода по файлам
build.py — сборка1648
check.py — проверка571
articles/research.py421
articles/razmetka.py356
articles/shema.py209
articles/sborka.py177
articles/dopolnit.py165
articles/predely.py156
og.py — превью151
sokratit.py71
articles/kanon.py65
articles/sobrat.py52
Проверка догнала половину сборки: раздел 13 стандарта витрины добавил в неё сто шестьдесят пять строк. Генератор вырос 01.09.2026 на словарь канонических имён и дописывание блоков в готовые статьи. Серым — файлы короче трети сборки.
Что лежит в site/ после сборки
файлов всего601,7 МБ
создаёт сборка3863 %
из них HTML2237 %
в карте сайта2135 %
Разница между 60 и 38 — шрифты и картинки для соцсетей: они копируются, а не собираются. Страница 404 в карту сайта не входит намеренно.

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

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

Проверка возвращает ноль ошибок и шесть замечаний. Все шесть одинаковые — про блок «Повторить самому» без ссылок на промпт и данные. Ни одно из них не про вёрстку и ни одно не держит выкладку.

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

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

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

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

08 · Грабли

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

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

допосле126

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

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

Что сознательно не вошло

Половина списка — не отказ, а очередь.

ОтложеноСвои цифры в каждом текстевсе шесть написаны и сверены с файлами проектов; проверить их до конца можно только по репозиториям, а не по сайту
ОтложеноРазметка JSON-LD в статьяху страниц сайта она есть, у готовых статей — нет. Проверка требует, чтобы разметка разбиралась, но не требует, чтобы она была
Не будетБаза, админка и формырешение принято до первой строки кода: нет базы — нечего внедрять, нет формы — нечего слать
Не будетВнешние скрипты и счётчикиполитика начинается с default-src 'none', а проверка считает ошибкой ссылку на любой чужой домен
ОтключеноПубличный репозиторий кодаснят решением 24.08.2026. Три страницы, которые продолжали на него ссылаться, переписаны в тот же день
В планахТаблица «вопрос → страница»панель меряет фиксированный набор из 20 вопросов. Пустая клетка полезнее средней цифры, но её ещё нужно нарисовать
В планахАнглийская версияотдельной очередью после публикации русской. Срок не назначен
10 · Вопросы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источники
  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
Другие проекты лаборатории
наверх