Platform

Laravel Addon CMS

Core থাকে ছোট ও স্থিতিশীল, addon নিয়ন্ত্রণ করে ফিচার, আর theme নিয়ন্ত্রণ করে public website।

আমার রোল
System Architect
সময়
২০২৫ - বর্তমান
License
MIT Open Source
Status
Public Repository
Laravel Addon CMS প্রোডাক্ট কভার

এটি কী

Laravel Addon CMS হলো Laravel 12 ভিত্তিক একটি Open-source Content Management System। এর Core Admin Authentication, Media, Page, SEO, Setting, Theme Customization এবং Addon Lifecycle Handle করে। app/Addons-এর প্রতিটি Addon নিজস্ব Route, Controller, Model, Migration, View, Asset ও Admin Menu Register করতে পারে। app/Themes-এর Theme-গুলো Page, Blade View, Asset এবং Admin Panel থেকে Editable Section Register করে। Project-টি MIT License-এ Published এবং নতুন Addon, Theme, Test, Documentation ও UI/UX Improvement-এর Contribution Welcome।

ছোট Laravel Project-এ আগের Client Project Copy করে নতুন কাজ শুরু করা খুব সাধারণ। প্রথম Delivery দ্রুত হলেও পরে Blog, Contact Form, Analytics, Language এবং Theme Code Core-এর সঙ্গে মিশে যায়। তখন Security Patch, Framework Upgrade বা Shared Feature Improve করতে প্রতিটি Project আলাদাভাবে Update করতে হয়।

Laravel Addon CMS এই Repetitive সমস্যাটি Architecture দিয়ে Solve করে। Core শুধু Shared CMS Capability Handle করে। Business Feature থাকে Addon-এ এবং Public Presentation থাকে Theme-এ। ফলে নতুন Project কোনো পুরোনো Codebase-এর Fork না হয়ে প্রয়োজনীয় Package-এর একটি পরিষ্কার Composition হয়।

যা দিয়ে তৈরি

Laravel 12PHP 8.2MySQLBladeComposerViteBootstrapArtisan commands

উল্লেখযোগ্য দিক

  • Database State অনুযায়ী Active Addon ও Theme-এর Service Provider Automatically Register হয়।
  • Addon নিজস্ব Route, Migration, Model, Controller, View, Asset, Sidebar Menu এবং Lifecycle Hook দিতে পারে।
  • Theme Section Class Editable Field Schema Define করে; x-ui Component Content Render এবং Customizer-এর Editing Connection বজায় রাখে।
  • Pushable Section-এর মাধ্যমে Addon একাধিক Theme Page-এ Reusable Frontend Block দিতে পারে।
  • cmsaddoncommands Package Addon, Model, Controller ও Migration তৈরির Artisan Command দেয়।
  • MIT License-এর অধীনে UI/UX, Accessibility, Test, Documentation, Addon এবং Theme Contribution Welcome।

লাইভ প্রোডাক্ট

প্রকাশক KB Zaman.

github.com দেখুন

কেস স্টাডি

Core Fork না করেই Extensible Laravel CMS তৈরি

কেন এই System

Laravel Addon CMS তৈরির মূল কারণ ছিল একই Feature বারবার Copy করার Long-term Cost। Blog, Newsletter, Contact Form বা Analytics শুরুতে Reusable মনে হলেও Client Project-এর ভেতরে ঢোকার পর ধীরে ধীরে Core Code-এর অংশ হয়ে যায়।

এই CMS একটি স্পষ্ট Ownership Boundary তৈরি করে। Core Admin Shell, Setting, Media, SEO, Installer, Theme Content এবং Package Lifecycle Handle করে। ভবিষ্যতের Feature সম্পর্কে Core-এর জানার প্রয়োজন নেই; প্রতিটি Feature নিজের Package, Provider, Route এবং Migration নিয়ে Addon হিসেবে থাকে।

Repository Open-source রাখার উদ্দেশ্যও একই: Laravel Developer যেন Code পড়তে, Modify করতে এবং পরিচিত Framework Convention ব্যবহার করে System Extend করতে পারেন। এটি কোনো Closed SaaS Product নয়; এটি একটি Practical এবং Extensible Foundation।

System Flow

Database ঠিক করে Application কী Load করবে

Application Boot হওয়ার সময় addons এবং themes Table আছে কি না Check করে। Install Complete থাকলে addons Table থেকে Active Record নিয়ে app/Addons/{AddonName}/{AddonName}ServiceProvider Register করা হয়। একইভাবে active_theme Setting থেকে app/Themes/{ThemeName}/{ThemeName}ServiceProvider Load হয়।

