Skip to content

Выбор пути: build vs adopt

Статус: рекомендация сформирована. Как строить ядро — с нуля, на готовой Laravel-CMS, гибрид или headless. Вывод: Путь C — своё ядро на Laravel+Filament + агрессивное заимствование готовых пакетов. Дополняет исследование ядер (там — механизмы расширяемости; здесь — стратегия построения).

Актуальный контекст (июль 2026)

Факты, влияющие на выбор:

  • Filament v4 (сер. 2025, schema-система, таблицы в 2–3× быстрее), v5 (янв. 2026, Livewire 4) — штатный стек студии, экосистема зрелая и активная. Целевая версия ядра — ^5.6.6 (нижняя граница совместимости с Laravel 13; ранние 5.x — нет). Стек в целом: Laravel 13 · PHP 8.4 · PostgreSQL 16 — см. канонический стек и целевую платформу.
  • Statamic: Solo бесплатна навсегда (single-user), Pro ~$349/сайт one-time (мультиюзер, роли, ревизии). Модель one-time, но per-site.
  • Twill 3.5 (Laravel 12) — активен, но это CRUD-тулкит, не готовая CMS: нет страниц/меню/SEO как продукта.
  • Lunar 1.x уже на Filament; v2 (alpha, лето 2026) — выделенный Filament-bridge. Ложится на стек студии для e-commerce-модуля.
  • October v4.3 / Winter — активны, но Twig + своя plugin-экосистема, чужеродны Blade+Filament.

Сравнение путей

Оценки ★ (плохо) … ★★★★★ (отлично) под профиль студии: один разработчик, парк managed-сайтов, ориентир Битрикс, штатный Filament+Blade, дистрибуция composer+Satis, центр обновлений с откатом.

КритерийA. Своё с нуляB. Готовая CMS как базаC. ГибридD. Headless
Скорость старта★★★★★★★★★★★★★★
Контроль над ядром★★★★★★★★★★★★★★★★
Парк + центр обновлений★★★★★★★★★★★★★★★
Совместимость с Filament★★★★★★–★★★★★★★
Совместимость с Blade+острова★★★★★★★★–★★★★★★★★★★★
Риск lock-in / лицензии★★★★★★★★★★★★★★
Поддержка одним разработчиком★★★★★★★★★★★
Под drag&drop блоки★★★★★★★★★★★★★★★★★
Обновление парка (composer)★★★★★★★★★★★★★★★★
РФ-специфика (платежи/1С/гео)★★★★★★★★★★★★★★★

Рекомендация: Путь C (гибрид)

Своё ядро на Laravel + Filament + агрессивное заимствование готовых пакетов. Почему остальные проигрывают именно в контексте студии:

Почему не B (готовая CMS как база). Единственный кандидат, экономящий старт — Statamic, но он тянет свой Control Panel вместо Filament (обнуляет главный актив студии) и Pro-лицензию per-site (~$349 × N сайтов — конфликт с масштабированием парка). Botble — CodeCanyon-лицензия и не-composer-native обновления (убивает модель Satis+откат). Winter/October — Twig, ортогональны стеку. Twill — не CMS, а CRUD-тулкит. Взять чужую CMS = отдать контроль над центром обновлений вендору.

Почему не A (чистый велосипед). Писать медиатеку, права, переводы, поиск, бэкапы с нуля силами одного разработчика — годы и вечное сопровождение. Под каждую подсистему в Laravel есть зрелый MIT-пакет от spatie. Переизобретать бессмысленно.

Почему не D (headless). SEO-критичность + Blade+острова прямо противоречат headless: два стека и два артефакта деплоя (PHP-бэк + JS-фронт), удвоение нагрузки на одного разработчика, SSR-возня ради SEO. Для корпоративно-каталожных сайтов server-rendered Blade выигрывает и по SEO, и по стоимости владения.

«Тонкое ядро» ≠ «бедное ядро»

Важное уточнение к нашему принципу «универсальное ядро»: «тонкое» здесь значит не переписывать инфраструктуру, а собирать ядро из готовых пакетов. Ядро остаётся богатым по возможностям (движок полей, события, API, редакторы), но его инфраструктурные части (медиа, права, переводы, поиск, бэкапы) — это зрелые spatie-пакеты, а не свой код. Своим кодом пишем только то, чего нет готового: доменную модель (страницы, блоки, типы контента, мультигород, SEO-слой), контракты расширяемости и центр обновлений.

Что заимствовать из готовых CMS (паттерны, не код)

ИсточникЧто берём
StatamicМодель Bard/Replicator (структурированные повторяемые блоки) как эталон drag&drop-редактора; flat-file для конфигов/шаблонов отдельно от контента; чистая модель ревизий
TwillБлочный редактор (nestable blocks); паттерн «CRUD-триада» (Module = Controller+Request+Repository) для быстрой штамповки сущностей; медиа-slots
October/WinterЛестница расширяемости (тема → компонент → плагин); партиалы/компоненты страницы; версионирование плагинов
BotbleГотовая карта модулей типового корпоративного сайта — как чек-лист скоупа (не код)
Filament v4/v5Schema-driven страницы для конструктора админ-форм блоков — это фундамент, не заимствование
TomatoPHP Filament CMSРеференс «постов/страниц/категорий поверх Filament» — подсмотреть паттерны Resource'ов
Filament Fabricator / CuratorРеференсы page-builder'а на блоках и медиа-менеджера поверх Filament — паттерны для drag&drop-редактора и файлового менеджера ядра

