Примечание редактора: В Codrops мы любим отмечать талантливых разработчиков, которые превращают многолетний опыт в инструменты, которые помогают другим строить лучше. Мы рады поддержать запуск Эдо и надеемся, что вам понравится история того, что он создал.
Первая неделя каждой сборки CMS, за которую я взялся, выглядела одинаково. Разверните интерфейс, подключите Studio, смоделируйте конструктор страниц с нуля, перестройте уровень SEO, повторно выполните повторную проверку веб-перехватчика, измените стиль одной и той же контактной формы в четвертый раз. К моменту начала работы, для которой клиент меня нанял, трехдневный бюджет был исчерпан, и они не увидели ни одного значимого пикселя.
В течение многих лет я считал это расплатой за обезглавливание. Первые несколько дней уходят в сантехнику, и вы с этим смиряетесь. Что сломало эту историю, так это то, что те же самые ошибки вернулись. Не похожие. Те же самые. Миграция Sanity, которая уничтожила набор данных. CDN, который обслуживал устаревший образ OG в течение трех недель, в то время как клиент предположил, что я отправил его неправильно. Вебхук, который сработал дважды и повредил карту сайта. Каждый проект — это свежий экземпляр проблемы, которую я уже решил в прошлом и оставил в репозитории, который больше никогда не открою.
Поэтому я начал сохранять исправления. Один проект, затем два, затем десять, каждый патч складывался обратно в один шаблон вместо клиентского репозитория, от которого я бы отказался. Этот шаблон теперь Архитектура контентастартовый продукт Next.js и Sanity, над которым я отправляю каждый клиентский проект.
Это история о том, что он решает, и почему после многих лет его совершенствования я решил передать его в руки другим инженерам.
Если вы хотите использовать тот же фундамент, который я использую для каждого клиентского проекта, вы можете получить его по начальной стартовой цене. до 16 июля 2026 г.
Работа, которую никто не цитирует
Дорогая часть безголовой сборки никогда не является той частью, которую вы планируете. Клиенты платят за домашнюю страницу, тематические исследования, анимацию и все, что они видят. Чего они не видят, и против чего я никогда не ставил ни одной позиции, — это конструктор страниц, смоделированный таким образом, чтобы редакторы не могли его сломать, режим черновика и предварительный просмотр в реальном времени подключены и молча ломаются, пока вы не поймете, почему, ошибка в кэше, из-за которой опубликованный контент устаревает, а клиент клянется, что сайт неправильный, Студию, в которой ваши редакторы могут перемещаться, не отправляя вам электронное письмо. На скриншоте ничего этого не видно. Все это стоит дней.
Исправление для такой работы – это не куча функций. Это набор решений, принятых однажды и подтвержденных, поэтому вы начинаете каждый проект после них, вместо того, чтобы заново обсуждать каждое из них. Разница проявляется в тот момент, когда вы добавляете в него агент кодирования.
Почему продуманная основа лучше множества функций
Попросите Claude Code или Cursor создать автономную установку с нуля, и при каждом запуске вы будете получать новую архитектуру. Все правдоподобно, никто не решил. Поле ссылки один раз обрабатывает внутренние ссылки и забывает об электронной почте в следующий раз. Во вторник у компоновщика страниц есть ограждения, а в среду их нет. Уровень выборки правильно кэшируется до тех пор, пока он не будет запущен. Агент не ошибается. У него нет своего мнения, поэтому он изобретает его каждый раз, и вы наследуете дрейф.
Возьмем, к примеру, уровень выборки — ту часть, которая незаметно вызывает ошибку устаревшего контента в большинстве проектов. Решение находится в одном помощнике, а аргументация заложена в нем:
// One fetch helper, two caches, decided once.
//
// Production: useCdn = false
// → reads hit Sanity's live API and return current content
// → the Next.js Data Cache fronts every fetch (force-cache + tags)
// → so the live API is touched only when a webhook busts a tag,
// not once per visitor
//
// Development: useCdn = true
// → the CDN is the cheaper read while iterating locally
// → a few seconds of edge lag costs nothing during a build
//
// Publish → GROQ webhook → /api/revalidate → revalidateTag(tag)
// → Data Cache drops the tag → next request is fresh
CDN отключен там, где важна свежесть, кэш данных несет нагрузку, а вебхук делает недействительными точные теги при публикации. Ошибка устаревшего контента перестает быть проблемой полуночи, поскольку граница между двумя кэшами является собственностью, а не остается неопределенной. Такова форма каждого решения в комплекте: принято один раз, записано, одинаково для каждого проекта.
Это также означает, что агенты работают на вас, а не против вас. Ан AGENTS.md и дюжина навыков с ограниченной областью действия передают соглашения Claude Code или Cursor, поэтому они строят внутри архитектуры, а не изобретают новую при каждом запуске. Вы держите структуру, агент занимается набором текста, и дрейф исчезает.