এই Design-এর ফলে Addon Activate করতে Config File Change করতে হয় না এবং Theme Switch করতে নতুন Deploy লাগে না। Admin State Change হলে Route, View Namespace, Sidebar Item, Page এবং Section Configuration-ও Change হয়।

ThemeContent Database-এ Section Content রাখে এবং Runtime-এ Cache করা হয়। Admin Customizer Section Class-এর Field Definition থেকে Form তৈরি করে। Public Page-এর x-section-loader Active Page Section-এর Blade View Load করে; সেই View-এর x-ui Component Saved Content Render করে এবং Editing Hook বজায় রাখে।

Addon Development

একটি Addon হলো Application-এর ভেতরে Self-contained Laravel Feature Package

Addon সাধারণত Service Provider, Activator, composer.json Metadata, Route, Controller, Model, Migration, View এবং Asset নিয়ে গঠিত। cmsaddoncommands Package এই Repetitive Structure Scaffold করে।

Terminalbash
# Addon-এর Initial Structure তৈরিphp artisan make:addon Blog # Model, Migration ও Controller তৈরিphp artisan addon:model Blog Post -mphp artisan addon:controller Blog PostControllerphp artisan addon:migration Blog create_posts_table # শুধু Blog Addon-এর Migration Run বা Rollbackphp artisan addon:migrate Blogphp artisan addon:migrate:rollback Blog

Route, View এবং Admin Menu Register করা

app/Addons/Blog/BlogServiceProvider.phpphp
<?php namespace App\Addons\Blog; use App\Lib\Sidenav;use Illuminate\Support\ServiceProvider; class BlogServiceProvider extends ServiceProvider{    public function boot(): void    {        $this->loadRoutesFrom(__DIR__.'/routes/cms_blog.php');        $this->loadViewsFrom(__DIR__.'/views', 'Blog');         Sidenav::add(            'Content',            'Blog posts',            'admin.blog.index',            'ph ph-article'        );    }}
  • Addon Nickname, Folder এবং Service Provider Prefix একই রাখুন।
  • Database Change Addon Migration Directory-তে রাখুন, যাতে Activation ও Deletion Reversible থাকে।
  • অন্য Addon বা Active Theme-এর File সরাসরি ব্যবহার না করে নিজস্ব View Namespace ব্যবহার করুন।
  • Distribution-এর আগে required_addons এবং required_system_version সঠিকভাবে Declare করুন।
  • Migration দিয়ে করা যায় না এমন Lifecycle Work-এর জন্যই Activator Hook ব্যবহার করুন।

Theme Development

Theme Page, Section এবং Presentation-এর Owner

Theme-এর Service Provider Route ও Theme Namespace-এর View Load করে। theme_configuration Callback-এর ভেতরে প্রতিটি Section Class Register করা হয় এবং register_pages দিয়ে Customizer-এর জন্য Public Page Declare করা হয়।

Section Class-এর Static register Method Active $themeConfig Instance গ্রহণ করে। addSection-এ Section Metadata এবং addField-এ প্রতিটি Editable Field-এর Type, Key, Label ও Default Value দেওয়া হয়।

app/Themes/YourTheme/Lib/HeroSection.phpphp
<?php namespace App\Themes\YourTheme\Lib; class HeroSection{    public static function register($themeConfig): void    {        $themeConfig->addSection([            'key' => 'hero_section',            'pages' => ['home'],            'position' => 1,            'title' => 'Hero Section',        ]);         $themeConfig->addField('hero_section', [            'type' => 'text',            'key' => 'heading',            'label' => 'Heading',            'default' => 'Build something useful',        ]);         $themeConfig->addField('hero_section', [            'type' => 'image',            'key' => 'image',            'label' => 'Hero Image',            'size' => '1200x800',            'accept' => '.png,.jpg,.jpeg,.webp',            'default' => load_image(                'app/Themes/YourTheme/assets/images/hero.jpg'            ),        ]);    }}

Blade View-এ CMS Component ব্যবহার

app/Themes/YourTheme/views/sections/hero_section.blade.phpblade
<section class="hero-section">    <div class="container">        <div class="hero-content">            <h1>                <x-ui.text                    section="hero_section"                    key="heading"                />            </h1>        </div>         <x-ui.img            class="img-fluid"            section="hero_section"            key="image"            alt="Hero image"        />    </div></section>