Готовые пакеты — взять, а не писать

Каждый зрелый, преимущественно MIT, composer-native (совместим с Satis и центром обновлений):

ПодсистемаПакетЧто закрывает
Медиатекаspatie/laravel-medialibraryЗагрузка, conversions, responsive; интеграция с Filament
Права/ролиspatie/laravel-permissionRBAC — основа мультиюзерной админки парка
Переводы контентаspatie/laravel-translatableПереводимые атрибуты моделей (мультиязычность per-record)
UI-переводыштатный lang/ + __()Строки интерфейса
Админ-панельfilament/filament (v4/v5)Ресурсы, формы, таблицы, виджеты, tenancy — ядро админки
Теги/категорииspatie/laravel-tagsПолиморфные теги
SEO/sitemapspatie/laravel-sitemapГенерация sitemap; SeoService сверху
Slugspatie/laravel-sluggableАвто-slug из title, unique-логика
Аудитspatie/laravel-activitylogЖурнал изменений — нужен для парка и отката
Бэкапыspatie/laravel-backupБэкап БД+файлов перед обновлением — фундамент отката
Настройкисвой settings-store (донор universal)Каскад БД→config, city/locale-измерение, теговый кеш (три оси); spatie/laravel-settings отклонён — нет city/locale-измерения
Фильтры каталогаspatie/laravel-query-builderФильтрация/сортировка в API островов
Поискlaravel/scout (+ Meilisearch/Typesense)Полнотекст; для PG-only — GIN/tsvector
Модульность (dev)nwidart/laravel-modulesРазработка модулей в монолите; дистрибуция — отдельными пакетами
E-commercelunarphp/lunar (1.x, v2-bridge)Каталог/корзина/заказы/цены — Filament-native, как модуль
Дистрибуцияcomposer/satis (или Private Packagist)Приватный composer-репозиторий — ядро центра обновлений
Обработка изображенийintervention/imageПод medialibrary conversions
Фиче-флагиlaravel/pennantВключение модулей/фич per-site без форков
Health-мониторингspatie/laravel-healthСостояние managed-сайтов (БД, кеш, очереди, диск)
Шина интеграцийsaloonphp/saloonКоннекторы к внешним API: аутентификация, ретраи, моки в тестах — фундамент integration-core
Вебхуки (исх./вх.)spatie/laravel-webhook-server + webhook-clientHMAC-подпись, ретраи с backoff, верификация — закрывают оба вебхук-модуля
Статанализ контрактовlarastan/larastan + Pest arch-тестыЗапреты контракта модуля (env(), Route::, запись в cms_*) — кастомные правила вместо своего анализатора
Скриншот-сверка блоковspatie/browsershotГалерея /_gallery ↔ макет (контракт темы)
Деплой релизовdeployer/deployerМодель releases/+симлинк и dep rollback из центра обновлений
Realtimelaravel/reverbWebSocket для админки/чата (Broadcasting-модуль)
Мониторинг производительностиlaravel/pulseДешёвые метрики сайтов парка → телеметрия флит-дашборда
Контроль cronspatie/laravel-schedule-monitorПровал регулярной задачи виден, а не тих
Деревья (меню/категории/локации)staudenmeir/laravel-adjacency-listРекурсивные CTE вместо самописных parent_id-обходов
XLSX-экспортopenspout/openspoutПотоковые прайс-выгрузки без OOM
История входовrappasoft/laravel-authentication-logТребование кабинетов: сессии, уведомления о новом входе
Мультитенант (под заказ)stancl/tenancyИнфра-модуль мультитенантности — не ядро (anti-goal)
DTO событийspatie/laravel-dataТипизированные semver-стабильные payload событий ядра
JSON-LDspatie/schema-orgТипизированная генерация Schema.org в SEO-ядре
Honeypotspatie/laravel-honeypotЗащита форм ядра (Q8)

РФ-специфика — только своими модулями (готовых нет):

  • Платежи (ЮKassa/Тинькофф/Робокасса) — свой payment-ru; для Lunar — драйвер под его payment-контракт;
  • 1С-обмен — свой integration-1c (CommerceML);
  • Мультигород — своя доменная логика ядра (BelongsToCity + city-scoped роутинг), не пакет.

Итог одной фразой

Стройте богатое собственное ядро на Laravel + Filament, разложенное на composer-пакеты в Satis с семвер-обновлением и откатом (spatie/laravel-backup + laravel/pennant); всю инфраструктуру берите готовыми spatie-пакетами, e-commerce — на Lunar, а у Statamic/Twill/October заимствуйте паттерны блочного редактора и лестницы расширяемости, но не код и не лицензию. Это единственный путь, сохраняющий Filament+Blade-актив, не отдающий центр обновлений вендору и сопровождаемый одним разработчиком.

Внутренняя база знаний студии