8cb9c0eb962249189dfb4cc7568b859f493f0a36
Persegi — Sistem Manajemen Organisasi Pemuda
Sistem web production-ready untuk manajemen internal organisasi pemuda.
Teknologi
| Layer | Stack |
|---|---|
| Backend | Laravel 13 |
| Admin Panel | Filament 5.x |
| Authorization | Filament Shield + Spatie Permission |
| Database | MySQL / MariaDB |
| Frontend Publik | Blade + Tailwind CSS |
| Realtime | Livewire |
| Queue | Supervisor (database driver) |
Struktur Direktori
app/
├── Filament/
│ ├── Resources/
│ │ ├── Activities/ # Manajemen kegiatan
│ │ ├── Approvals/ # Multi-approval
│ │ ├── Audits/ # Audit internal
│ │ ├── CashCategories/ # Kategori kas
│ │ ├── CashRecords/ # Transaksi kas
│ │ ├── ContactMessages/ # Pesan dari publik
│ │ ├── Divisions/ # Divisi organisasi
│ │ ├── MemberDues/ # Iuran anggota
│ │ ├── MemberPoints/ # Poin anggota
│ │ ├── Posts/ # Konten publik
│ │ ├── Users/ # Manajemen anggota
│ │ └── Votes/ # Sistem voting
│ └── Widgets/
│ ├── StatsOverview.php # Widget dashboard utama
│ ├── CashStatsWidget.php # Widget statistik kas
│ └── ActivityLogWidget.php # Widget log aktivitas
├── Models/
│ ├── User.php, Division.php
│ ├── Activity.php, MemberStatusLog.php, ActivityLog.php
│ ├── MemberDue.php, MemberPoint.php
│ ├── CashRecord.php, CashCategory.php
│ ├── Vote.php, VoteItem.php
│ ├── Approval.php, ApprovalItem.php
│ ├── Audit.php, AuditResponse.php
│ └── Post.php, ContactMessage.php
└── Observers/
├── UserObserver.php # Log perubahan status anggota
├── ActivityObserver.php # Log approval & eksekusi kegiatan
├── CashRecordObserver.php # Log + threshold approval/voting otomatis
├── VoteObserver.php # Notifikasi voting baru ke semua user
└── PostObserver.php # Poin +5 saat artikel dipublish
Role & Hak Akses
| Role | Deskripsi |
|---|---|
super_admin |
Full akses via gate, semua aksi di-log |
ketua |
Approval kegiatan, verifikasi kas, lihat semua data |
bendahara |
Input & kelola transaksi kas dan iuran |
pengurus |
Submit kegiatan ke pending |
anggota |
Akses terbatas, bisa voting dan buat artikel |
auditor |
Read-only semua + bisa buat temuan audit |
Fitur
Keuangan (Kas)
Threshold otomatis saat transaksi dibuat:
| Jumlah | Alur |
|---|---|
| < Rp 500.000 | Langsung bisa diverifikasi |
| Rp 500.000 – Rp 2.000.000 | Notifikasi ke ketua → perlu approval ketua |
| > Rp 2.000.000 | Voting dibuat otomatis → perlu mayoritas >50% |
- Transaksi yang belum diverifikasi tidak masuk ke total kas
- Setelah
verified_atterisi, data terkunci (tidak bisa diubah/dihapus)
Iuran Anggota
- Satu iuran per anggota per periode (format
YYYY-MM) - Unique constraint
(user_id, period)mencegah duplikasi
Kegiatan
draft → pending → approved → (executed_at diisi)
→ rejected
- Draft hanya terlihat oleh kreator dan
super_admin
Voting
- Semua user bisa melihat dan memberi suara
- Tipe:
activity,finance,general - Notifikasi ke semua user saat voting baru dibuat
- Mayoritas >50% untuk lolos
Sistem Poin
| Event | Poin |
|---|---|
| Hadir kegiatan | +10 |
| Artikel dipublish | +5 |
- Duplikasi dicegah via
firstOrCreatedengan key(user_id, source_type, source_id)
Notifikasi
- Database notifications via Filament
- Polling otomatis setiap 30 detik
- Queue diproses via Supervisor
Konten Publik
- Website publik berbasis Blade
- Artikel/berita, halaman kegiatan, form kontak
- Link ke website publik tersedia di sidebar admin
Log & Audit Trail
| Event | Dicatat di |
|---|---|
| Perubahan status anggota | member_status_logs |
| Transaksi kas baru/verifikasi | activity_logs |
| Approval/eksekusi kegiatan | activity_logs |
Instalasi
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --seed
php artisan shield:generate --panel=admin --all -n
php artisan db:seed --class=PermissionSeeder --force
php artisan shield:super-admin --user=1
Akses admin panel: /dashboard
Queue Worker (Supervisor)
[program:persegi-worker]
command=php /path/to/project/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=$USER
redirect_stderr=true
stdout_logfile=/var/log/persegi-worker.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start persegi-worker
Production
php artisan migrate
php artisan shield:generate --panel=admin --all -n
php artisan db:seed --class=PermissionSeeder --force
php artisan permission:cache-reset
php artisan filament:optimize-clear
php artisan filament:optimize
php artisan config:cache
php artisan route:cache
Description
Languages
PHP
71.2%
Blade
28.4%
CSS
0.3%
JavaScript
0.1%