1.**Заметки** - создание и просмотр заметок через веб-интерфейс (`app/public/index.php`, модель `App\Models\Note`).
2.**Миграции БД** - версионирование схемы PostgreSQL через `php bin/migrate` и Eloquent.
3.**Логирование запросов** - каждый HTTP-запрос пишется с `method`, `uri`, `status`, `body`.
4.**Статический конфиг с шифрованными значениями** - файлы конфигурации по окружениям (`app/config/*.php`), шифрование значений через `App\Crypto\Encryptor` (openssl AES-256-GCM) и CLI-утилиты.
| `APP_KEY` | base64-ключ длиной 32 байта для AES-256-GCM | - |
Ключ: `.env` в `.gitignore`, а в `.env.example` лежит только плейсхолдер. Сгенерировать и записать ключ в `.env` можно командой `make keygen`. После смены ключа перезапустите приложение (`make up`) и перешифруйте `enc:`-значения - под новым ключом старые не расшифруются.
Файлы конфигурации лежат в `app/config/*.php` (например, `app.php`, `database.php`). Каждый файл возвращает массив с секциями по окружениям; значения окружения накладываются поверх `default` (`array_replace_recursive`):
```php
<?php
return[
'default'=>[
// общие значения для всех окружений
],
'local'=>[
// переопределения для APP_ENV=local
],
'dev'=>[],
'prod'=>[],
];
```
Значения, начинающиеся с `enc:v1:`, расшифровываются автоматически при загрузке конфига. Конверт (`envelope`) имеет вид `enc:v1:` + `base64(iv | tag | ciphertext)`, шифр - `aes-256-gcm` (`App\Crypto\Encryptor`). В не-production окружениях битый шифротекст или отсутствующий ключ деградирует до `null` с предупреждением в лог; в `prod` в этом случае выбрасывается исключение.