Introduction
Welcome to the Filament CMS Pro enterprise-grade developer documentation. Filament CMS Pro is a complete, stable, high-performance visual content management plugin package built for Laravel 10/11 and Filament v5. It is designed to provide full-fledged, multi-lingual publication lifecycles, visual drag-and-drop workspace layout building, and advanced server-side telemetries.
Technical Features Mapping
| Capability | Backend Engine Class | Configuration Parameter |
|---|---|---|
| Editorial Workflow | Nepal360\FilamentCmsPro\Workflow\WorkflowService |
workflow.enabled |
| Visitor Analytics | Nepal360\FilamentCmsPro\Http\Middleware\TrackVisitorAnalytics |
analytics.enabled |
| Post Revisions Rollback | Eloquent saved model events + custom relation managers | Automatic database triggers |
| Concurrent Editing Lock | EditPost page mount checks + ContentLock Eloquent hooks |
15 minutes automatic expiry |
| Webhooks Engine | Nepal360\FilamentCmsPro\Jobs\DeliverWebhookJob |
Queued job execution |
Installation & CLI Commands
Because the package is hosted on GitHub rather than Packagist, tell Composer how to resolve the repository by editing your Laravel application's composer.json first:
Step 1: Add VCS Repository in Laravel composer.json
"repositories": [
{
"type": "vcs",
"url": "https://github.com/Tsrgtm/Filament-CMS-PRO.git"
}
]
Step 2: Install Composer Dependency
composer require nepal360/filament-cms-pro:dev-main
Step 3: Publish Package Configs & Database Migrations
php artisan vendor:publish --tag="filament-cms-pro-config"
php artisan vendor:publish --tag="filament-cms-pro-migrations"
php artisan vendor:publish --tag="filament-cms-pro-views"
Step 3: Run Database Migrations
php artisan migrate
Configuration Guide
Publishing the config publishes config/filament-cms-pro.php. Define the settings mapping:
return [
'workflow' => [
'enabled' => true,
'slack_webhook_url' => env('CMS_SLACK_WEBHOOK_URL'),
],
'analytics' => [
'enabled' => true,
'gravity' => 1.8,
'exclude_paths' => [
'admin*',
'api/v1/analytics*',
],
],
'comments' => [
'auto_approve' => false,
'spam_check' => true,
],
'cache' => [
'ttl' => 86400,
],
];
Filament Plugin Registration
Register the plugin inside your panel provider class (usually app/Providers/Filament/AdminPanelProvider.php) to automatically register all visual resources, widgets, and pages in the Filament workspace:
use Nepal360\FilamentCmsPro\FilamentCmsProPlugin;
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin')
->plugins([
FilamentCmsProPlugin::make(),
]);
}
Gutenberg Visual Block Editor
The visual content workspace utilizes visual visual block builders inside the PostResource translation forms. The visual blocks correspond to Blade view templates:
- Paragraph: Textarea input rendered inside `components/blocks/paragraph.blade.php`.
- Heading: Text inputs with a level option rendered inside `components/blocks/heading.blade.php`.
- Image: Visual upload file input with captions rendered inside `components/blocks/image.blade.php`.
- CTA Button: URL target link with primary/secondary styles inside `components/blocks/cta.blade.php`.
- FAQ Accordion: Accordion lists of questions and answers inside `components/blocks/faq.blade.php`.
- TikTok Embed: Social media video cards mapping the embed code inside `components/blocks/tiktok.blade.php`.
Editorial Workflow Gating
Post status transitions are managed by the service provider's state machine. The allowed transitions map sequence is:
If a transition is attempted outside this matrix (or if fact-checking is bypassed without approval), a validation exception is thrown. Scheduled posts are processed every minute using the scheduling command:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Non-Intrusive Server-Side Analytics
Visitor analytics are tracked directly on the server side via the `TrackVisitorAnalytics` middleware, avoiding Google Search Console core web vitals speed score degradation:
- GDPR Cookieless tracking: Unique users are recognized by matching their daily fingerprint hash:
hash('sha256', config('app.key') . $ip . $userAgent). - Zero Latency: DB recording is executed using queued background jobs (via the `LogAnalyticsEvent` job).
- Trending Calculations: Calculated with gravity decay over hours: $$\text{Trending Score} = \frac{\text{views}_{24\text{h}} + 0.5 \times \text{views}_{7\text{d}}}{(\text{Age in Hours} + 2)^{1.8}}$$
Post Translation Revisions
Every time a post translation record is modified, the database model automatically triggers revision logs inside the `revisions` table, tracking: locale, title, content blocks array, and the editing User ID.
In the post editing form, the Revision History relation manager list displays all past edits. Clicking Restore replaces the active translation attributes with the select log, updating the draft visual canvas instantly.
Concurrent Editing Protection (Content Locks)
When an editor opens the edit page for a post, a content lock is recorded for that post and editor. The lock stays active for 15 minutes.
If another editor attempts to open the edit page for the same post, the page redirects to the post list immediately, displaying a danger notification indicating which administrator is editing the post.
Webhooks Delivery System
Registered webhook targets receive JSON payloads triggered by post publishing, updates, deletions, and workflow state changes. Payload delivery is handled via queued background tasks with standard exponential backoff retries.
Webhook Signature Verification (HMAC SHA-256)
If a secret key is specified, requests include an X-CMS-Signature header. Verify payload signatures in your receiver applications:
$secret = 'your_configured_webhook_secret';
$payload = file_get_contents('php://input');
$receivedSignature = $_SERVER['HTTP_X_CMS_SIGNATURE'] ?? '';
$computedSignature = hash_hmac('sha256', $payload, $secret);
if (hash_equals($computedSignature, $receivedSignature)) {
// Signature is valid. Process webhook payload safely.
} else {
// Signature verification failed! Reject request.
}
Multi-lingual Taxonomy (Categories & Tags)
Tags and Categories tables support fully translatable translations, avoiding database clutter. Administrators manage hierarchy categories using the category panel resource, defining parent relationships and display sort order values.
Article Layout Templates
Define custom templates inside the `templates/` views. The package searches for overrides in your application path `resources/views/vendor/filament-cms-pro/templates/[layout_template].blade.php` before loading default templates.
Headless REST API
Get Posts List
GET /api/v1/posts?category=travel&tag=nepal&sort=trending HTTP/1.1
Host: your-cms-domain.com
X-Locale: en
Accept: application/json
Response JSON Payload
{
"current_page": 1,
"data": [
{
"id": 12,
"featured_image": "posts/travel-guide.jpg",
"layout_template": "standard",
"trending_score": 12.45,
"status": "published",
"published_at": "2026-06-07T10:00:00Z",
"translations": [
{
"locale": "en",
"title": "Stunning Trekking Routes in Nepal",
"slug": "stunning-trekking-routes-in-nepal",
"content": [
{
"type": "paragraph",
"data": {
"text": "Detailed visual trekking outlines."
}
}
]
}
]
}
]
}