# Структура проекта

Ниже — карта каталогов и за что отвечает каждый. Понимание этой структуры — половина успеха при доработке движка.

```
core/        Ядро CMS (каркас, не знает о домене)
modules/     Встроенные модули CMS
plugins/     Плагины (расширения)
templates/   Темы (оформление)
public/      Публичная статика (nginx отдаёт напрямую)
storage/     Временные данные (кеш, логи, загрузки, сессии)
config/      Конфигурация (app.php, database.php, cache.php)
bin/         CLI-команды (bin/celena)
index.php    Точка входа фронта
admin.php    Точка входа админки
install.php  Визард установки
.env         Окружение (креды БД, ключи)
```

## core/ — ядро

| Папка/файл | Назначение |
|------------|------------|
| `Autoloader.php` | PSR-4 автозагрузчик |
| `Kernel.php` | Инициализация приложения, контейнер, сервисы |
| `Container.php` | DI-контейнер (авто-резолвинг через рефлексию) |
| `Config.php` | Загрузка `.env` и файлов `config/*.php` |
| `Http/` | `Router`, `Request`, `Response`, middleware |
| `Database/` | `Connection`, `QueryBuilder`, `Schema`, `Blueprint`, `MigrationRunner` |
| `Template/` | `Engine`, `Compiler`, `TagRegistry`, теги шаблонизатора |
| `Plugin/` | `Hook`, `PluginManager`, `Installer`, `Marketplace` |
| `Security/` | `Auth`, `Csrf`, `Permission`, `Filter`, `RateLimiter` |
| `I18n/` | `Locale`, `Translator` |
| `Support/` | утилиты (`Markdown` и др.) |
| `Mail/`, `Queue/`, `Cache/`, `Ai/` | почта, очередь, кеш, интеграция с ИИ |

## modules/ — встроенные модули

Базовая функциональность CMS. Каждый модуль — папка в `modules/` с контроллерами в namespace `Celena\Module\<Name>\`.

`AdminBase`, `Dashboard`, `Users`, `Pages`, `News`, `Categories`, `Media`, `Menus`, `Comments`, `CustomFields`, `Settings`, `Plugins`, `Seo`, `Search`, `Translations`, `Account`, `Webhooks`, `Banners`, `Docs`, `Ai`, `Cities`.

## plugins/ — плагины

Расширения, которые можно включать/выключать. Структура одного плагина:

```
plugins/<slug>/
├── manifest.json     метаданные (обязательно)
├── plugin.php        точка входа: роуты, хуки, теги (обязательно)
├── src/              PHP-классы (PSR-4 Celena\Plugin\<Slug>\)
├── migrations/       миграции БД
├── templates/        .tpl плагина (админка и фронт)
├── languages/        переводы ru.json/en.json/…
├── assets/           CSS/JS → копируются в public/assets/plugins/<slug>/
└── docs/             Markdown-документация плагина
```

Подробно — [Создание плагина](/docs/code/plugin-create).

## templates/ — темы

Каждая тема — папка с `theme.json` и набором `.tpl`. Активная тема хранится в опции `theme`. На celena.io активна тема `celena-agency`. Подробно — [Создание темы](/docs/code/theme).

## public/ — публичная статика

`nginx` отдаёт эти файлы напрямую, мимо PHP:

```
public/assets/
├── admin/      CSS/JS админки
├── runtime/    общий фронтенд (celena.js, celena.css)
└── plugins/<slug>/   ассеты плагинов (авто-копия из plugins/<slug>/assets/)
```

## storage/ — временные данные

```
storage/
├── cache/tpl/    скомпилированные шаблоны (.php)
├── cache/data/   кеш данных, rate-limit
├── logs/         логи
├── uploads/      загруженные файлы
└── sessions/     файлы сессий
```

> `storage/` лежит вне публично раздаваемого пути — содержимое не отдаётся напрямую.

## config/ и .env

- `config/app.php` — имя, окружение, локаль, сессии.
- `config/database.php` — параметры подключения (читаются из `.env`).
- `config/cache.php` — драйвер кеша.
- `.env` — секреты конкретной установки (НЕ в репозитории): креды БД, ключи API. На локали — PostgreSQL, на проде — MySQL; код кросс-СУБД.