Проблемы, которые я больше не решаю дважды
Все в комплекте заслужило свое место, поскольку являлось проблемой, с которой я сталкивался в реальной работе с клиентом и не раз отказывался исправлять. Некоторые из тех, которые требуют больше всего времени:
Три поля, которые никто не делает правильно с первого раза. Поле ссылки, которое обрабатывает внутренние ссылки, внешние URL-адреса, электронную почту и параметры в одном месте. Медиа-поле, которое нормализует изображение, Mux, Rive и Lottie в одну форму, каждый из которых возвращает размеры, поэтому сдвиг макета никогда не вступает в разговор. Конструктор страниц с ограждениями вместо общедоступного. Напечатано, многоразово, составлено повсюду.
Ошибка устаревшего контента исчезла. Уровень выборки выше, новые чтения в производстве, кэш данных выполняет свою работу, веб-перехватчики становятся недействительными при публикации, режим черновика и предварительный просмотр подключены и работают.
Редакторы отправляют электронное письмо с вопросом, где находится их контент. Студия, в которой каждый тип документа находится там, где его ожидают редакторы. Страницы владеют своими маршрутами, синглтоны остаются заблокированными, никто не ищет домашнюю страницу.
SEO включилось за неделю до запуска. Постраничные метаданные из схемы, карта сайта, созданная Sanity, OpenGraph с автоматически обрезанными изображениями, robots.txt — все это с первого коммита.
Сайты, которые агенты ИИ плохо читают. Агенты видят сайт вашего клиента как HTML-код с большим количеством токенов и цитируют его неправильно. В комплект входит принадлежащий редактору llms.txtсозданный искусственным интеллектом в один клик, и Markdown для каждой страницы предоставляется по одному и тому же URL-адресу посредством согласования содержимого, поэтому агент, запрашивающий Markdown, получает чистый контент, в то время как браузер все еще получает HTML. Полное обоснование содержится в посвященная рецензия.
За ними стоят те части, о которых вы перестаете думать: базовая аутентификация для промежуточной подготовки, защищенные от спама формы с помощью Resend, перенаправления, управляемые в Sanity, просмотр переходов и сценарий установки, который подготавливает проект Sanity, создает токены, добавляет CORS, регистрирует веб-перехватчик и записывает ваши .env. Первый запуск обрабатывается, а не документируется в README, которому вы должны следовать.
Архитектура фиксированная. Инструменты сверху, Tailwind, Biome, Mux, Rive, Lottie, по умолчанию подключены аккуратно, поэтому они выходят без проблем. Не хотите Tailwind, предпочитаете ESLint, без Mux в этой сборке? Потяните их. Вы сохраняете нижнюю часть: как контент моделируется, извлекается и составляется.
Почему один человек, а не команда
Архитектура единообразна, потому что один разум удерживал ее от первого файла схемы до последней точки повторной проверки. Это мнение никто не опроверг. Никто не добавил поле, потому что заинтересованное лицо любезно попросило. Это не ограничение, выдаваемое за добродетель. Вот почему оно держится вместе.
Я также самый активный пользователь. Комплект работает в рамках моей работы с клиентом, поэтому ошибка, с которой я столкнулся в пятницу, — это патч, который выйдет в понедельник, а проблема, с которой вы столкнетесь, — это одна из моих собственных проектов. Плата за пользователей в репозитории — это вынужденная функция в моей работе: я не могу позволить схеме гнить, пропустить основной этап Next.js или сидеть над критическим изменением в плагине Sanity. Вы покупаете репо и являетесь его владельцем. Ни приборной панели, ни сидений, ни телеметрии.
Я не буду утверждать, что это идеальный стек для всех. Ничего подобного не существует. Что я могу сказать, так это то, что он охватывает 99% моей собственной работы — клиентских сайтов с насыщенной анимацией и контентом, которые я создаю каждую неделю. Одно это подтверждает это для меня. Если ваша работа похожа на мою, скорее всего, она затрагивает и вашу.
Что он отправил
Это не побочный проект, выставленный на продажу. Это основа реальных клиентских сайтов, которые получают награды.

Некоторые из них: Хороший парень, Дом меда, Аспен Поиск, Анук Хоум, Служить робототехнике, Муралия, моргать, ВАСЛ, Творческая жизнь продолжается, мой собственный сайти сам сайт контентной архитектуры. Работа, построенная на этом фундаменте, получила признание Оууууардс, ФВАи CSSDA. Часы, которые я тратил на сантехнику, уходили на те части участков, которые заметили присяжные. Теперь другие инженеры тоже получают эти часы обратно, и набор продолжает расти в том же направлении: меньше сантехнических работ, больше работы, которую стоит выполнить.
Что ты получишь обратно
Следующие три дня каждого проекта, те, которые исчезали прежде, чем клиент видел хоть один пиксель, на который стоит обратить внимание. При каждой сборке это время принадлежит вам с самого начала, и вы можете потратить его на творческую работу, за которую клиент выписывает чек.
Обоснование каждого решения полностью изложено в четырех частях, доступных для чтения. Структура CMS, модели контента, композиция страницыи примитивы контента. Сначала прочтите мысль и решите, что она подходит.
Когда вы будете готовы пропустить перестройку, Архитектура контента это репо, через которое я отправляю. Один платеж, пожизненные обновления, которые останутся у вас. Если вы не уверены, подходит ли это вашему образу работы, напиши мне и я скажу вам прямо: иногда это означает, что вам нужно сказать, что это не то, что вам нужно.