Каждый Next.js-проект достигает момента «где хранить контент?». Ответ зависит от того, кто редактирует, как часто, и сколько контроля нужно разработчику.
Я шипил продакшн-проекты с Sanity, Payload CMS и чистыми MDX-файлами. Вот честная таблица трейдофов.
Три варианта
Чистый MDX (то, что использует этот сайт)
Контент живёт как .mdx файлы в репозитории. Разработчики редактируют напрямую. Нет CMS-дашборда, нет API, нет базы данных.
Когда работает:
- Разработчик — единственный редактор контента
- Изменения контента шипятся с кодом (версионируются в git)
- Хочешь ноль рантайм-зависимостей для контента
- Блог-посты, документация, портфолио
Когда ломается:
- Нетехнические редакторы должны публиковать контент
- Обновления контента должны происходить без деплоя
- Нужен реалтайм-превью для редакторов
Реальная стоимость: Ноль. Без хостинга, без API-вызовов, без подписки.
Sanity
Хостинг-headless CMS. Контент живёт в облаке Sanity. Запрашиваешь через GROQ или GraphQL.
Когда работает:
- Нетехнические редакторы нуждаются в визуальном редакторе
- Обновления контента должны быть мгновенными (без деплоя)
- Нужна реалтайм-коллаборация между редакторами
- Маркетинговые сайты, где контент меняется еженедельно
Когда ломается:
- Ты единственный редактор (оверхед без пользы)
- Хочешь контент версионированный в git
- Бюджет ограничен
Реальная стоимость: Бесплатный тир покрывает большинство маленьких проектов. Платный от $99/месяц. Реальная стоимость — изучение GROQ и схемной DSL Sanity: 4–8 часов на начальный сетап.
Payload CMS
Селф-хостинг, опенсорс headless CMS. Контент в твоей базе данных. Админ-UI автогенерируется из конфига.
Когда работает:
- Хочешь CMS, но нужен полный контроль над данными
- GDPR требует резидентности данных (твой сервер, твой регион)
- Нужны кастомные воркфлоу, контроль доступа, хуки
Когда ломается:
- Нет инфраструктуры для хостинга (Payload нужен Node.js-сервер)
- Проект — простой блог или портфолио (оверкилл)
Реальная стоимость: Бесплатно (опенсорс). Но платишь за хостинг — VPS ($5–20/месяц). Время сетапа: 6–12 часов.
Таблица сравнения
| Чистый MDX | Sanity | Payload | |
|---|---|---|---|
| Редактор | Только разработчик | Кто угодно | Кто угодно |
| Хостинг | Нет (файлы в репо) | Облако Sanity | Селф-хостинг |
| Стоимость | Бесплатно | Бесплатно → $99+/мес | Бесплатно + хостинг |
| Деплой для контента? | Да | Нет | Нет |
| Git-версионирование | Да | Нет | Нет |
| Владение данными | Полное | Облако Sanity | Полное |
| Время сетапа | 1 час | 4–8 часов | 6–12 часов |
| Лучше всего для | Дев-блоги, доки, портфолио | Маркетинговые сайты, команды | Data-heavy приложения, GDPR |
Моё дерево решений
- Я единственный редактор контента? → Чистый MDX.
- Клиенту нужно редактировать контент без разработчика? → CMS нужна. Переход к 3.
- Нужна резидентность данных (GDPR)? → Payload.
- Клиент хочет ноль ops-работы? → Sanity.
- Модель контента сложная (50+ типов контента)? → Payload.
- Бюджет ограничен, контент простой? → Sanity бесплатный тир.
Гибридный паттерн
Для E7 Platform мы использовали гибрид: данные мероприятий в Postgres (управляются приложением), маркетинговые страницы в MDX (управляются разработчиком). Никакого CMS вообще.
Этот паттерн «приложение-как-CMS» работает, когда контент, нуждающийся в редактировании — это одновременно бизнес-данные.
Что бы я выбрал для типичных сценариев
Персональное портфолио/блог: Чистый MDX. Ты разработчик. Редактируй в VS Code.
Агентский маркетинговый сайт: Sanity бесплатный тир. Клиент может редактировать заголовки и отзывы без звонка тебе.
SaaS с блогом и документацией: Payload, если уже есть сервер. Sanity, если хочешь managed.
E-commerce каталог: Ни один из них — используй встроенные инструменты контента e-commerce платформы.
Строишь Next.js-проект и не уверен, где хранить контент? Напиши — я шипил все три подхода и могу порекомендовать правильный для твоего проекта за один звонок.