1
Ringkasan Proyek
dewakoding-project-management adalah aplikasi manajemen proyek di atas Laravel 12 dan Filament 4. Satu panel Filament ber-id admin menjadi tempat kerja tim internal, sedangkan klien luar memakai rute external/{token} yang berdiri di luar panel itu. README menyebut aplikasi ini sebagai "A Laravel Filament 4 application for managing projects with ticket management and status tracking" (README.md:101).
Peta modul
Panel admin mendaftarkan seluruh komponennya lewat discoverResources, discoverPages, dan discoverWidgets, lalu menambahkan Dashboard bawaan serta plugin FilamentShieldPlugin. Panel juga mengaktifkan ->spa(), ->databaseTransactions(), dan tema Vite resources/css/filament/admin/theme.css (app/Providers/Filament/AdminPanelProvider.php:25-682).
graph TD
App["dewakoding-project-management"] --> Panel["Panel admin (id: admin, path: admin)"]
Panel --> Resources["Resources: Projects, Tickets, TicketPriorities, TicketComments, Users, Roles, Notifications"]
Panel --> Pages["Pages: ProjectBoard, ProjectTimeline, TicketTimeline, EpicsOverview, Leaderboard, UserContributions, SystemSettings"]
Panel --> Widgets["Widgets: StatsOverview, MonthlyTicketTrendChart, TicketsPerProjectChart"]
Panel --> Shield["FilamentShieldPlugin"]
Resources --> Models["Eloquent models"]
Pages --> Models
Widgets --> Models
Models --> DB[("database")]
Routes["routes/web.php"] --> External["ExternalLogin dan ExternalDashboard"]
External --> Models
style DB fill:#336791,color:#fff
style Models fill:#336791,color:#fff
style Panel fill:#f59e0b,color:#000
style Shield fill:#f59e0b,color:#000
style Widgets fill:#8b5cf6,color:#fff
style External fill:#2d7d46,color:#fff
style Routes fill:#2d7d46,color:#fff
%% fig: Peta modul aplikasi
%% desc: Panel admin Filament memuat Resources, Pages, dan Widgets di atas model Eloquent, sementara portal eksternal masuk lewat rute terpisah ke model yang sama.Navigasi panel dikelompokkan menjadi tiga grup. Project Management memuat papan Kanban dan halaman linimasa, Analytics memuat leaderboard dan kontribusi pengguna, sedangkan Settings memuat pengaturan sistem dan prioritas ticket.
| Grup navigasi | Isi utama | Rujukan |
|---|---|---|
Project Management | ProjectBoard, EpicsOverview, ProjectTimeline, TicketTimeline | app/Filament/Pages/ProjectBoard.php:22-413 |
Analytics | Leaderboard, UserContributions | app/Filament/Pages/Leaderboard.php:17-274 |
Settings | SystemSettings, TicketPriorityResource | app/Filament/Resources/TicketPriorities/TicketPriorityResource.php:33-375 |
ProjectBoard memakai slug project-board/{project_id?} dan mendefinisikan subjudul "Kanban board for ticket management". Pengguna dengan peran super_admin melihat seluruh project, pengguna lain hanya melihat project yang ia ikuti lewat relasi projects() (app/Filament/Pages/ProjectBoard.php:22-413). Halaman Leaderboard menyimpan rentang waktu default 7days dan jumlah kontributor teratas 10 (app/Filament/Pages/Leaderboard.php:29-306).
Fitur utama
README mendaftar lima belas fitur (README.md:12-287). Tabel berikut memetakan tiap fitur ke identifier yang benar-benar ada di kode.
| Fitur | Wujud di kode | Rujukan |
|---|---|---|
Manajemen project dengan konfigurasi ticket_prefix | Project::$fillable memuat ticket_prefix, start_date, end_date, pinned_date | app/Models/Project.php:16-248 |
| Kontrol akses berbasis peran | FilamentShieldPlugin pada panel admin | app/Providers/Filament/AdminPanelProvider.php:25-682 |
| Anggota tim dengan penugasan peran | Project::members() lewat tabel pivot project_members | app/Models/Project.php:57-619 |
| Status ticket yang dapat dikustomisasi | Project::ticketStatuses() sebagai HasMany | app/Models/Project.php:47-5010 |
| Assignee dan due date pada ticket | due_date di $fillable, assignees() lewat tabel ticket_users | app/Models/Ticket.php:62-7511 |
| Identifier ticket unik | Ticket::booted() menyusun uuid dari prefix project dan 6 karakter acak | app/Models/Ticket.php:34-4912 |
| Epic untuk mengelompokkan ticket | Ticket::epic() sebagai BelongsTo ke Epic | app/Models/Ticket.php:92-9513 |
| Komentar ticket | Ticket::comments() diurutkan created_at menaik | app/Models/Ticket.php:87-9014 |
| Papan Kanban | ProjectBoard dengan $sortOrders dan $selectedUserIds | app/Filament/Pages/ProjectBoard.php:22-413 |
| Linimasa | ProjectTimeline dan TicketTimeline | app/Filament/Pages/ProjectTimeline.php:13-1515 |
| Leaderboard performa anggota tim | Leaderboard::getLeaderboardData() dan calculateContributionScore() | app/Filament/Pages/Leaderboard.php:17-274 |
| Portal klien | ExternalLogin dan ExternalDashboard di bawah prefix external | routes/web.php:16-2016 |
Dua fitur README, yaitu export ticket ke CSV dan grafik kontribusi pengguna, tidak punya berkas yang saya periksa langsung; detail export dibahas di Import dan Export Ticket, sedangkan grafik kontribusi di Dashboard, Analitik, dan Leaderboard.
Tumpukan teknologi
Dependensi runtime dideklarasikan di composer.json: PHP ^8.2, filament/filament ^4.0, bezhansalleh/filament-shield ^4.0, laravel/framework ^12.0, laravel/octane ^2.9, laravel/socialite ^5.23, maatwebsite/excel ^3.1, dan solution-forest/tab-layout-plugin ^3.2.3 (composer.json:8-1817).
| Lapisan | Paket dan constraint | Rujukan |
|---|---|---|
| Framework | laravel/framework ^12.0, laravel/octane ^2.9 | composer.json:8-1817 |
| Panel admin | filament/filament ^4.0, bezhansalleh/filament-shield ^4.0 | composer.json:8-1817 |
| Otentikasi eksternal | laravel/socialite ^5.23 | composer.json:8-1817 |
| Olah berkas | maatwebsite/excel ^3.1 | composer.json:8-1817 |
| Frontend | tailwindcss ^4.1.15, vite ^6.0.11, laravel-vite-plugin ^1.2.0 | package.json:8-1918 |
| Script dev | php artisan serve, queue:listen, pail, npm run dev dijalankan serentak | composer.json:59-6219 |
⚠️ README menulis syarat PHP sebagai "> 8.2+" (README.md:30-3520), sedangkan
composer.jsonmenulis^8.2(composer.json:8-1817). Constraint composer yang berlaku, jadi PHP 8.2 sendiri masih diterima. Langkahshield:setup,shield:install, danshield:super-adminwajib berurutan agar peran dan permission terbentuk; urutan lengkapnya ada di Instalasi, Konfigurasi, dan Docker.
Portal eksternal
Rute external/{token} dan external/{token}/dashboard memakai komponen Livewire ExternalLogin dan ExternalDashboard (routes/web.php:16-2016). ExternalDashboard memakai layout layouts.external dan menyimpan konstanta SESSION_LIFETIME_MINUTES = 720 (app/Livewire/ExternalDashboard.php:17-2221). Token dan password dibuat oleh ExternalAccess::generateForProject().
| Nilai | Angka | Rujukan |
|---|---|---|
Panjang access_token | 32 karakter dari Str::random(32) | app/Models/ExternalAccess.php:36-4722 |
| Panjang password awal | 8 karakter dari Str::random(8) | app/Models/ExternalAccess.php:36-4722 |
| Umur session portal | 720 menit | app/Livewire/ExternalDashboard.php:17-2221 |
| Password pada model | cast encrypted | app/Models/ExternalAccess.php:25-2923 |
⚠️
access_tokenmenjadi bagian path URL, sehingga token ikut tercatat di log akses web server dan riwayat peramban. Password awalnya hanya 8 karakter acak. Rotasi token dan pengaturan aksesnya dibahas di Portal Eksternal Klien.
Perilaku request di dalam panel, termasuk urutan middleware dan authMiddleware, dijelaskan di Arsitektur Aplikasi. Bentuk tabel dan relasi antar model ada di Model Data dan Migration, sedangkan aturan peran di Kontrol Akses dan Peran.