Привет, Хабр! Меня зовут Алексей, и я разрабатываю BloggyCMS — систему управления контентом, которая выросла из маленького пет-проекта во что-то гораздо более серьёзное.

Это первый пост, и я хочу рассказать не столько о фичах (хотя их много), сколько о пути: как желание сделать «просто блог на PHP» привело к архитектуре, которой я теперь горжусь.
С чего всё началось
Два года назад мне понадобился блог. WordPress? Слишком жирно. OctoberCMS? Интересно, но хотелось своего. Я сел и написал за пару вечеров простейший движок:
index.php— список постов.post.php— один пост.admin.php— форма сtextareaдля текста
Это работало. Но мне стало скучно.
Точка невозврата: «А давайте добавим блоки»
Первым серьёзным архитектурным вызовом стала идея сделать контент постов составным. Не просто текст с HTML-тегами, а перетаскиваемые блоки: заголовок, текст, изображение, галерея, цитата.
Я начал проектировать систему PostBlocks. И вот тут пришлось резко взрослеть:
Потребовался роутер с поддержкой динамических параметров.
Нужна была система событий, чтобы плагины могли влиять на рендеринг блоков.
Появилась необходимость в API для AJAX-запросов из админки.
Маленький блог превращался в конструктор страниц.

Что получилось в итоге
Сейчас BloggyCMS — это не просто бложик, а полноценная CMS с открытым кодом. Вот что под капотом:
Архитектура на уровне фреймворков
Я не стал изобретать велосипед, а взял лучшие практики:
MVC с тонкими контроллерами и паттерном Action (один класс — одно действие).
DI — база данных пробрасывается через конструкторы, никаких
global $dbХуки и фильтры в стиле WordPress:
Event::trigger()иEvent::filter()API-first подход: любую модель можно дёрнуть через единый хелпер
API::Post_getById()
Безопасность с первого дня
PDO + Prepared Statements везде. SQL-инъекции исключены.
XSS-защита: хелпер
html()используется систематически в шаблонах.RBAC: права на основе групп пользователей, гибкая настройка видимости контента.
Page Builder внутри
Блоки контента — это отдельные PHP-классы, наследующие BasePostBlock. Каждый блок умеет:
Рендерить свою форму настроек в админке.
Обрабатывать и валидировать данные перед сохранением.
Выводить себя на фронтенде с учётом пресетов (сохранённых шаблонов).
Давать SEO-рекомендации (например, «H1 слишком короткий»).
В админке это выглядит как современный визуальный редактор с превью блоков, фильтрацией по категориям и поддержкой drag-and-drop.
Кастомные поля без плагинов
В WordPress для этого нужен ACF. В BloggyCMS — встроенная система полей с поддержкой типов:
Строка, текст, число, дата, цвет.
Выпадающие списки, чекбоксы, повторители (repeater).
Изображения, иконки.
Поля автоматически появляются на странице создания поста и могут выводиться через шорткоды.
Почему я решил открыть код
Я долго сомневался. Это же мой код, мой стиль, мои решения. Но в какой-то момент понял:
Обратная связь от сообщества бесценна. Уже нашлись баги, которые я сам не видел.
Портфолио. Такой проект говорит о разработчике больше, чем строчка в резюме.
Помощь другим. Я сам учился на открытых проектах. Пора отдавать долг.
Что дальше?
Сейчас CMS стабильна, но до версии 1.0 есть что дорабатывать:
Кеширование мета-данных (события, карта моделей).
Унификация систем полей (остался технический долг с ранних версий).
Документация для разработчиков плагинов и тем.
Буду рад звёздочкам на GitHub, issues и пулл-реквестам. Проект открыт и живёт по адресу:
👉 github.com/pechoradev/BloggyCms
В следующих постах расскажу подробнее про архитектуру блоков, систему событий и API. Если интересно — подписывайтесь!