Общая логика
Что это?
Landy - это конструктор лендинг-страниц (landing page builder) с полнофункциональным backend на FastAPI и frontend на React.js. Позволяет пользователям создавать, редактировать и публиковать лендинги через визуальный интерфейс.
Основная концепция
Проект построен на блочной архитектуре:
Каждая страница состоит из блоков
Блоки могут быть созданы из готовых шаблонов или с нуля (zero-blocks)
Все настройки хранятся в JSON и преобразуются в HTML при публикации
Как это работает?
1. Иерархия данных
Пользователь
└── Проекты (projects)
└── Страницы (pages)
└── Блоки (blocks)
├── Блочные шаблоны (block_templates)
└── Zero-блоки (zero_blocks)
└── Слои (zero_layers)2. Основной флоу создания лендинга
Создание проекта - пользователь создает проект с уникальным поддоменом
Создание страниц - в проект добавляются страницы (каждая со своим slug)
Добавление блоков - на страницу добавляются блоки двумя способами:
Из шаблонов - готовые блоки с предзаданной структурой
Zero-блоки - кастомные блоки, создаваемые с нуля через редактор
Настройка блоков - данные и стили блоков хранятся в JSONB
Публикация - статус страницы меняется на
publishedГенерация HTML - блочная структура преобразуется в статический HTML
Публичный доступ - HTML сохраняется в
/storage/published/
3. Модульная структура
Каждый модуль следует единой структуре:
modules/{module_name}/
├── models.py # ORM модели (SQLAlchemy)
├── schemas.py # Схемы валидации (Pydantic)
├── router.py # API эндпоинты (FastAPI)
└── service.py # Бизнес-логика4. Ключевые модули
Auth (аутентификация)
Регистрация и вход пользователей
JWT токены (access: 30 мин, refresh: 7 дней)
Хеширование паролей через bcrypt
Projects (проекты)
Управление проектами лендингов
Каждый проект имеет уникальный поддомен
Привязан к владельцу (user)
Pages (страницы)
Страницы внутри проектов
Статусы:
draft(черновик) илиpublished(опубликовано)Каждая страница имеет title, slug, иконку
Blocks (блоки)
Экземпляры блоков на страницах
Два типа:
Template-based - на основе шаблона
Zero-blocks - кастомные блоки
Упорядочены по позиции
Настройки хранятся в JSONB
Block Templates (шаблоны блоков)
Библиотека готовых блоков
Организованы по категориям
Содержат:
Структуру (дерево HTML элементов)
Данные по умолчанию
Схему настроек
URL превью
Zero Blocks (кастомные блоки)
Продвинутая система создания блоков с нуля
Компоненты:
ZeroBaseElement- базовые типы элементов (текст, кнопка, картинка и т.д.)ZeroBlock- контейнер кастомного блокаZeroLayer- отдельные слои/элементы внутри блокаResponsive настройки для разных breakpoint'ов
Поддержка абсолютного позиционирования
Адаптивный дизайн
Media (медиа)
Загрузка и управление файлами
Поддержка: изображений, видео, документов
Макс. размер: 100MB
Форматы: jpg, jpeg, png, gif, svg, webp, mp4, webm
5. Templ Editor - Инструмент создания шаблонов
Templ Editor - это визуальный drag-and-drop редактор на React для создания шаблонов блоков администраторами.
Назначение
Этот инструмент используется администраторами для создания готовых шаблонов блоков (block_templates), которые затем становятся доступны обычным пользователям при создании лендингов.
Технологии
React 19 - современный фронтенд
Tailwind CSS - для стилизации
Interact.js - drag-and-drop функциональность
Framer Motion - анимации
Create React App в качестве сборщика
Основной функционал
Три режима работы:
Builder Mode - работа с JSON-структурой через дерево элементов
Visual Mode - WYSIWYG редактор с визуальным drag-and-drop
JSON Mode - просмотр и копирование готового JSON
Возможности редактирования:
Drag-and-drop 27+ типов HTML элементов (div, grid, h1-h6, p, button, img, video, и т.д.)
Визуальное перемещение элементов по структуре
Применение Tailwind CSS классов
Настройка editable стилей (цвет, размеры, текст)
Привязка данных к ключам для динамического контента
Конфигурация значений по умолчанию
Копирование/удаление элементов (Ctrl+D, Delete)
Адаптивный превью (Desktop, Tablet, Mobile)
Структура шаблона:
{
template_name: "Название шаблона",
category_id: 1, // Категории
settings: {
structure: [], // Дерево HTML элементов
editableElements: [], // Список редактируемых полей
editableStyles: {} // Настройки стилей
},
default_data: {} // Данные по умолчанию
}Интеграция с Landy
Администратор создает шаблон в Templ Editor
Экспортирует JSON
Загружает через API в основной backend (
POST /api/block-templates)Шаблон появляется в библиотеке для всех пользователей
HTML Generator рендерит эти шаблоны при создании лендингов
Флоу данных:
Templ Editor → JSON Export → Landy Backend API → PostgreSQL
↓
User Landing Pages6. HTML Generator (генератор HTML)
Ключевой компонент (/backend/app/utils/html_generator.py):
Преобразует JSON-структуру блоков в готовый HTML:
Конвертация CSS стилей (camelCase → kebab-case)
Автоматическое добавление единиц
pxдля числовых значенийГенерация inline стилей
Обработка повторяющихся элементов (сетки, списки)
Поддержка медиа-элементов (img, video, audio)
Подстановка данных из настроек блока
Генерация полного HTML с Tailwind CSS
7. API архитектура
RESTful эндпоинты с единым стилем
Префикс для всех роутов:
/api/Полностью асинхронная работа (async/await)
Dependency Injection для БД и аутентификации
Автоматическая валидация через Pydantic
Автогенерация OpenAPI документации (
/api/docs)
8. Аутентификация и безопасность
Регистрация/Вход → Проверка credentials → JWT токен
↓
Запрос к API → Authorization header → Валидация JWT → Доступ к ресурсуJWT токены с коротким временем жизни
Refresh токены для обновления
Bcrypt для хеширования паролей
CORS настройки
Проверка прав доступа к ресурсам
9. Хранение данных
PostgreSQL база данных:
Асинхронное подключение (asyncpg)
Connection pooling (10 соединений, max 20)
Миграции через Alembic
Файловое хранилище:
/storage/media/- загруженные пользователями файлы/storage/published/- сгенерированные HTML страницы
10. Развертывание
Docker Compose - локальная разработка:
PostgreSQL контейнер
Backend контейнер (FastAPI)
Nginx контейнер (reverse proxy)
Ansible - production развертывание:
Автоматическая настройка сервера
Деплой приложения
Настройка SSL (Let's Encrypt)
Основные точки входа
API документация:
http://localhost/api/docsHealth check:
http://localhost/api/healthМедиа файлы:
http://localhost/media/{filename}Backend: порт 8000 (внутри контейнера)
База данных: PostgreSQL порт 5432
Переменные окружения
Конфигурация через .env файл:
DATABASE_URL- строка подключения к PostgreSQLJWT_SECRET_KEY- секрет для JWT токеновJWT_ALGORITHM- алгоритм шифрования (HS256)ACCESS_TOKEN_EXPIRE_MINUTES- время жизни access токенаCORS_ORIGINS- разрешенные источники для CORSMAX_UPLOAD_SIZE- макс. размер загружаемого файла
Резюме
Landy - это полнофункциональный конструктор лендингов с:
Мультипользовательской системой с JWT аутентификацией
Гибкой блочной системой (шаблоны + кастомные zero-блоки)
Продвинутой системой адаптивного дизайна
Серверной генерацией HTML из JSON структур
Управлением медиа-файлами
RESTful API с автодокументацией
Контейнеризованным развертыванием
Автоматизацией инфраструктуры
Архитектура следует принципу разделения ответственности с модульным дизайном, полностью асинхронным I/O и production-ready возможностями.
Последнее обновление