x-ui.text, x-ui.img, x-ui.a এবং x-ui.repeater শুধু Output Component নয়। এগুলো Saved Theme Content Resolve করার পাশাপাশি Customizer-এর Editing Hook বজায় রাখে। তাই $content Array থেকে সরাসরি Value পড়া এই CMS-এর সঠিক Convention নয়।

  • Service Provider Route, View, Page এবং Section Class Register করে।
  • Lib Directory Admin Customizer-এর Editable Field Schema Define করে।
  • views/sections-এ প্রতিটি Registered Section Key-এর Blade View থাকে।
  • views/slices Repeater Item, যেমন Testimonial বা Service Card Render করে।
  • config.json ও screenshot.png Admin Panel-এ Theme পরিচয় করায়।
  • assets Directory Theme-এর CSS, JavaScript, Image এবং Font রাখে।

Engineering Decision

Laravel Developer-এর পরিচিত Convention ধরে রাখা হয়েছে

Service Provider, Route File, Blade View, Migration, Artisan Command এবং Composer Metadata ব্যবহার করাই এই Architecture-এর প্রধান সুবিধা। System Extend করতে Developer-কে আরেকটি Private Framework শিখতে হয় না।

Addon Activation-এর সময় নির্দিষ্ট Migration Path Run করা হয়। Deletion-এর সময় Migration Rollback, Activator Delete Hook, Addon Directory Removal এবং Database Record Cleanup হয়। এই Lifecycle সহজ হলেও Automated Test এবং Failure Recovery আরও শক্তিশালী করা দরকার।

UI/UX Trade-off

Architecture-এর তুলনায় Interface এখনো কম Mature

Project-এর বর্তমান UI/UX সবচেয়ে Strong Part নয়। শুরুর দিকের বড় অংশ Addon Boundary, Theme Registration, Migration Lifecycle, Configurable Content এবং Laravel Developer-এর জন্য Code Readability তৈরিতে ব্যয় হয়েছে।

এই Priority System-কে Extensible করেছে, কিন্তু Admin Customizer, Media Manager, Addon Screen এবং Theme Control-এ আরও পরিষ্কার Interaction, Accessibility এবং Visual Polish দরকার। ভালো একটি Design Pass Architecture বদলাবে না; বরং Non-technical User-এর জন্য একই System আরও সহজ ও বিশ্বাসযোগ্য করবে।

Open Source

কোন Contribution সবচেয়ে বেশি Value যোগ করবে

MIT License-এর এই Project-এ Contribution Welcome। Documentation, Hosting Instruction, UI Polish, Accessibility, Validation, Automated Test, নতুন Theme Section, Complete Theme এবং নির্দিষ্ট কাজের Addon—সবই Valuable Contribution।

বড় Rewrite-এর চেয়ে একটি নির্দিষ্ট Admin Workflow, একটি Test Gap, একটি Documentation Problem বা একটি Reusable Section নিয়ে ছোট Pull Request Review ও Maintain করা সহজ। এই ধরনের Contribution Extension Model-কে পরিষ্কার রাখে।


প্রশ্ন

Laravel Addon CMS নিয়ে মানুষ যা জিজ্ঞেস করেন

Laravel Addon CMS কী?
এটি Laravel 12 ভিত্তিক একটি Open-source CMS। Core Shared CMS Behavior Handle করে, Addon Feature যোগ করে এবং Theme Public Website ও Editable Section দেয়।
Addon ও Theme কীভাবে Load হয়?
Application Boot-এর সময় Database থেকে Active Addon পড়ে Matching Service Provider Register করা হয়। active_theme Setting থেকে একইভাবে Theme Service Provider Load হয়।
নতুন Addon কীভাবে তৈরি করব?
php artisan make:addon YourAddon দিয়ে শুরু করুন। এরপর addon:model, addon:controller এবং addon:migration Command ব্যবহার করে Feature Class তৈরি করুন এবং Service Provider-এ Route, View ও Menu Register করুন।
নতুন Theme কীভাবে তৈরি করব?
app/Themes/YourTheme-এ Service Provider, Route, View, Asset এবং Lib Section Class তৈরি করুন। theme_configuration-এর ভেতরে Section Class Register করুন এবং Blade View-এ x-ui Component ব্যবহার করুন।
বর্তমান UI/UX কি Final?
না। বর্তমান Interface ব্যবহারযোগ্য, তবে এখন পর্যন্ত Coding Structure ও Extensibility বেশি গুরুত্ব পেয়েছে। UI/UX, Accessibility এবং Admin Workflow Improvement Contribution-এর গুরুত্বপূর্ণ Area।
এই Project-এ Contribution করা যাবে?
হ্যাঁ। Project MIT Licensed। Bug Fix, Test, Documentation, UI Improvement, Addon, Theme এবং Theme Section-এর Focused Pull Request Welcome।

পরের প্রোডাক্ট
Kothay