Laravel 12 + Filament 3 admin panel for FusionPBX — Shibganj, Bogura, Bangladesh
| Layer | Technology |
|---|---|
| Framework | Laravel 12 |
| Admin UI | Filament 3 |
| Auth/RBAC | spatie/laravel-permission |
| App DB | SQLite (dev) / MySQL (prod) |
| PBX DB | PostgreSQL (FusionPBX) |
| Theme | Amber #fd9c03 — dark sidebar |
git clone https://github.com/your-org/kazitel-pbx.git
cd kazitel-pbx
composer install
npm installcp .env.example .env
php artisan key:generateEdit .env:
# App
APP_NAME="Kazitel PBX"
APP_URL=http://localhost
# Company strip
COMPANY_NAME="Kazitel"
COMPANY_ADDRESS="Shibganj, Bogura, Bangladesh"
COMPANY_PHONE="+8801XXXXXXXXX"
COMPANY_EMAIL="support@kazitel.io"
# FusionPBX PostgreSQL connection
FUSIONPBX_DB_HOST=127.0.0.1
FUSIONPBX_DB_PORT=5432
FUSIONPBX_DB_DATABASE=fusionpbx
FUSIONPBX_DB_USERNAME=fusionpbx
FUSIONPBX_DB_PASSWORD=your_passwordtouch database/database.sqlite # SQLite only
php artisan migrate
php artisan db:seedphp artisan make:filament-userOr seed one:
php artisan tinker
>>> \App\Models\User::factory()->create(['name'=>'Admin','email'=>'admin@kazitel.io','password'=>bcrypt('secret')]);
>>> $user = \App\Models\User::first();
>>> $user->assignRole('superadmin');npm run build
# or for development:
# npm run dev
php artisan serveOpen http://localhost:8000/admin — login with your admin credentials.
kazitel-pbx/
├── app/
│ ├── Filament/
│ │ ├── Pages/
│ │ │ └── PbxDashboard.php # Main PBX dashboard page
│ │ └── Resources/
│ │ ├── UserResource.php # Laravel users (MySQL)
│ │ └── FusionPBX/ # 117 FusionPBX resources (PostgreSQL)
│ │ ├── Extensions/
│ │ ├── Dialplans/
│ │ ├── Gateways/
│ │ ├── CallCenterQueues/
│ │ └── ... (all FusionPBX modules)
│ ├── Http/
│ │ └── Controllers/
│ │ ├── AuthController.php # Web login/logout
│ │ ├── DashboardController.php # User dashboard
│ │ └── Api/FusionPBX/ # REST API controllers (117 resources)
│ ├── Models/
│ │ ├── User.php # Laravel auth user (SQLite/MySQL)
│ │ └── FusionPBX/ # All FusionPBX models (PostgreSQL)
│ │ ├── BaseFusionPbxModel.php # UUID PKs, insert_date/update_date
│ │ ├── Extension.php
│ │ ├── Gateway.php
│ │ └── ... (all models)
│ └── Providers/
│ ├── AppServiceProvider.php
│ └── Filament/
│ └── AdminPanelProvider.php # All 117 resources + nav groups
├── bootstrap/
│ ├── app.php
│ └── providers.php
├── config/
│ ├── app.php
│ ├── company.php # COMPANY_* env variables
│ ├── database.php # fusionpbx pgsql connection
│ └── permission.php
├── database/
│ ├── factories/
│ ├── migrations/
│ └── seeders/
├── resources/
│ ├── css/
│ │ ├── app.css # Tailwind v4
│ │ └── filament/admin/theme.css # Kazitel amber theme
│ ├── js/
│ │ └── app.js
│ └── views/
│ ├── auth/login.blade.php # Login page
│ ├── company/
│ │ ├── contact.blade.php # /contact
│ │ └── offer.blade.php # /offer
│ ├── dashboard/index.blade.php # /dashboard (post-login)
│ ├── filament/
│ │ ├── admin/topbar/
│ │ │ └── company-strip.blade.php
│ │ └── pages/
│ │ └── pbx-dashboard.blade.php
│ └── layouts/site.blade.php # Public site layout
├── routes/
│ ├── api.php # API + FusionPBX routes
│ ├── api_fusionpbx.php # All 117 FusionPBX REST routes
│ ├── web.php # Web routes
│ └── console.php
├── .env.example
├── composer.json
├── package.json
├── vite.config.js
└── ui-preview.html # Static UI preview (no server needed)
| Group | Resources |
|---|---|
| Accounts | Extensions, Users, Groups, Permissions |
| Dialplan | Dialplans, Destinations, Domains, Number Translations |
| Applications | IVR, Ring Groups, Call Flows, Voicemail, Recordings, Music on Hold |
| Call Center | Queues, Agents, Tiers, FIFO, Follow Me |
| Devices | Devices, Profiles, Vendors, Keys, Lines |
| SIP & Gateways | Gateways, SIP Profiles, Sofia Global Settings |
| Contacts | Contacts, Phones, Emails, Groups, Addresses |
| Messaging | Email Templates, Queues, Fax |
| Reports | XML CDRs, CDR Extensions, Flows, Logs |
| System | Default Settings, Modules, Databases, Variables |
| Administration | Menus, Group Permissions, Event Guard Logs |
All 117 FusionPBX resources are exposed as a REST API under /api/fpbx/*.
GET /api/fpbx/extensions
POST /api/fpbx/extensions
GET /api/fpbx/extensions/{uuid}
PUT /api/fpbx/extensions/{uuid}
DELETE /api/fpbx/extensions/{uuid}
# ... same pattern for all 117 resources
Full route list: routes/api_fusionpbx.php
| Connection name | Driver | Used for |
|---|---|---|
sqlite (default) |
SQLite | Laravel users, sessions, cache, jobs |
fusionpbx |
PostgreSQL | All FusionPBX models (BaseFusionPbxModel) |
Brand color: #fd9c03 (FusionPBX amber)
Theme file: resources/css/filament/admin/theme.css
Key CSS variables:
:root {
--kazitel-accent: #fd9c03;
}- PHP ≥ 8.2
- Node.js ≥ 18
- FusionPBX running on PostgreSQL (accessible from app server)
- SQLite or MySQL for the Laravel app database
MIT © Kazitel