nowo-tech / blog-kit-bundle
Reusable Symfony blog kit: multilingual articles, tags, comments, settings, LinkedIn hashtags, and a secured admin CRUD UI.
Package info
github.com/nowo-tech/BlogKitBundle
Type:symfony-bundle
pkg:composer/nowo-tech/blog-kit-bundle
Fund package maintenance!
Requires
- php: >=8.4 <8.6
- doctrine/doctrine-bundle: ^2.10 || ^3.0
- doctrine/orm: ^2.15 || ^3.0
- nowo-tech/audit-kit-bundle: ^1.1
- nowo-tech/form-kit-bundle: ^2.4
- nowo-tech/routing-kit-bundle: ^1.4
- nowo-tech/ui-kit-bundle: ^1.5
- psr/clock: ^1.0
- psr/log: ^1 || ^2 || ^3
- symfony/clock: ^7.4 || ^8.0
- symfony/config: ^7.4 || ^8.0
- symfony/dependency-injection: ^7.4 || ^8.0
- symfony/event-dispatcher: ^7.4 || ^8.0
- symfony/form: ^7.4 || ^8.0
- symfony/framework-bundle: ^7.4 || ^8.0
- symfony/http-foundation: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
- symfony/routing: ^7.4 || ^8.0
- symfony/security-bundle: ^7.4 || ^8.0
- symfony/security-core: ^7.4 || ^8.0
- symfony/security-csrf: ^7.4 || ^8.0
- symfony/translation: ^7.4 || ^8.0
- symfony/twig-bundle: ^7.4 || ^8.0
- symfony/validator: ^7.4 || ^8.0
- symfony/yaml: ^7.4 || ^8.0
- twig/extra-bundle: ^3.12
- twig/string-extra: ^3.12
- twig/twig: ^3.8
Requires (Dev)
- dg/bypass-finals: ^1.11
- friendsofphp/php-cs-fixer: ^3.0
- nowo-tech/phpstan-frankenphp: ^1.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^11.5
- rector/rector: ^2.0
- vincentlanglet/twig-cs-fixer: ^4.0
Suggests
- nowo-tech/ckeditor5-editor-bundle: Rich text body editor in admin article forms.
- nowo-tech/pwa-bundle: Listen to BlogArticlePublishedEvent to send Web Push.
- symfony/flex: Automatic Flex recipe installation
README
⭐ Found this useful? Give it a star on GitHub! It helps us maintain and improve the project.
Reusable Symfony blog kit for multilingual articles, tags, moderated comments, professional listing settings, LinkedIn hashtag sync, and a secured admin CRUD UI composed with UiKit and FormKit.
Compatible with Symfony 7.4+ and 8.x on PHP 8.4+
This bundle is FrankenPHP worker mode friendly.
What is this?
Blog Kit Bundle gives Symfony applications a reusable blog domain backed by Doctrine. Editors manage articles, tags, and settings in a secured admin UI. Visitors browse a public index and article pages, search and filter by tag, and submit comments that wait for moderation. Hosts can hook BlogArticlePublishedEvent (for example Web Push) and sync trailing LinkedIn hashtags into tags.
Features
- Multilingual articles and tags with locale fallback (
es,enby default) - Public index and article routes at
/blogand/blog/{slug} - Moderated comments with staff replies, configurable rate limits, and CAPTCHA strategies
- Optional article HTML sanitizer (
none,strip,allowlist, or a host service) - Admin CRUD for articles, tags, comments, and singleton blog settings
- Paginated or infinite-scroll listing, configurable asides, and card options
- LinkedIn hashtag formatting command
nowo:blog:sync-hashtags BlogArticlePublishedEventafter an article becomes published- Configurable access:
access_roles, manage / moderate / configure roles, customaccess_checker, and object-level publication rules (security.object_access:none/owner/ hostservice) viaBlogKitAccessDenied - Host CSS stack via
web_ui.css_framework(bootstrap5,tailwind,foundation,custom),icon_set, androw_actions_displaywithout forking page templates - Twig namespace
NowoBlogKitBundlewith host override precedence - Symfony Flex recipe and FrankenPHP demo in
demo/symfony8
Quick start
composer require nowo-tech/blog-kit-bundle composer require twig/extra-bundle twig/string-extra
# config/packages/nowo_blog_kit.yaml nowo_blog_kit: user_class: App\Entity\User default_locale: es locales: [es, en] security: access_roles: [ROLE_ADMIN] manage_roles: [ROLE_EDITOR] moderate_roles: [ROLE_MODERATOR] configure_roles: [ROLE_ADMIN] allow_unauthenticated: false # object_access: # strategy: owner web_ui: layout_template: admin/layout.html.twig public_layout_template: base.html.twig css_framework: bootstrap5 icon_set: bootstrap-icons row_actions_display: icon
# config/routes/nowo_blog_kit.yaml nowo_blog_kit: resource: '@NowoBlogKitBundle/Resources/config/routing.yaml'
php bin/console doctrine:migrations:diff php bin/console doctrine:migrations:migrate
Public blog: /blog. Admin: /admin/blog, /admin/blog/tags, /admin/blog/comments, /admin/blog/settings.
Development
make up
make test
make phpstan
make -C demo/symfony8 up
make demo-smoke
Demo default URL: http://localhost:8105.
Documentation
- Installation
- Configuration
- Usage
- Contributing
- Code of Conduct
- Changelog
- Upgrading
- Release
- Security
- Engram
- Spec-driven development
- GitHub Spec Kit
Additional documentation
Tests and coverage
| Area | Status | Command |
|---|---|---|
PHP src/ coverage target |
100% | make test-coverage-100 |
TS/JS src/Resources/assets |
≥90% | make test-ts |
| Unit and bundle QA | Enabled | make test |
| Full release checks | Enabled | make release-check |
- PHP: 100%
- TS/JS: 100%
- Python: N/A
make test
make test-coverage
make test-coverage-100
make test-ts
make assets
make release-check
License
MIT — see LICENSE.
