Техническое задание: Интеграция CMS в Next.js приложение

Необходимо подключить систему администрирования (админ-панель) к готовому многостраничному сайту, построенному на фреймворке Next.js с поддержкой интернационализации (i18n).

Цель проекта

Предоставить владельцу сайта удобный инструмент для самостоятельного управления контентом без вмешательства в код.

Текущая структура проекта

Приложение имеет следующую структуру роутинга внутри директории app/[locale]/:

  • Главная страница (page.tsx)
  • Страница "О нас" (about/page.tsx)
  • Страница с направлениями (styles/page.tsx)
  • Страница расписания (schedule/page.tsx)
  • Страница преподавателей (teachers/page.tsx)
  • Блог (blog/page.tsx и blog/[slug]/page.tsx)
  • Страница контактов (contacts/page.tsx)

Требуемый функционал админ-панели

Управление контентом

  • Расписание: CRUD-операции (создание, чтение, обновление, удаление) для событий и занятий. Управление временем, преподавателями, описанием.
  • Блог: Полнофункциональная система публикации статей. Создание, редактирование, удаление постов. Управление тегами, категориями, датами публикации.
  • Преподаватели: Управление карточками инструкторов (фото, имя, описание, специализация).

SEO и мета-управление

  • Возможность редактирования мета-тегов (title, description, keywords) для ключевых страниц сайта.
  • Управление Open Graph и другими социальными мета-тегами.

Технические требования к решению

  • Админ-панель должна быть защищена авторизацией (логин/пароль).
  • Изменения, внесенные через админку, должны корректно отображаться на соответствующих страницах фронтенд-приложения.
  • Решение должно быть надежным и масштабируемым.
  • Приветствуется использование современных и проверенных технологий (например, Strapi, Directus, самописное решение на Next.js API routes с Prisma и т.д.).

Ожидаемый результат

Полностью рабочая система, позволяющая владельцу через интуитивно понятный интерфейс обновлять расписание, публиковать новости в блоге, редактировать информацию о преподавателях и управлять SEO-настройками сайта.