Skip to content

luthfihalimii/donasi-pti

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Donasi PTI - Platform Donasi & Wakaf Online

Tentang Project

Donasi PTI adalah platform donasi dan wakaf online yang dibangun dengan Laravel 12, menggunakan Xendit sebagai payment gateway, dan PostgreSQL sebagai database.

Fitur Utama

  • 🎯 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

Tech Stack

  • 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)

Instalasi

Prasyrat

# 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 dev

Environment Variables

Berikut environment variables yang perlu dikonfigurasi:

Database

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

Xendit Payment Gateway

# 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"

OAuth Social Login

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 Configuration (Production)

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"

Application

APP_NAME="Donasi PTI"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://donasipti.com

Cache & Session

CACHE_STORE=redis
SESSION_DRIVER=database

Kontribusi

Project ini dibangun dengan:

  • Laravel 12 Framework
  • Livewire 3 - Komponen interaktif
  • Filament 4 - Admin panel
  • Xendit SDK - Payment gateway integration
  • PostgreSQL - Database engine

Troubleshooting

Debug Mode

Aktifkan APP_DEBUG=true di .env untuk melihat detailed error messages.

Logging

Cek logs di storage/logs/laravel.log atau gunakan php artisan pail untuk real-time monitoring.

Cache

Clear cache jika perubahan config tidak terlihat:

php artisan config:clear
php artisan cache:clear
php artisan route:clear

Deployment

Project ini menggunakan Docker dan FrankenePHP untuk deployment.

Docker Compose

docker-compose up -d

Production

docker-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

Untuk informasi lebih lanjut tentang konfigurasi production, lihat bagian "Deployment Checklist" di atas.

Cache & Session

CACHE_STORE=redis
SESSION_DRIVER=database

Struktur Proyek

donasi-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

Database Schema

Tabel utama:

  • users - User accounts & profile
  • campaigns - Kampanye donasi
  • categories - Kategori donasi & wakaf
  • donations - Transaksi donasi
  • donation_usages - Penyaluran dana
  • campaign_updates - Update kampanye
  • articles - Artikel blog
  • galleries - Galeri foto
  • comments - Komentar
  • subscriptions - Donasi berlangganan
  • refund_requests - Permintaan refund
  • xendit_webhook_events - Log webhook Xendit
  • audit_logs - Audit trail untuk admin actions
  • notification_logs - Log notifikasi

Fitur Keamanan

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

Routing

Public Routes

  • / - 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 Routes (v1)

  • /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

Testing

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/AuthenticationTest

Deployment

Docker (Development)

docker-compose up -d

Production (Docker)

docker-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

Deployment Checklist

  • 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

Best Practices

  1. Selalu jalankan migration dengan flag --force di production
  2. Backup database sebelum migration besar
  3. Gunakan seeder untuk data testing yang konsisten
  4. Monitor queue workers menggunakan supervisor
  5. Rate limiting untuk menghindari brute force attacks
  6. Cache hasil query untuk database yang sering diakses
  7. Log semua exceptions untuk debugging dan monitoring
  8. Gunakan Eloquent relationships untuk menghindari N+1 queries
  9. Validasi semua input di form requests dan API
  10. Rate limit sensitive endpoints (login, register, donasi)
  11. Gunakan environment-specific configs untuk development, staging, production

Troubleshooting

Debug Mode

Aktifkan APP_DEBUG=true di .env untuk melihat detailed error messages.

Logging

Cek logs di storage/logs/laravel.log atau gunakan php artisan pail untuk real-time monitoring.

Cache

Clear cache jika perubahan config tidak terlihat:

php artisan config:clear
php artisan cache:clear
php artisan route:clear

Kontribusi

Project 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

License

MIT License - Copyright (c) 2025 Donasi PTI

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages