Next.js CMS для клиентских сайтов
Next.js CMS для клиентских сайтов, которые пишет ваш агент
jtakeit — Next.js CMS на git для клиентских сайтов: агент собирает статический экспорт в ваш репозиторий, владелец правит текст прямо на странице, а платформа берёт на себя формы, запись, хостинг и домен.
$ npx create-next-app@latest client-site --ts --app
$ cd client-site
# next.config.mjs: output 'export', basePath from SITE_URL
$ npm run build
$ ls dist
404.html _meta.json _next index.html robots.txt sitemap.xml
$ git push origin main
# then, over MCP: validate_catalogue → commit_and_build01/ что нужно
Что нужно от Next.js CMS для клиентских сайтов
Клиентскому сайту на Next.js нужно больше, чем место для хранения текстов. Владелец должен сам менять свои тексты, не звоня вам, а сайт — принимать заявки и онлайн-запись и отпускать клиента вместе с его данными.
Правки, которые не ломают дизайн
Владелец нажимает на текст на странице и заполняет только поля, объявленные в каталоге. Кнопок «добавить страницу» и «добавить блок» нет — намеренно.
Контент в вашем репозитории
Опубликованные тексты — JSON в git-репозитории, который остаётся у вас. Каждое сохранение — коммит.
Формы заявок
Формы защищены от спама, а заявки приходят в Telegram, на email или во входящие админ-панели.
Запись с оплатой
Модуль записи отправляет оплаченные бронирования прямо в собственный Stripe бизнеса.
Превью до оплаты
Клиент согласовывает настоящий сайт на превью — ещё до запуска.
Свобода уйти
Заявки и записи выгружаются в CSV и JSON. Для экспорта никогда не нужна действующая подписка.
02/ git или api
Git-based или headless CMS для Next.js?
Headless CMS хранит контент в своей базе данных и отдаёт его через API — это удобно, когда контент-команда публикует на сайт, в приложение и не только. У клиентского сайта один владелец и один сайт, поэтому jtakeit хранит его тексты в репозитории рядом с кодом.
| Типичная headless CMS | jtakeit | |
|---|---|---|
| Опубликованный контент | В базе данных CMS, запрашивается через её API | JSON в вашем репозитории |
| Как его получает сборка | Запрос к API из сборки или с сервера | Файл, который платформа собирает для каждой сборки |
| Сохранение | Обновление записи в базе | Коммит; черновики остаются в базе данных платформы |
| Где правит владелец | В отдельном приложении-админке | Прямо на странице, нажимая на текст |
| Формы, запись, хостинг | Вне CMS, подключаются отдельно | Обслуживает платформа — вместе с биллингом, бэкапами и доменом |
| Сайт в состоянии на март | Зависит от истории в CMS | Одна команда в git |
03/ статический экспорт
Статический экспорт Next.js на jtakeit
Платформа собирает каждый сайт одинаково: запускает сборку проекта, а затем отдаёт папку, которую эта сборка пишет. Next.js подходит в режиме статического экспорта (static export): HTML пишется во время сборки, и при посещении никакой сервер не работает.
// next.config.mjs
const site = new URL(process.env.SITE_URL ?? 'http://localhost:3000/');
export default {
output: 'export', // static HTML, no server at request time
basePath: site.pathname.replace(/\/$/, ''), // '' live, '/p/<slug>' in preview
trailingSlash: true, // /about/index.html, not /about.html
images: { unoptimized: true },
};
// package.json — the platform runs `npm run build` and serves dist/
"scripts": { "build": "next build && rm -rf dist && cp -R out dist" }
// public/_meta.json — copied into dist/ with the rest of public/
{ "immutable": ["/_next/static/"] }// lib/jtk.ts — runs at build time, never in the browser
import { readFileSync } from 'node:fs';
const file = process.env.JTK_CONTENT_FILE;
export const published = file ? JSON.parse(readFileSync(file, 'utf8')) : null;
// data-jtk-path only when the platform asks for it
export const tap = (path: string) =>
process.env.PUBLIC_JTK_ANNOTATE ? { 'data-jtk-path': path } : {};
// app/page.tsx
<h1 {...tap('blocks[0].title')}>{hero.title}</h1>
// app/robots.ts
export const dynamic = 'force-static';
const site = process.env.SITE_URL!.replace(/\/?$/, '/');
export default function robots() {
return { rules: { userAgent: '*', allow: '/' },
sitemap: new URL('sitemap.xml', site).href };
}Задаются для каждой сборки
SITE_URLадрес сайта: хост для canonical и sitemapPUBLIC_JTK_ANNOTATEесли задана — размечайте каждое поле, которое может править владелецJTK_CONTENT_FILEгде собран опубликованный контент, который читает эта сборка
Что должно быть в сборке
- Своя страница для каждого адреса — каждая в своей папке, а не отдельный HTML-файл рядом с остальными.
- Ассеты, которые работают по адресу превью. Превью отдаётся по собственному пути, поэтому базовый путь берётся из адреса сайта, который задаёт платформа.
- Страница 404 — её статический экспорт пишет сам.
- robots.txt, который пускает поисковых роботов, и sitemap на адресе сайта.
- Canonical на этот хост на каждой странице и ни одного noindex — сборку с ним платформа не пропустит.
- Пометка для кеширования, которая отмечает хешированные ассеты Next как неизменные, чтобы они кешировались навсегда.
- Каталог того, что может редактировать владелец, — написанный вручную или вашим собственным инструментом и проверенный платформой. Формы отправляют заявки на платформу.
04/ пишет ваш агент
Next.js, где контракт настраивает ваш агент
Заготовка, которую даёт jtakeit, — Astro. Для Next.js готового стартера нет: вы — или ваш AI-агент, например Claude Code через MCP-сервер jtakeit, — раскладываете проект по документированному контракту, а платформа проверяет его так же, как любой другой сайт.
| Заготовка Astro | Статический экспорт Next.js | |
|---|---|---|
| Отправная точка | Заготовка Astro от jtakeit | Ваш собственный проект на Next.js |
| Каталог | Генерируется и проверяется инструментом каталога из заготовки | Пишется вручную или вашим инструментом |
| Формы и образцы блоков | Уже есть | Делаете сами; формы отправляют заявки на платформу |
| Зависимости | Предустановлены | Устанавливаются вашей сборкой |
| Сборка | Меньше минуты | Около 90 секунд |
Как устроен процесс с Claude Code →
Как объявляется редактирование на заготовке Astro →
05/ выбор
Как выбрать лучшую CMS для клиентских сайтов на Next.js
Начните с того, что сайт должен делать, когда его открывают. Если ему нужен сервер во время запроса — incremental static regeneration, API routes, middleware, server actions или страницы, которые рендерятся на каждый запрос, — jtakeit не подойдёт: он отдаёт только статику, на любом фреймворке.
Если сайт можно собрать заранее, остаётся вопрос, кто его редактирует. jtakeit — для разработчиков, чьи клиенты должны сами менять свои тексты — и ничего больше — без звонка вам, и которые не хотят сами обслуживать формы, запись, биллинг, бэкапы, хостинг и домен.
Не привязаны к Next.js? Astro CMS для клиентских сайтов — заготовка, которую даёт jtakeit, и сборка на ней занимает меньше минуты. Как устроено редактирование через git на любом генераторе, рассказано на странице статической CMS для клиентских сайтов.
06/ вопросы
Вопросы о Next.js CMS
- Поддерживает ли jtakeit Next.js?
- Да, в режиме статического экспорта. Платформа запускает сборку проекта и отдаёт папку, которую та пишет, поэтому сайт на Next.js подходит, если он собирается заранее как статический экспорт и копируется в эту папку. Astro — заготовка, которую даёт jtakeit; на Next.js вы сами раскладываете проект по тому же документированному контракту.
- Можно ли использовать App Router?
- App Router умеет делать статический экспорт, если ничему на сайте не нужен сервер во время запроса: никакой incremental static regeneration, никаких route handlers или server actions, выполняемых на каждый запрос, никакого middleware и рендеринга, зависящего от запроса. Это ограничение самого статического экспорта Next.js, так что сверьте своё приложение с документацией Next.js по static export.
- Есть ли официальный стартер для Next.js?
- Нет. Ни стартера, ни плагина, ни SDK для Next.js нет. jtakeit даёт заготовку на Astro. На Next.js вы — или ваш AI-агент — настраиваете документированный контракт: сборка пишет в папку, которую отдаёт платформа, опубликованные тексты читаются из файла, который готовит платформа, а каталог того, что может редактировать владелец, пишется вручную или вашим собственным инструментом и проверяется платформой.
- Сколько длится сборка?
- Около 90 секунд для сайта не на заготовке Astro, потому что сборка устанавливает ваши собственные зависимости. У заготовки Astro зависимости предустановлены, и она собирается меньше чем за минуту.
- Как клиент редактирует сайт на Next.js?
- Нажимая на текст на странице. Каталог сайта объявляет, какие поля может заполнять владелец, и, когда платформа об этом просит, ваши страницы размечают эти поля. Каждое сохранение — коммит в ваш репозиторий, а следующая сборка читает опубликованные тексты из файла, который готовит платформа.
- Сколько это стоит?
- Регистрация, сборка и превью бесплатны. Когда сайт запущен, вы платите оптовую цену за каждый запущенный сайт, помесячно или за год, а с клиента берёте свою цену — на Next.js так же, как на Astro. Цифры — на странице цен.
07/ бесплатно
Попробуйте на реальном клиентском сайте
Зарегистрируйтесь в панели и соберите первый клиентский сайт — на заготовке Astro или как статический экспорт Next.js. Оптовую цену вы платите, только когда сайт запущен.
Попробовать бесплатноadmin.jtakeit.com
- Бесплатно, пока сайт не запущен
- Затем — оптовая цена за запущенный сайт, от €5 в месяц
- Код остаётся в вашем git-репозитории