3/4/2026
Filament CMS as the backend for a subscription platform — a case study
TL;DR: We built a subscription platform (content + Solana payments) with Filament v4 as the admin panel. 3 weeks of development, the client runs it themselves without any training.
Building an admin panel is a task that consumes a disproportionate amount of time relative to its value for the end user. Everyone has their approach — from off-the-shelf solutions like Nova or Orchid, to custom CRUD written in Vue, to dashboards with Blade tables. After experience with several approaches, on this project we chose Filament v4 and have no regrets.
Project requirements
A subscription platform for a TTRPG (tabletop RPG) content creator had specific requirements: content gating per subscription plan with three tiers (free, basic, premium), USDC payments via Solana Pay without fiat intermediaries, an admin panel for a content manager without technical experience, and four user roles with different permissions.
The last requirement was critical — the panel must be intuitive enough that someone unfamiliar with Laravel can add a new article, assign it to a subscription plan, and publish it without reading documentation.
Why Filament
Speed of building CRUD is the main argument. A Resource for each model generates in 10 minutes — php artisan make:filament-resource Article --generate creates a Resource with automatically detected columns from migrations. Table with pagination, add/edit form, filters — all ready. Customizing columns and form fields is a matter of PHP configuration, not writing views.
Livewire as the foundation of Filament means reactive UI without writing a single line of JavaScript. Filters work without page reload, bulk actions on selected records, real-time form validation. For the end user it’s a modern interface; for the developer — clean PHP.
Documentation and community at a level comparable to Laravel itself is not a given in the PHP package ecosystem. Filament has this, and it makes a difference when you hit edge cases.
Role architecture
Four roles (guest, user, subscriber, admin) with different content and panel access rights. For permission management we used the bezhansokhan/filament-shield package, which generates Spatie Permission policies through a Filament graphical interface.
composer require bezhansokhan/filament-shield
php artisan shield:generate --all
After installation, each Resource has an automatically generated policy with a granular permission system: view_any, view, create, update, delete. An administrator can manage role permissions through the UI without modifying code.
Admin preview mode for testing what a subscriber sees — implemented via actingAs() in middleware with a session flag — lets an administrator check how the platform looks from a user’s perspective on a specific plan before publishing changes.
Custom Pages
Two custom pages in the admin panel exceeded what standard Resources could handle.
The subscription management page with manual activation handles cases where a user pays outside the system (bank transfer, voucher). An administrator enters an email and plan, the subscription activates immediately. Implementation as a Filament Page with a form and action:
class ManageSubscriptions extends Page
{
protected static string $view = 'filament.pages.manage-subscriptions';
public function activate(string $email, string $plan): void
{
$user = User::where('email', $email)->firstOrFail();
$user->subscription()->create([
'plan' => $plan,
'activated_at' => now(),
'expires_at' => now()->addMonth(),
]);
Notification::make()->success()->title('Subscription activated')->send();
}
}
Solana payment history with links to the solscan.io explorer — each transaction has a link https://solscan.io/tx/{signature} that opens details in a new tab. The content manager can independently verify payments without any blockchain knowledge.
Lessons learned
Filament v4 has breaking changes compared to v3 and that difference is significant. Before every composer update read the CHANGELOG. This is especially true for the Custom Pages API and the way the panel is registered in AppServiceProvider — this changed between versions.
Testing custom Pages requires separate Feature tests, not Unit tests. Livewire components rendered through Filament Pages don’t test with standard PHPUnit methods — you need Livewire::test() with Livewire Testing or HTTP tests via actingAs()->get('/admin/manage-subscriptions').
Don’t add too many RelationManagers to a single Resource. A Resource page with 4+ relations visible simultaneously slows down noticeably — each relation is a separate SQL query without lazy loading. Split into tabs or separate pages.
Results
The panel was operated by the client from day one of deployment, zero “how do I do this” tickets in the first month. This is rare with a hand-written admin panel.
Development time: 3 weeks total, of which 1 week was consumed by Solana Pay integration and payment testing under various network conditions. The Filament panel itself with the full permission system and custom pages: 2 weeks.
Summary
Filament v4 is the fastest path to a professional admin panel in the Laravel ecosystem. Not for every project — if you need a very custom UI or integration with an existing frontend, write your own. But for a typical SaaS platform with content management, users, and subscriptions, Filament cuts admin panel development time by 60–70%.