Notty. Контент под контролем.
Создали модульную headless CMS на TypeScript: собственное ядро, сервер на Nitro, админку на React и инструменты интеграции. Notty связывает модель данных, редакторские процессы и API в платформу для сайтов и приложений.
Задача
Контентный проект требует двух разных рабочих пространств. Разработчикам нужна гибкая модель данных и предсказуемый API, а редакторам — понятные поля, поиск, статусы и работа с публикациями без постоянной помощи программиста.
Мы создали Notty, чтобы связать эти задачи в одной CMS. Структуру можно собирать под конкретный продукт, интерфейс редактирования следует этой структуре, а сайт или приложение сохраняет свободу выбора технологий.
Notty устанавливается на собственном сервере. Сайт проекта, документация и описание редакций доступны на notty.pro. На скриншотах — работающая админка с демонстрационными данными Atelier.
Что сделали
-
Собственное модульное ядро
Разработали платформу на TypeScript с отдельными модулями ядра, сервера, данных, админки и инструментов разработчика. Общие типы задают контракты между частями системы, а сервер на Nitro и H3 обрабатывает API и прикладную логику.
-
Конструктор моделей контента
Создали визуальное описание типов контента: поля, связи, повторяемые компоненты и динамические зоны. Модель определяет структуру записей и формы редактирования. На этой основе можно собрать CMS для статей, каталога или данных приложения.
-
Полноценная админка на React
Разработали рабочее место редактора с поиском, фильтрами, статусами и сохранёнными видами. TanStack Query управляет серверными данными, Zustand — состоянием интерфейса, Tailwind CSS — оформлением. Доступные действия учитывают роль пользователя.
-
SQL-слой на Drizzle ORM
Построили слой данных на Drizzle ORM с поддержкой PostgreSQL, MySQL и SQLite. Отделили работу с базой от интерфейса редактора и внешнего API, чтобы CMS можно было разворачивать в инфраструктуре проекта и подключать к разным фронтендам.
-
API, SDK и генерация типов
Реализовали REST и GraphQL для доступа к контенту, фильтрации, сортировки и работы со связями. Добавили OpenAPI, TypeScript SDK, генерацию типов и CLI. Эти инструменты помогают подключать CMS к приложению с согласованной моделью данных.
-
Архитектура расширений
Предусмотрели Plugin API для собственных маршрутов, сервисов, хуков и правил доступа. Расширения могут добавлять страницы, виджеты и поля редактора в админку. Жизненный цикл плагинов позволяет подключать дополнительную функциональность к ядру платформы.
-
Публикации, медиа и эксплуатация
Разделили черновики и опубликованный контент, предусмотрели историю изменений, локализацию и редакционные процессы; набор возможностей зависит от редакции. Для медиа доступны локальное хранение, S3 и Google Cloud Storage, для обработки изображений — Sharp. Подготовили сайт и документацию по API, настройке и развёртыванию.
Стек
Notty — модульная TypeScript-платформа с собственным ядром, сервером на Nitro и админкой на React. Drizzle ORM связывает модель контента с SQL-базой, а REST, GraphQL и типизированный SDK открывают данные приложениям. Общие типы и генерация кода помогают согласовать сервер и клиент; API расширений позволяет добавлять маршруты, сервисы и элементы админки.
- Ядро и сервер
- TypeScript Node.js Nitro H3
- Админка
- React Tailwind CSS Zustand TanStack Query
- Данные
- Drizzle ORM PostgreSQL MySQL SQLite
- API и интеграции
- REST GraphQL OpenAPI
- Инструменты разработки
- TypeScript SDK Генерация типов CLI Plugin API
- Медиа
- S3 Google Cloud Storage Sharp