diff --git a/README.md b/README.md
index 54c54ce..80e330d 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,723 @@
# Laravel Formster
+
+[](https://packagist.org/packages/ttbooking/formster)
+[](https://github.com/ttbooking/formster/actions/workflows/tests.yml)
+[](https://packagist.org/packages/ttbooking/formster)
+[](https://packagist.org/packages/ttbooking/formster)
+[](LICENSE.md)
+
+**Formster** — это Laravel-библиотека, которая **автоматически генерирует HTML-формы и таблицы-просмотры из любого PHP-объекта или Eloquent-модели**, опираясь на типы свойств. Вам не нужно вручную описывать каждое поле формы: Formster читает структуру объекта из PHPDoc-аннотаций (`@property`), нативных типов PHP или PHP-атрибутов, подбирает подходящий виджет ввода для каждого свойства и берёт на себя обработку отправленных данных.
+
+```blade
+{{-- Вся форма — со всеми полями, подписями и кнопкой «Сохранить» — генерируется одной строкой --}}
+
+```
+
+```php
+// Обработка отправки формы — тоже одна строка
+Route::put('/users/{user}', function (Request $request, User $user) {
+ ActionHandler::update($request, $user)->save();
+
+ return back();
+});
+```
+
+---
+
+## Содержание
+
+- [Возможности](#возможности)
+- [Требования](#требования)
+- [Установка](#установка)
+- [Быстрый старт](#быстрый-старт)
+- [Как это работает](#как-это-работает)
+- [Описание свойств модели](#описание-свойств-модели)
+- [Парсеры свойств](#парсеры-свойств)
+- [Обработчики свойств (Handlers)](#обработчики-свойств-handlers)
+- [Поддерживаемые типы и виджеты](#поддерживаемые-типы-и-виджеты)
+- [Псевдотипы и касты](#псевдотипы-и-касты)
+ - [Color — цвет](#color--цвет)
+ - [DateTimeZone — часовой пояс](#datetimezone--часовой-пояс)
+ - [File — файл](#file--файл)
+ - [Image — изображение](#image--изображение)
+- [Blade-компоненты](#blade-компоненты)
+- [Контроль доступа (политики)](#контроль-доступа-политики)
+- [Локализация](#локализация)
+- [Алиасы](#алиасы)
+- [Конфигурация](#конфигурация)
+- [Создание собственного обработчика](#создание-собственного-обработчика)
+- [Очистка осиротевших файлов](#очистка-осиротевших-файлов)
+- [Фасады и публичный API](#фасады-и-публичный-api)
+- [Тестирование и качество кода](#тестирование-и-качество-кода)
+- [Лицензия](#лицензия)
+
+---
+
+## Возможности
+
+- 🚀 **Формы без шаблонов.** Объявите модель — Formster сам построит редактируемую форму или таблицу-просмотр.
+- 🧠 **Несколько источников метаданных.** Свойства извлекаются из PHPDoc (`@property`), нативных типов PHP (рефлексия) и PHP-атрибутов `#[Aura]` / `#[AuraProperty]`. Источники можно комбинировать.
+- 🧩 **Богатая система типов.** Поддержка union (`A|B`), intersection (`A&B`), nullable, дженериков (`Collection`, `list`, `class-string`) и рекурсивного разбора вложенных классов.
+- 🎛️ **Готовые виджеты** для строк, чисел, дробных, булевых, enum, дат, часовых поясов, цветов, файлов и изображений.
+- 🖼️ **Псевдотипы файлов и изображений** с загрузкой через `Storage`, автоматическими превью (Intervention Image) и очисткой старых файлов.
+- 🔒 **Интеграция с Laravel Gate.** Просмотр и редактирование каждого свойства управляются политиками (`viewPolicy` / `updatePolicy`).
+- 🌍 **Локализация** подписей полей, описаний и enum-значений (из коробки английский и русский).
+- ⚡ **Кэширование** результатов парсинга.
+- 🛠️ **Расширяемость** — собственные обработчики типов генерируются Artisan-командой.
+
+---
+
+## Требования
+
+- PHP **8.2+** (тестируется на 8.2–8.5)
+- Laravel **^12.17 || ^13.0**
+- `intervention/image-laravel` `^1.5 || ^4.0` (для превью изображений)
+
+---
+
+## Установка
+
+```bash
+composer require ttbooking/formster
+```
+
+Пакет использует автообнаружение, поэтому сервис-провайдер и фасады регистрируются автоматически.
+
+При необходимости опубликуйте конфигурацию и/или шаблоны представлений:
+
+```bash
+# конфигурация
+php artisan vendor:publish --tag=formster-config
+
+# Blade-шаблоны виджетов (для кастомизации вёрстки)
+php artisan vendor:publish --tag=formster-views
+```
+
+---
+
+## Быстрый старт
+
+### 1. Опишите модель
+
+Минимально достаточно PHPDoc-аннотаций `@property`. Никаких `$fillable`, кастов или ручного объявления полей формы не требуется — тип в аннотации определяет виджет.
+
+```php
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * @property string $text
+ * @property int $integer
+ * @property bool $flag
+ */
+class Frankenstein extends Model
+{
+ protected $table = 'frankenstein';
+}
+```
+
+### 2. Отрендерите форму или таблицу
+
+```blade
+{{-- Редактируемая форма (метод PUT, кнопка «Сохранить») --}}
+
+
+{{-- Таблица только для просмотра --}}
+
+```
+
+### 3. Обработайте отправку
+
+```php
+use Illuminate\Http\Request;
+use TTBooking\Formster\Facades\ActionHandler;
+use App\Models\Frankenstein;
+
+Route::get('/formster/{model}', fn (Frankenstein $model) => view('table', compact('model')))->name('view');
+Route::get('/formster/{model}/edit', fn (Frankenstein $model) => view('form', compact('model')))->name('edit');
+
+Route::put('/formster/{model}', function (Request $request, Frankenstein $model) {
+ ActionHandler::update($request, $model)->save();
+
+ return redirect()->back();
+})->name('update');
+```
+
+`ActionHandler::update()` сам обходит все свойства модели, применяет нужный обработчик к каждому полю из запроса, учитывает политики доступа и возвращает изменённый объект — остаётся лишь вызвать `->save()`.
+
+---
+
+## Как это работает
+
+Полный цикл «модель → форма → отправка» состоит из трёх этапов.
+
+```
+ ┌─────────────────────┐
+ объект ───► │ PropertyParser │ ──► Aura { properties: AuraProperty[] }
+ │ (phpstan,reflection)│
+ └─────────────────────┘
+ │
+ ▼ для каждого свойства
+ ┌─────────────────────┐
+ │ HandlerFactory │ ──► PropertyHandler (по типу свойства)
+ └─────────────────────┘
+ │
+ ┌──────────────┴───────────────┐
+ ▼ ▼
+ component() → Blade-виджет handle($obj, $request) → запись значения
+ (рендеринг формы) (обработка отправки)
+```
+
+1. **Парсинг.** `PropertyParser::parse($object)` разбирает объект и возвращает агрегат **`Aura`** — описание класса со списком свойств **`AuraProperty`** (имя, тип, читаемость/записываемость, значение по умолчанию, политики доступа).
+2. **Подбор обработчика.** Для каждого свойства `HandlerFactory::for($property)` подбирает первый `PropertyHandler`, чей статический метод `satisfies()` соответствует типу свойства.
+3. **Рендеринг и обработка.** При выводе формы обработчик через `component()` указывает Blade-виджет. При отправке `handle()` приводит значение из `Request` и записывает в объект.
+
+### Ключевые сущности
+
+| Сущность | Назначение |
+| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **`Aura`** | «Аура» класса: краткое (`summary`) и полное (`description`) описание, коллекция свойств (проиндексирована по имени) и политики по умолчанию (`viewPolicy`, `updatePolicy`). Одновременно является PHP-атрибутом уровня класса `#[Aura]`. |
+| **`AuraProperty`** | Описание одного свойства: `readable`, `writable`, `type`, `variableName`, `description`, `hasDefaultValue`/`defaultValue`, `viewPolicy`, `updatePolicy`. Одновременно является атрибутом свойства `#[AuraProperty]`. |
+| **`AuraType`** | Система типов: `AuraNamedType` (именованный/дженерик-тип), `AuraUnionType` (`A |
+
+---
+
+## Описание свойств модели
+
+Formster поддерживает **три способа** объявить свойства, и их можно сочетать (см. [Парсеры](#парсеры-свойств)).
+
+### Способ 1. PHPDoc-аннотации (рекомендуется)
+
+```php
+/**
+ * @property string $name Имя пользователя
+ * @property int $age
+ * @property ?string $bio Может быть null
+ * @property \App\Enums\Status $status
+ * @property-read int $id Только для чтения
+ * @property-write string $password Только для записи
+ */
+class User extends Model {}
+```
+
+- `@property` — свойство доступно и для чтения, и для записи;
+- `@property-read` — только чтение (в форме отображается, но не редактируется);
+- `@property-write` — только запись.
+
+Текст после типа и имени становится описанием поля.
+
+### Способ 2. Нативные типы PHP (рефлексия)
+
+```php
+class Dto
+{
+ public string $name;
+ public int $age = 18; // значение по умолчанию подхватывается автоматически
+ public readonly string $id; // readonly → только для чтения
+ public ?Color $color = null;
+}
+```
+
+### Способ 3. PHP-атрибуты
+
+Для полного контроля над метаданными можно навесить атрибуты `#[Aura]` и `#[AuraProperty]` напрямую:
+
+```php
+use TTBooking\Formster\Entities\Aura;
+use TTBooking\Formster\Entities\AuraProperty;
+use TTBooking\Formster\Entities\AuraNamedType;
+
+#[Aura(summary: 'Профиль', description: 'Данные пользователя')]
+class Profile
+{
+ #[AuraProperty(
+ readable: true,
+ writable: true,
+ type: new AuraNamedType('string'),
+ variableName: 'nickname',
+ description: 'Псевдоним',
+ )]
+ public string $nickname;
+}
+```
+
+---
+
+## Парсеры свойств
+
+За извлечение метаданных отвечают парсеры. Активные парсеры и их порядок задаются опцией `formster.property_parser` (по умолчанию `phpstan,reflection`).
+
+| Драйвер | Источник данных |
+| ---------------------- | ------------------------------------------------------------------------------------------------------------------------- |
+| `aura` | PHP-атрибуты `#[Aura]` / `#[AuraProperty]` |
+| `reflection` | Нативные типизированные `public`-свойства |
+| `phpdoc` | PHPDoc-блок класса через `phpdocumentor/reflection-docblock` |
+| `phpstan` | PHPDoc через `phpstan/phpdoc-parser` — поддерживает дженерики, const-выражения и **рекурсивный разбор вложенных классов** |
+| `aggregate` | Композит: объединяет несколько парсеров |
+| (внутренний) `caching` | Декоратор, кэширующий результат любого парсера |
+
+### Агрегация
+
+Если в `property_parser` указано несколько драйверов через запятую, автоматически используется драйвер `aggregate`. Он последовательно прогоняет объект через каждый парсер и **сливает** результаты через `Aura::merge()`.
+
+> **Порядок важен:** парсеры, идущие позже в списке, имеют приоритет — их непустые значения перекрывают данные предыдущих. Например, при `phpstan,reflection` данные из PHPDoc дополняются и при совпадении перекрываются информацией из нативных типов.
+
+### Кэширование
+
+Результат парсинга кэшируется автоматически (декоратор `CachingParser`). Хранилище и TTL настраиваются через `formster.property_cache`. Ключ кэша: `formster:properties:{драйвер}:{класс}`.
+
+---
+
+## Обработчики свойств (Handlers)
+
+Обработчик (`PropertyHandler`) связывает тип свойства с виджетом и логикой записи. Контракт:
+
+```php
+interface PropertyHandler
+{
+ public static function satisfies(AuraProperty $property): bool; // подходит ли тип
+ public function component(): string; // Blade-виджет
+ public function handle(object $object, Request $request): void; // запись значения
+ public function validate(Request $request): bool; // валидация
+}
+```
+
+`HandlerFactory::for($property)` перебирает обработчики из конфига `formster.property_handlers` и возвращает первый, для которого `satisfies()` вернул `true`. Если ни один не подошёл, используется `FallbackHandler`.
+
+---
+
+## Поддерживаемые типы и виджеты
+
+| Тип свойства | Обработчик | Виджет (Blade) | HTML-поле |
+| --------------------- | --------------------- | ---------------------------- | ----------------------------------- |
+| `bool` | `BooleanHandler` | `form.checkbox` | `` |
+| `int` | `IntegerHandler` | `form.number` | `` |
+| `float` | `FloatHandler` | `form.decimal` | `` |
+| `string` | `StringHandler` | `form.text` | `` |
+| `BackedEnum` | `EnumHandler` | `form.radio` / `form.select` | переключатели или выпадающий список |
+| `DateTimeInterface` | `DateTimeHandler` | `form.datetime` | `` |
+| `DateTimeZone` | `DateTimeZoneHandler` | `form.timezone` | `