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

Нижче — карта каталогів і за що відповідає кожен. Розуміння цієї структури — половина успіху під час доопрацювання рушія.

```
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/` з контролерами в просторі імен `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; код крос-СУБД.
