Donasi PTI adalah platform donasi dan wakaf online yang dibangun dengan Laravel 12, menggunakan Xendit sebagai payment gateway, dan PostgreSQL sebagai database.
- 🎯 Donasi - Mendukung donasi ke berbagai kampanye dan kategori
- 🕌 Wakaf - Sistem wakaf dengan perhitungan unit dan tracking
- 📰 Blog - Artikel dan laporan penyaluran dana
- 🖼️ Galeri - Dokumentasi visual kegiatan penyaluran
- 👥 Pendaftaran & Login - Sistem autentikasi dengan Laravel Fortify dan Social Login
- 📊 Dashboard Admin - Manajemen menggunakan Filament (Laravel Admin Panel)
- 📧 Refund - Sistem pengajuan refund donasi
- 📈 Laporan - Laporan keuangan dan statistik
- Backend: Laravel 12, PHP 8.4
- Frontend: Blade, Tailwind CSS 4, Livewire 3
- Database: PostgreSQL
- Payment: Xendit (Invoice, Virtual Account, E-Wallet)
- Queue: Database (dengan supervisor untuk production)
- Cache/Rate Limiting: Redis (database untuk testing)
- Authentication: Laravel Fortify, Sanctum, Socialite (Google/Facebook)
- Mail: SMTP/Log (terkonfigurasi)
- File Storage: Local (production gunakan S3/Cloud)
- Server: Octane (FrankenPHP)
# Copy environment file
cp .env.example .env
# Install dependencies
composer install
# Generate application key
php artisan key:generate
# Run migrations
php artisan migrate --force
# Build frontend assets
npm install
npm run build
# Setup storage
php artisan storage:link
# Start development server
composer run devBerikut environment variables yang perlu dikonfigurasi:
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=donasi_pti
DB_USERNAME=postgres
DB_PASSWORD=your_secure_password_here# Dapatkan dari: https://dashboard.xendit.co/settings/developers#api-keys
XENDIT_SECRET_KEY=
XENDIT_PUBLIC_KEY=
XENDIT_WEBHOOK_TOKEN=generate_random_string
XENDIT_WEBHOOK_SIGNATURE_KEY=generate_random_string
XENDIT_WEBHOOK_SIGNATURE_TOLERANCE=300
# IPs dari Xendit (untuk webhook validation)
# Daftar: https://developers.xendit.co/reference/webhooks
XENDIT_WEBHOOK_IPS="103.20.40.20,103.20.40.21"GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URI="${APP_URL}/auth/google/callback"
FACEBOOK_CLIENT_ID=
FACEBOOK_CLIENT_SECRET=
FACEBOOK_REDIRECT_URI="${APP_URL}/auth/facebook/callback"MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your_email@example.com
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="noreply@donasipti.com"
MAIL_FROM_NAME="Donasi PTI"APP_NAME="Donasi PTI"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://donasipti.comCACHE_STORE=redis
SESSION_DRIVER=databaseProject ini dibangun dengan:
- Laravel 12 Framework
- Livewire 3 - Komponen interaktif
- Filament 4 - Admin panel
- Xendit SDK - Payment gateway integration
- PostgreSQL - Database engine
Aktifkan APP_DEBUG=true di .env untuk melihat detailed error messages.
Cek logs di storage/logs/laravel.log atau gunakan php artisan pail untuk real-time monitoring.
Clear cache jika perubahan config tidak terlihat:
php artisan config:clear
php artisan cache:clear
php artisan route:clearProject ini menggunakan Docker dan FrankenePHP untuk deployment.
docker-compose up -ddocker-compose up -d
docker-compose exec app php artisan migrate --force
docker-compose exec app php artisan config:cache
docker-compose exec app php artisan route:cacheUntuk informasi lebih lanjut tentang konfigurasi production, lihat bagian "Deployment Checklist" di atas.
CACHE_STORE=redis
SESSION_DRIVER=databasedonasi-pti/
├── app/
│ ├── Http/Controllers/ # Web Controllers
│ ├── Http/Requests/ # Form Request Validation
│ ├── Http/Middleware/ # Custom Middleware (Security Headers, etc.)
│ ├── Models/ # Eloquent Models
│ ├── Services/ # Business Logic Services
│ ├── Providers/ # Service Providers
│ ├── Exceptions/ # Custom Exceptions
│ ├── Filament/Resources/ # Admin Panel Resources
│ ├── Jobs/ # Queue Jobs
│ ├── Mail/ # Email Templates
│ └── Notifications/ # Notifications
├── config/ # Configuration Files
├── database/
│ ├── migrations/ # Database Migrations
│ └── seeders/ # Data Seeders
├── routes/
│ ├── web.php # Web Routes
│ ├── api.php # API Routes
│ └── console.php # Console Commands
├── resources/
│ ├── views/ # Blade Templates
│ └── assets/ # Frontend Assets (CSS, JS)
├── storage/ # File Storage
├── tests/ # Unit & Feature Tests
└── public/ # Public Files
Tabel utama:
users- User accounts & profilecampaigns- Kampanye donasicategories- Kategori donasi & wakafdonations- Transaksi donasidonation_usages- Penyaluran danacampaign_updates- Update kampanyearticles- Artikel bloggalleries- Galeri fotocomments- Komentarsubscriptions- Donasi berlanggananrefund_requests- Permintaan refundxendit_webhook_events- Log webhook Xenditaudit_logs- Audit trail untuk admin actionsnotification_logs- Log notifikasi
✅ Security Headers - CSP, XSS Protection, Frame Options ✅ CSRF Protection - Token-based validation untuk state-changing requests ✅ Rate Limiting - Redis-based throttling untuk API dan sensitive endpoints ✅ Webhook Verification - Token dan signature validation untuk Xendit webhooks ✅ Fraud Detection - Sistem deteksi aktivitas mencurigakan (donasi berlebih, multiple IPs, rapid donations) ✅ Audit Logging - Trail semua admin actions ✅ Input Validation - Form requests dengan custom rules ✅ Password Hashing - Bcrypt dengan 12 rounds ✅ 2FA Support - Google Authenticator (opsional) ✅ SQL Injection Prevention - Parameter binding (Eloquent) ✅ XSS Prevention - HTMLPurifier untuk konten user
/- Homepage/campaigns- Daftar kampanye/campaigns/{slug}- Detail kampanye/wakaf- Kampanye wakaf/blog- Artikel blog/blog/{slug}- Detail artikel/gallery- Galeri foto/donate/{slug}- Form donasi (auth)/donation/success- Halaman sukses donasi/donation/failed- Halaman gagal donasi/dashboard- Dashboard user (auth)/auth/*- Autentikasi (login, register, reset password)/sitemap.xml- Sitemap SEO
/api/v1/campaigns- List kampanye/api/v1/campaigns/featured- Kampanye unggulan/api/v1/campaigns/urgent- Kampanye mendesak/api/v1/campaigns/search- Pencarian kampanye/api/v1/campaigns/{slug}- Detail kampanye/api/v1/user- Info user (auth)/api/v1/user/donations- Riwayat donasi user (auth)/health- Health check endpoint
Jalankan test suite:
# Jalankan semua tests
php artisan test --compact
# Jalankan test tertentu
php artisan test --compact tests/Feature/CampaignTest
php artisan test --compact tests/Feature/DonationTest
php artisan test --compact tests/Feature/AuthenticationTestdocker-compose up -ddocker-compose up -d
docker-compose exec app php artisan migrate --force
docker-compose exec app php artisan config:cache
docker-compose exec app php artisan route:cache- Konfigurasi environment variables di production server
- Setup database production (PostgreSQL)
- Setup Redis production
- Setup SMTP mail server
- Configure Xendit production keys
- Setup SSL certificate (Let's Encrypt)
- Configure backup strategy
- Setup monitoring (Sentry, New Relic, dll.)
- Setup log aggregation (Pail)
- Configure CDN untuk assets (AWS CloudFront)
- Run migrations
- Seed initial data
- Optimize production
php artisan optimize
php artisan config:cache
php artisan route:cache- Selalu jalankan migration dengan flag
--forcedi production - Backup database sebelum migration besar
- Gunakan seeder untuk data testing yang konsisten
- Monitor queue workers menggunakan supervisor
- Rate limiting untuk menghindari brute force attacks
- Cache hasil query untuk database yang sering diakses
- Log semua exceptions untuk debugging dan monitoring
- Gunakan Eloquent relationships untuk menghindari N+1 queries
- Validasi semua input di form requests dan API
- Rate limit sensitive endpoints (login, register, donasi)
- Gunakan environment-specific configs untuk development, staging, production
Aktifkan APP_DEBUG=true di .env untuk melihat detailed error messages.
Cek logs di storage/logs/laravel.log atau gunakan php artisan pail untuk real-time monitoring.
Clear cache jika perubahan config tidak terlihat:
php artisan config:clear
php artisan cache:clear
php artisan route:clearProject ini menggunakan:
- Laravel 12 Framework
- Livewire 3 untuk interaktivitas frontend
- Filament 4 untuk admin panel
- Tailwind CSS 4 untuk styling
- Xendit SDK untuk payment gateway integration
- PostgreSQL untuk database
MIT License - Copyright (c) 2025 Donasi PTI