к содержимому

12 июня 2026 · 6 мин

Как этот сайт собирают агенты

Этот сайт не просто «сделан с помощью ИИ» в маркетинговом смысле. Его код в буквальном смысле пишут агенты. Пока одна сессия Claude Code строила эффекты первого экрана на three.js, вторая параллельно чинила сборку, выкатывала разделы и настраивала CI. Я ставил задачи и принимал работу.

Текст описывает процесс разработки в июне 2026 года. С тех пор сайт продолжает меняться.

Из чего собран сайт

Next.js 16 (App Router, Turbopack), React 19, Tailwind CSS 4, GSAP с ScrollTrigger, ScrollSmoother и SplitText, three.js через react-three-fiber для трехмерной фигуры на первом экране. Проекты в каталоге подтягиваются из GitHub API и обновляются раз в час. Ничего экзотического в стеке нет, интереснее устроен сам процесс.

Процесс

Каждая сессия проходит один и тот же цикл из четырех шагов.

  1. Спека. Контекст хранится в CLAUDE.md и AGENTS.md прямо в репозитории. Там записаны соглашения, известные грабли и то, чего делать нельзя. Это полноценные инженерные документы, а не файлы для галочки.
  2. Работа. Агент пишет код сам, мелкими шагами, и сверяется со спекой. Параллельные задачи разводятся по разным сессиям.
  3. Проверка. От нее больше всего зависит качество. Прежде чем показать результат, агент обязан сам убедиться, что код работает. Он запускает продакшен-сборку, открывает страницу в браузере, прокручивает ее, проходит меню с клавиатуры, снимает скриншоты и метрики Lighthouse.
  4. Память. Найденные ошибки и способы их исправить записываются в CLAUDE.md, чтобы следующая сессия на них не наступала.

Снаружи процесс страхует GitHub Actions. Линтер и сборка запускаются на каждый пуш.

Пять багов, которые поймала проверка

Все пять настоящие, они взяты из истории коммитов этого репозитория.

  • Сборка вообще не собиралась. В коде остались вызовы удаленного провайдера плавного скролла, и TypeScript падал. Это показал первый же запуск npm run build.
  • Three.js зря грузился на телефонах. В той версии 3D на мобильных не отображалось, но почти мегабайт кода все равно скачивался, потому что проверка устройства находилась внутри динамически загружаемого чанка. Проверку перенесли до импорта, и мобильный бандл похудел примерно на 1 МБ.
  • Заголовок ломался посреди слова. Слово «Эксперименты» при размере 9vw не помещалось в свою колонку, и SplitText переносил его по буквам без дефиса. Это заметили на скриншоте и перестроили сетку.
  • Якоря из мобильного меню не работали вовсе. Пока меню открыто, body заблокирован через overflow: hidden, и переход к якорю молча не срабатывал. Теперь прокрутка выполняется после закрытия меню.
  • CI падал из-за package-lock. npm не записывает в лок-файл бинарники для чужих платформ (npm/cli#4828), поэтому лок, собранный на macOS, не содержал Linux-сборок lightningcss. Помогло явное указание optionalDependencies.

Разные проверки ловят разные ошибки. Сборка и CI находят проблемы компиляции, а браузерные сценарии и скриншоты находят проблемы интерфейса.

Вывод

Агент пишет код быстрее меня, но скорость здесь не главное. Важнее, что цикл «спека → работа → проверка → память» позволяет проверять результат и не повторять уже известные ошибки.

Реализацию можно поручить агенту. Понимать задачу и принимать результат по-прежнему должен я.