Di artikel ini, kita akan melanjutkan pembuatan Website Laundry Management System SaaS dengan Laravel 12, dari lanjuatan artikel Bagian 1. Untuk kalian yang belum membaca dari bagian 1 bisa klik link berikut : BAGIAN 1
Instalasi dan Konfigurasi Filament untuk Dashboard Admin SaaS Laundry
Nah sekarang kita masuk ke bagian yang exciting banget – instalasi Filament! Kalau kamu pernah struggle bikin admin dashboard dari scratch, Filament ini bakal jadi game-changer total. Package ini akan transform Laravel application kita menjadi admin panel yang super modern dan powerful dengan effort yang minimal. Di section ini, kita akan setup Filament dari awal sampai konfigurasi basic untuk manage data laundry business kita.
Mengapa Filament adalah Pilihan Terbaik
Sebelum kita diving ke installation, mari kita appreciate dulu kenapa Filament itu brilliant untuk project SaaS kita. Filament built dengan philosophy “convention over configuration” yang artinya banyak things yang works out of the box tanpa kita perlu setup manual. UI/UX yang dihasilkan itu modern banget dengan design system yang consistent, responsive mobile-first approach, dan accessibility yang proper.
Yang lebih keren lagi, Filament punya ecosystem yang complete – dari basic CRUD operations, advanced filtering dan searching, sampai complex widget system untuk analytics dashboard. Untuk SaaS laundry management kita, ini perfect banget karena kita butuh interface yang bisa handle multiple data types seperti customers, orders, employees, branches, dan financial reports dengan user experience yang intuitive.
Installing Filament Package
Mari kita mulai dengan install Filament package melalui Composer. Package utama yang kita butuhkan adalah filament/filament yang include semua core functionalities:
composer require filament/filament
Command ini akan download Filament beserta semua dependencies-nya. Process installation biasanya butuh beberapa menit karena Filament punya quite a few dependencies untuk UI components, form builders, dan table builders yang sophisticated.
Setelah installation selesai, kita perlu publish dan run migrations untuk Filament. Filament butuh beberapa database tables untuk storing configuration dan user preferences:
php artisan filament:install --panels
Command ini akan:
- Publish Filament configuration files ke config/filament.php
- Create default admin panel configuration
- Setup routing untuk admin interface
- Install necessary service providers
Kalau command di atas tidak available (tergantung Filament version), alternative command adalah:
php artisan vendor:publish --tag=filament-config
php artisan migrate
Konfigurasi Basic Filament
Setelah installation, kita perlu setup basic configuration di config/filament.php. File ini control berbagai aspects dari admin panel behavior:
<?php
return [
'default' => env('FILAMENT_DEFAULT_PANEL', 'admin'),
'panels' => [
'admin' => [
'id' => 'admin',
'path' => env('FILAMENT_ADMIN_PATH', 'admin'),
'domain' => env('FILAMENT_ADMIN_DOMAIN'),
'homeUrl' => '/',
'brandName' => 'SaaS Laundry Management',
'brandLogo' => null,
'brandLogoHeight' => '2rem',
'favicon' => null,
'colors' => [
'primary' => 'blue',
'gray' => 'slate',
],
'font' => 'Inter',
'middleware' => [
'web',
'auth:sanctum',
],
'authGuard' => 'web',
'pages' => [
'health-check' => \\Filament\\Pages\\HealthCheckPage::class,
],
'widgets' => [
\\Filament\\Widgets\\StatsOverviewWidget::class,
\\Filament\\Widgets\\ChartWidget::class,
],
],
],
];
Configuration ini set up admin panel di path /admin dengan branding untuk SaaS Laundry Management system kita. Kita juga define color scheme yang professional dan middleware yang appropriate untuk authentication.
Membuat User Admin Pertama
Sekarang kita perlu create admin user yang bisa access dashboard. Filament provide convenient command untuk ini:
php artisan make:filament-user
Command ini akan prompt kita untuk input user details:
Name: Super Admin
Email address: admin@saaslaundry.com
Password: [enter secure password]
Pastikan kamu remember credentials ini karena akan digunakan untuk first login ke admin dashboard. Email dan password ini akan di-store di users table dengan proper hashing untuk security.
Alternative approach, kita bisa create admin user via database seeder. Create file database/seeders/AdminSeeder.php:
<?php
namespace Database\\Seeders;
use Illuminate\\Database\\Seeder;
use App\\Models\\User;
use Illuminate\\Support\\Facades\\Hash;
class AdminSeeder extends Seeder
{
public function run()
{
User::firstOrCreate(
['email' => 'admin@saaslaundry.com'],
[
'name' => 'Super Admin',
'email' => 'admin@saaslaundry.com',
'password' => Hash::make('SecurePassword123!'),
'email_verified_at' => now(),
]
);
}
}
Kemudian run seeder:
php artisan db:seed --class=AdminSeeder
Testing Admin Dashboard Access
Sekarang mari kita test apakah Filament sudah properly installed. Start development server kalau belum running:
php artisan serve
Buka browser dan navigate ke http://localhost:8000/admin. Kamu should melihat Filament login screen yang modern dan clean. Login menggunakan credentials yang kamu create tadi.
Setelah successful login, kamu akan redirected ke Filament dashboard yang show basic widgets dan navigation menu. Interface-nya sleek banget dengan sidebar navigation, user dropdown di top-right corner, dan main content area yang ready untuk kita customize.
Creating Basic Models untuk Laundry Business
Sebelum kita bisa manage data laundry di Filament, kita perlu create models yang represent business entities. Mari kita start dengan fundamental models:
Customer Model:
php artisan make:model Customer -m
Edit migration file database/migrations/create_customers_table.php:
<?php
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('customers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique()->nullable();
$table->string('phone');
$table->text('address');
$table->enum('customer_type', ['regular', 'vip', 'corporate']);
$table->decimal('total_spent', 10, 2)->default(0);
$table->integer('total_orders')->default(0);
$table->date('last_visit')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('customers');
}
};
LaundryOrder Model:
php artisan make:model LaundryOrder -m<br>Edit migration file untuk orders:
<?php
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('laundry_orders', function (Blueprint $table) {
$table->id();
$table->string('order_number')->unique();
$table->foreignId('customer_id')->constrained()->cascadeOnDelete();
$table->foreignId('branch_id')->constrained()->cascadeOnDelete();
$table->enum('service_type', ['wash_only', 'wash_iron', 'dry_clean', 'express']);
$table->decimal('weight', 5, 2);
$table->decimal('price_per_kg', 8, 2);
$table->decimal('total_amount', 10, 2);
$table->enum('status', ['pending', 'processing', 'ready', 'delivered', 'cancelled']);
$table->datetime('pickup_date');
$table->datetime('delivery_date')->nullable();
$table->text('special_instructions')->nullable();
$table->json('items_detail')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('laundry_orders');
}
};
Branch Model:
php artisan make:model Branch -m
Migration untuk branches:
<?php
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('branches', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('code')->unique();
$table->text('address');
$table->string('phone');
$table->string('manager_name');
$table->time('opening_time');
$table->time('closing_time');
$table->json('operating_days'); // ['monday', 'tuesday', etc]
$table->boolean('is_active')->default(true);
$table->decimal('monthly_target', 12, 2)->default(0);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('branches');
}
};Run migrations untuk create tables:
php artisan migrateJika semua sudah clear sesuai dengan arahan diatas, kalian bisa melanjutkan ke Bagian 3, tetapi jika masih bingung atau ada yang error bisa langsung komen dibawah ya kakak-kakak ku:)
Yuk Lanjut BAGIAN 3!



















