Синхронизация контента и фронтенд

Что реализовано

23 июля 2025 г.
PXLR Teme
1 тег

🎯 Что реализовано

✅ Система синхронизации

  • 📁 Автоматическая синхронизация backend/content/frontend/content/
  • 👀 Отслеживание изменений в режиме реального времени
  • Умная синхронизация - только измененные файлы
  • 🗑️ Автоудаление файлов, которых нет в backend

✅ Современный фронтенд

  • 🏠 Главная страница с кнопкой "Посты"
  • 📋 Список постов с дизайном как в админке
  • 🏷️ Фильтрация по тегам в сайдбаре
  • 📄 Пагинация с сохранением фильтров
  • 📖 Отдельные страницы постов с полным контентом
  • 🎨 shadcn/ui дизайн для консистентности

🚀 Запуск системы

Автоматический запуск всего

npm run dev

Запускает:

  • Backend API (port 3333)
  • Admin Panel (port 5173)
  • Frontend (port 3000)
  • Синхронизацию контента в режиме watch

Ручная синхронизация

# Одноразовая синхронизация
npm run sync

# Синхронизация с отслеживанием изменений
npm run sync:watch

📁 Структура синхронизации

Backend (источник)

backend/content/
├── welcome.mdx              # Демо пост
├── test-post.mdx           # Тестовый пост  
├── sonner-update.mdx       # Пост об обновлении
└── tags-fix-test.mdx       # Пост об исправлении тегов

Frontend (синхронизированная копия)

frontend/content/
├── welcome.mdx              # ← Автосинхронизация
├── test-post.mdx           # ← Автосинхронизация
├── sonner-update.mdx       # ← Автосинхронизация
└── tags-fix-test.mdx       # ← Автосинхронизация

Процесс синхронизации

  1. 📝 Создание поста в админке → сохранение в backend/content/
  2. 👀 Отслеживание изменений скриптом sync-content.js
  3. 🔄 Автокопирование файла в frontend/content/
  4. Горячая перезагрузка Next.js подхватывает изменения
  5. 🌐 Мгновенное отображение нового поста на сайте

🎨 Фронтенд возможности

🏠 Главная страница (/)

// Простая лендинг с кнопкой "Посты"
- Hero секция с заголовком PXLR CMS
- 3 карточки с возможностями системы
- Большая кнопка "Посмотреть посты"
- Ссылка на админ-панель

📋 Страница постов (/posts)

// Список всех постов с фильтрацией
- Заголовок с количеством постов
- Sidebar с фильтрацией по тегам
- Карточки постов (дизайн как в админке)
- Пагинация с сохранением фильтров

Возможности списка постов:

  • Красивые карточки с названием, описанием, метаданными
  • Информация о посте: дата, автор, количество тегов
  • Теги как ссылки для быстрой фильтрации
  • Hover эффекты и плавные переходы

Sidebar с тегами:

  • Все теги с количеством
  • Активный фильтр с кнопкой сброса
  • Быстрая фильтрация по клику на тег
  • Информация о способах использования

📖 Страница поста (/posts/[slug])

// Полное отображение поста
- Кнопка "Назад к постам"
- Заголовок и описание поста
- Метаинформация (дата, автор, теги)
- Содержимое с красивой типографикой
- Блок "Похожие посты" (по тегам)

Особенности страницы поста:

  • Профессиональная типографика с @tailwindcss/typography
  • Responsive дизайн для всех устройств
  • Навигация по тегам для фильтрации
  • Связанные посты на основе общих тегов
  • SEO-дружественная структура

🔧 Техническая реализация

Скрипт синхронизации (scripts/sync-content.js)

// Возможности:
✅ Создание папки frontend/content/ если нет
✅ Копирование только .mdx файлов
✅ Проверка времени изменения (только новые файлы)
✅ Удаление файлов, которых нет в backend
✅ Статистика синхронизации
✅ Режим watch для автосинхронизации
✅ Обработка ошибок

Утилиты MDX (frontend/lib/mdx.ts)

// Функции для работы с постами:
✅ getAllPosts() - получить все посты
✅ getPosts() - посты с пагинацией и фильтрацией
✅ getPostBySlug() - конкретный пост
✅ getAllTags() - все уникальные теги
✅ getRelatedPosts() - похожие посты
✅ markdownToHtml() - конвертация в HTML
✅ getPostsStats() - статистика постов

Компоненты фронтенда

// Структура компонентов:
📁 components/posts/
├── PostsList.tsx       # Список постов с карточками
├── PostsFilter.tsx     # Sidebar с фильтрацией по тегам  
└── PostsPagination.tsx # Пагинация с URL параметрами

📁 app/
├── page.tsx            # Главная страница
├── posts/page.tsx      # Список постов
└── posts/[slug]/page.tsx # Отдельный пост

📊 Результат

✅ Что работает

  • 🔄 Автосинхронизация контента в реальном времени
  • 📝 Создание постов в админке → мгновенное появление на сайте
  • 🏷️ Фильтрация по тегам с сохранением в URL
  • 📄 Пагинация с навигацией по страницам
  • 🎨 Современный дизайн с shadcn/ui
  • 📱 Responsive для всех устройств
  • Быстрая загрузка с оптимизацией Next.js

🎯 Пример использования

1. Создание поста в админке

1. Открываете http://localhost:5173
2. Нажимаете "Создать пост"
3. Заполняете форму с тегами
4. Сохраняете пост

2. Автоматическая синхронизация

✅ Пост сохраняется в backend/content/new-post.mdx
✅ Скрипт синхронизации автоматически копирует в frontend/content/
✅ Next.js перезагружает страницы
✅ Пост сразу доступен на http://localhost:3000/posts

3. Просмотр на фронтенде

✅ Заходите на http://localhost:3000
✅ Нажимаете "Посмотреть посты"  
✅ Видите новый пост в списке
✅ Можете фильтровать по тегам
✅ Кликаете на пост для чтения

🌟 Следующие шаги

🔄 Уже реализовано

  1. Синхронизация контента backend ↔ frontend
  2. Полноценный фронтенд с современным UI
  3. Фильтрация и пагинация
  4. Красивые страницы постов

🚀 Готово к развитию

  1. 🔜 Поиск по постам (полнотекстовый)
  2. 🔜 RSS лента для подписчиков
  3. 🔜 Комментарии к постам
  4. 🔜 SEO метатеги для лучшей индексации
  5. 🔜 Темная тема для фронтенда

📖 Команды

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

npm run dev          # Запуск всей системы
npm run sync         # Синхронизация контента
npm run sync:watch   # Автосинхронизация
npm run build        # Сборка для продакшна

Разработка

cd admin && npm run dev      # Только админка
cd frontend && npm run dev   # Только фронтенд  
cd backend && npm run dev    # Только API

Проверка

curl http://localhost:3333/health  # Статус API
curl http://localhost:3000/posts   # Фронтенд постов
open http://localhost:5173         # Админка

🎉 Система полностью функциональна!
Создавайте посты в админке и сразу видите их на красивом фронтенде с фильтрацией и пагинацией.

Похожие посты

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