jtakeit
Язык: RU
Попробовать бесплатно
Попробовать

Next.js CMS для клиентских сайтов

Next.js CMS для клиентских сайтов, которые пишет ваш агент

jtakeit — Next.js CMS на git для клиентских сайтов: агент собирает статический экспорт в ваш репозиторий, владелец правит текст прямо на странице, а платформа берёт на себя формы, запись, хостинг и домен.

zsh — client-site
$ 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_build
Статический экспорт Next.js по контракту jtakeit: одна сборка — в папке, которую отдаёт платформа.

01/ что нужно

Что нужно от 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. Конкретные продукты различаются — проверьте тот, который рассматриваете.
Типичная headless CMSjtakeit
Опубликованный контентВ базе данных CMS, запрашивается через её APIJSON в вашем репозитории
Как его получает сборкаЗапрос к API из сборки или с сервераФайл, который платформа собирает для каждой сборки
СохранениеОбновление записи в базеКоммит; черновики остаются в базе данных платформы
Где правит владелецВ отдельном приложении-админкеПрямо на странице, нажимая на текст
Формы, запись, хостингВне CMS, подключаются отдельноОбслуживает платформа — вместе с биллингом, бэкапами и доменом
Сайт в состоянии на мартЗависит от истории в CMSОдна команда в git

03/ статический экспорт

Статический экспорт Next.js на jtakeit

Платформа собирает каждый сайт одинаково: запускает сборку проекта, а затем отдаёт папку, которую эта сборка пишет. Next.js подходит в режиме статического экспорта (static export): HTML пишется во время сборки, и при посещении никакой сервер не работает.

next.config.mjs · package.json · public/_meta.json
// 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 · app/page.tsx · app/robots.ts
// 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 и sitemap
  • PUBLIC_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-репозитории