Notty. Контент под контролем.

Создали модульную headless CMS на TypeScript: собственное ядро, сервер на Nitro, админку на React и инструменты интеграции. Notty связывает модель данных, редакторские процессы и API в платформу для сайтов и приложений.

Формат
Свой продукт
Услуга
Веб-сервисы
Что сделали
Модульная CMS на TypeScript: ядро, API, админка и SDK
Платформы
Веб, REST API, GraphQL, собственный сервер
Notty: список статей с поиском, фильтрами и статусами публикации

Задача

Контентный проект требует двух разных рабочих пространств. Разработчикам нужна гибкая модель данных и предсказуемый API, а редакторам — понятные поля, поиск, статусы и работа с публикациями без постоянной помощи программиста.

Мы создали Notty, чтобы связать эти задачи в одной CMS. Структуру можно собирать под конкретный продукт, интерфейс редактирования следует этой структуре, а сайт или приложение сохраняет свободу выбора технологий.

Notty устанавливается на собственном сервере. Сайт проекта, документация и описание редакций доступны на notty.pro. На скриншотах — работающая админка с демонстрационными данными Atelier.

Что сделали

  1. Собственное модульное ядро

    Разработали платформу на TypeScript с отдельными модулями ядра, сервера, данных, админки и инструментов разработчика. Общие типы задают контракты между частями системы, а сервер на Nitro и H3 обрабатывает API и прикладную логику.

  2. Конструктор моделей контента

    Создали визуальное описание типов контента: поля, связи, повторяемые компоненты и динамические зоны. Модель определяет структуру записей и формы редактирования. На этой основе можно собрать CMS для статей, каталога или данных приложения.

  3. Полноценная админка на React

    Разработали рабочее место редактора с поиском, фильтрами, статусами и сохранёнными видами. TanStack Query управляет серверными данными, Zustand — состоянием интерфейса, Tailwind CSS — оформлением. Доступные действия учитывают роль пользователя.

  4. SQL-слой на Drizzle ORM

    Построили слой данных на Drizzle ORM с поддержкой PostgreSQL, MySQL и SQLite. Отделили работу с базой от интерфейса редактора и внешнего API, чтобы CMS можно было разворачивать в инфраструктуре проекта и подключать к разным фронтендам.

  5. API, SDK и генерация типов

    Реализовали REST и GraphQL для доступа к контенту, фильтрации, сортировки и работы со связями. Добавили OpenAPI, TypeScript SDK, генерацию типов и CLI. Эти инструменты помогают подключать CMS к приложению с согласованной моделью данных.

  6. Архитектура расширений

    Предусмотрели Plugin API для собственных маршрутов, сервисов, хуков и правил доступа. Расширения могут добавлять страницы, виджеты и поля редактора в админку. Жизненный цикл плагинов позволяет подключать дополнительную функциональность к ядру платформы.

  7. Публикации, медиа и эксплуатация

    Разделили черновики и опубликованный контент, предусмотрели историю изменений, локализацию и редакционные процессы; набор возможностей зависит от редакции. Для медиа доступны локальное хранение, 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

Расскажите о задаче

hello@anv.pro

или в Telegram @helloanvpro

Ответим в течение рабочего дня. Опишите процесс — предложим решение и оценку.

Куда ответить
Прикрепить ТЗ — PDF, Word, Excel, · до 50 МБ

Ответим письменно в течение рабочего дня — без звонков. Нажимая «Получить оценку проекта», вы соглашаетесь с политикой обработки персональных данных.