Cy Logic Insights

Обновление веб-платформы: блочный конструктор страниц, виджеты и настройки темы

В новой версии веб-платформы cylogic страницы создаются на основе блоков, можно определять многократно используемые виджеты, а тема управляется из панели. Подробности в этой статье.

Мы рассматриваем нашу собственную веб-платформу как витрину панелей управления, которые мы разрабатываем для наших клиентов. В этом обновлении мы полностью переработали структуру содержимого страниц: теперь каждая страница состоит из блоков, которые можно упорядочивать, скрывать и изменять их варианты прямо из панели управления. В этой статье рассказывается о масштабе обновления и технических решениях, лежащих в его основе.

Что изменилось?

  • Блочные страницы: блоки Hero, расширенный текст, сетка функций, статистика, FAQ, временная шкала, две колонки, галерея, логотипы партнеров, контактная форма и встроенный контент.
  • Настройки блоков: вариант, фон (стекло, сетка, аврора, градиент), выравнивание, отступы и параметры анимации управляются для каждого блока отдельно.
  • Виджеты: повторяющиеся блоки, такие как призыв к действию «Расскажите о своем проекте» или технологическая строка, определяются один раз и добавляются на нужную страницу по ссылке.
  • Шаблоны страниц: новые страницы с шаблонами лендинга, услуг, кампании и страницы «О нас» начинают создаваться с готовой последовательности блоков.
  • Настройки темы: вариант темы, цвет акцента и интенсивность анимации можно изменить из панели; учитываются предпочтения пользователей с уменьшенным движением.

Модель данных: старые поля сохранены

Для обеспечения плавного перехода без нарушения работы существующих разделов страниц я сохранил старые поля заголовка и тела; когда новое поле контента пусто, интерфейс возвращается к этим полям. Тип блока определен в базе данных как ограниченный список, поэтому в панели невозможно сохранить неопределенный тип блока.

alter table public.page_sections
  add column block_type text not null default 'rich_text',
  add column settings   jsonb not null default '{}'::jsonb,
  add column is_visible boolean not null default true;

alter table public.page_sections
  add constraint page_sections_block_type_check check (block_type in (
    'hero', 'rich_text', 'feature_grid', 'stats', 'cta', 'gallery', 'faq', 'logo_wall',
    'testimonial', 'contact_form', 'embed_html', 'spacer', 'two_column', 'timeline', 'widget_ref'));

Видимость и правила публикации в базе данных

Анонимный посетитель может читать только опубликованные и видимые блоки опубликованных страниц. Это правило определено не в интерфейсе, а в политике Row Level Security в PostgreSQL, поэтому даже тот, кто делает прямой запрос к API, не может видеть черновики или скрытые блоки. Мы применяем этот подход во всех таблицах контента.

Если кнопка «скрыть» работает только в интерфейсе, значит, элемент не скрыт. Правило конфиденциальности должно быть определено там, где существуют данные.

Демо-режим: сайт, работающий даже без подключения

Одной из особенностей платформы является возможность работать без подключения к базе данных. Весь начальный контент создается из одного исходного файла; один и тот же процесс сборки формирует как файл сидинга (seed) базы данных, так и статические демо-данные. Таким образом, среды разработки, тестирования и демонстрации используют один и тот же контент, и изменения в контенте не требуют ручного редактирования в двух местах одновременно.

Доступность и производительность

Блоки доступны для навигации с клавиатуры, аккордеоны FAQ содержат атрибуты ARIA, а анимация учитывает системные настройки уменьшения движения. Тяжелые визуальные эффекты (например, трехмерные сцены hero) загружаются только тогда, когда это поддерживается устройством и браузером.

Что нового в разделе Insights?

С этим обновлением в разделе Insights были запущены категории, теги и ссылки на связанный контент. Новости из внешних источников не могут быть опубликованы без прохождения очереди модерации редактором, а черновики, созданные с поддержкой искусственного интеллекта, не публикуются без проверки редактором. Эти правила также применяются на уровне базы данных.

Что дальше?

В предстоящий период планируется внедрение A/B вариантов на уровне блоков, рабочего процесса перевода для многоязычного контента и улучшений медиабиблиотеки. Мы объявим об этом здесь, как только даты дорожной карты станут окончательными; наш принцип — не преподносить незавершенную функцию как готовую.

Как работают настройки блоков?

У каждого блока есть два поля данных: контент и настройки. Контент хранит локализованные тексты и списки элементов (например, вопросы FAQ), а настройки определяют внешний вид. Схема настроек была намеренно сделана узкой: вариант, фон, выравнивание, отступы и анимация. Произвольный CSS или случайные поля не допускаются, поэтому каждое изменение, сделанное из панели, остается в рамках системы дизайна, а целостность сайта не нарушается.

{
  "variant": "accordion",
  "background": "glass",
  "align": "left",
  "padding": "md",
  "animation": "fade"
}

Альтернативы контента: эксперименты без удаления

При изменении контента блока никому не хочется терять старую версию. В этой версии блоки могут содержать именованные альтернативы контента: сохраняются две версии заголовка или описания одного и того же блока, а в панели выбирается то, какая из них будет опубликована. Это также является основой для запланированных в будущем A/B тестов.

Редактирование на месте в панели управления

Редакторы редактируют блоки не на отдельном экране формы, а прямо на самой странице: нажимая на текст для его ввода, добавляя элементы, меняя порядок путем перетаскивания. В общедоступном представлении этот слой редактирования вообще не загружается, то есть код редактора не передается в браузер посетителя. Это разграничение важно как с точки зрения производительности, так и безопасности.

Аудит и история версий

Каждое изменение блока записывается в журнал аудита с указанием того, кто и когда его изменил; ревизии контента сохраняются, и при необходимости можно вернуться к предыдущей версии. Права на публикацию и права на редактирование разделены: редактор может подготовить черновик, но у него может не быть прав на публикацию. Такое разделение ролей является стандартным в панелях управления наших корпоративных клиентов.

Технологический стек

  • Интерфейс: React, TypeScript, Vite, Tailwind CSS; для анимаций — Motion и GSAP.
  • Данные: Supabase на базе PostgreSQL; права регулируются политиками Row Level Security.
  • Валидация: схемы Zod проверяют как вводимые в форму данные, так и структуру контента.
  • Развертывание: Docker и Nginx; общедоступные страницы предварительно рендерятся во время сборки.

Подход к тестированию

Схема блоков, функции нормализации и общедоступный рендерер проверяются с помощью модульных тестов, а политики базы данных — с помощью SQL-тестов, выполняемых на реальной базе PostgreSQL. Такие правила, как «скрытый блок не виден анонимному пользователю», проверяются не только в интерфейсе, но и в тесте политики. Проверка правила в двух местах — это не избыточность, а осознанный выбор в целях безопасности.

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