MBGDash — Manajemen Dapur
Aplikasi SaaS multi-tenant untuk manajemen operasional dapur makanan bergizi. Mengelola bahan baku, produksi, distribusi ke sekolah, dan pelaporan harian.
Link Demo
Tech Stack
| Layer | Teknologi |
|---|---|
| Framework | Laravel 13.14 / PHP 8.3 |
| Frontend | Bootstrap 5.3.3, Alpine.js 3, Chart.js 4.4 |
| Icons | Bootstrap Icons 1.11 |
| Auth | laravel/ui + spatie/laravel-permission v8 |
| Database | MySQL 8.0 (production + testing, DB terpisah) |
| Build | Vite + npm |
| Testing | Pest v4 + pest-plugin-laravel |
Fitur yang Sudah Dikembangkan
- Login dengan Kode Pengguna + password (bukan email)
- Validasi format kode: alphanumeric dan tanda hubung saja
- Auto-logout user yang dinonaktifkan saat request
- Tracking
last_login_atsetiap login berhasil - Role-based redirect setelah login
- 7 role:
super-admin,support,owner,manager,warehouse,production,courier - 21 permission dengan matrix akses per modul
- UUID v7 untuk semua primary key (optimal InnoDB)
- Auto-generate kode entitas (
USR-001,TNT-001, dst) - Multi-tenant isolation via
TenantScope(application level) - 13 migration dengan composite index optimal per tenant
- MBGDash layout (sidebar dinamis dari
config/nav.php) - Tenant onboarding oleh super-admin (non-public registration)
- Credentials owner ditampilkan sekali setelah onboarding
- CRUD tenant: list, detail, edit, suspend, nonaktifkan
- Model Kitchen dengan HasTenantScope + HasEntityCode
- Feature tests: 32 test, 72 assertions
Menjalankan Tests
Buat database test di MySQL terlebih dahulu:
docker exec mysql-server mysql -u root -ppassword -e "CREATE DATABASE IF NOT EXISTS laravel13_dapurmbg_test;"
Copy .env.testing.example ke .env.testing dan isi kredensial:
cp .env.testing.example .env.testing
# Edit .env.testing dan isi APP_KEY + DB_PASSWORD
Jalankan tests:
php artisan test
Tests menggunakan database MySQL terpisah (
laravel13_dapurmbg_test) — tidak mempengaruhi database production.
Struktur Folder
app/
├── Enums/ # PHP backed enums (status, kategori, tipe)
├── Http/
│ ├── Controllers/Auth/
│ └── Middleware/ # EnsureUserIsActive
├── Models/
│ ├── Scopes/ # TenantScope
│ ├── Traits/ # HasEntityCode, HasTenantScope
│ ├── Tenant.php
│ └── User.php
config/
├── nav.php # Definisi menu sidebar
└── permission.php # Konfigurasi spatie UUID
database/
├── factories/ # TenantFactory, UserFactory
├── migrations/ # 13 migration dengan indexes
└── seeders/ # RoleAndPermissionSeeder, SuperAdminSeeder
docs/
├── PRD_Manajemen_Dapur_SPPG_v1.md
├── TRD_Manajemen_Dapur_SPPG_v1.md
└── features/
├── 01-authentication.md
└── 02-role-permission.md
tests/
└── Feature/
├── Auth/LoginTest.php
├── Middleware/EnsureUserIsActiveTest.php
└── Traits/HasEntityCodeTest.php