Platform donasi online Indonesia dengan fitur Squad Donasi, User-Generated Campaigns, Admin Analytics, dan Testing Mode.

| Fitur |
Deskripsi |
| Squad Donasi |
Donasi bareng teman/keluarga dengan sub-target, invite code, dan leaderboard |
| User-Generated Campaigns |
User ajukan kampanye → admin approve/reject → user bisa edit & resubmit |
| Admin Analytics |
Trend chart 7 hari, top campaigns, top donors, export CSV |
| Test Mode |
Bypass pembayaran untuk testing (production guard aktif) |
| Pesan Donatur |
Komentar publik di halaman kampanye dari pesan donasi |
| Payment Gateway |
Tripay integration — QRIS, BCA/BNI/BRI/Mandiri Virtual Account |
| Admin Dashboard |
Sidebar navigation, kelola kampanye, transaksi, statistik |
| Mobile App |
Flutter dengan Provider state management, 11 screens |
- Node.js v18+
- MySQL (XAMPP atau standalone)
- Flutter SDK v3.9+
- Live Server VS Code extension
cd backend
npm install
cp .env.example .env # Edit sesuai config MySQL
npm run seed # Seed database (8 kategori + admin)
npm run dev # Server di http://localhost:3000
# Buka folder website/ dengan Live Server (port 5500)
cd Aplikasi/donaria
flutter pub get
flutter run
| Command |
Description |
cd backend && npm run dev |
Start backend dev server |
cd backend && npm test |
Run 101 tests |
cd backend && npm run seed |
Seed database |
cd Aplikasi/donaria && flutter run |
Run Flutter app |
Website (HTML/Tailwind/JS) ──┐
├──▶ Backend (Express.js) ──▶ MySQL
Flutter App (Dart/Provider) ──┘ │
├──▶ Tripay API (Payment)
└──▶ Security Layer (Helmet, Rate Limit, CORS)
backend/
├── src/
│ ├── controllers/ # 9 controllers (req/res handler)
│ ├── models/ # 11 Sequelize models
│ ├── routes/ # 11 route files
│ ├── services/ # PaymentService, TripayService
│ ├── middleware/ # authenticate, isAdmin, validate
│ └── validations/ # Joi schemas (donation, campaign, squad)
├── tests/ # 10 test suites, 101 tests
└── server.js # Entry point
website/
├── *.html # 14 halaman (public + admin)
├── admin/ # Admin dashboard (sidebar layout)
│ ├── index.html # Stats + analytics + test mode
│ ├── campaigns.html # Campaign CRUD + approve/reject
│ └── transactions.html # Transaction list + filters
├── css/ # Design system (glassmorphism)
└── js/ # API module + auth + utilities
Aplikasi/donaria/lib/
├── config/ # API endpoints, theme
├── models/ # 6 model files (10 classes)
├── providers/ # 4 ChangeNotifier providers
├── screens/ # 11 screens
├── widgets/ # 8 reusable widgets
└── services/ # ApiService (Dio), AuthService
| Layer |
Technology |
| Backend |
Node.js, Express.js, Sequelize ORM |
| Database |
MySQL |
| Auth |
JWT, bcryptjs (12 rounds) |
| Payment |
Tripay Gateway (QRIS + VA) |
| Validation |
Joi |
| Security |
Helmet, express-rate-limit, CORS |
| Frontend |
HTML5, Tailwind CSS 4, Vanilla JS, Chart.js |
| Mobile |
Flutter, Dart, Provider, Dio |
| Testing |
Jest, Supertest |
Test Suites: 10 passed, 10 total
Tests: 101 passed, 101 total
| Suite |
Tests |
Coverage |
| test-mode |
14 |
Test Mode toggle, bypass donations |
| user-campaigns |
21 |
Submit, approve, reject, edit, resubmit |
| analytics |
13 |
Trend, top campaigns, top donors |
| campaigns |
11 |
List, detail, CRUD, filters |
| squads |
11 |
Create, join, by code, by campaign |
| auth-flow |
10 |
Register, login, profile |
| donations |
8 |
Recent, my donations, get by id |
| categories |
5 |
List, detail, create |
| withdrawals |
5 |
Create, list, approve |
| notifications |
3 |
List, mark all read |
| Group |
Endpoints |
Auth |
| Auth |
register, login, me, profile |
Mixed |
| Categories |
CRUD (5) |
Public / Admin |
| Campaigns |
CRUD + submit + approve/reject (12) |
Mixed |
| Donations |
create, recent, my, detail (4) |
Mixed |
| Transactions |
callback, check, list (4) |
Mixed |
| Squads |
create, join, by code, my (6) |
Mixed |
| Analytics |
trend, top-campaigns, top-donors (3) |
Admin |
| Admin |
test-mode toggle (2) |
Admin |
| Withdrawals |
create, list, update (3) |
Admin |
| Notifications |
list, read, read-all (3) |
User |
Lihat API Documentation untuk detail lengkap.
- JWT authentication with bcrypt hashing (12 rounds)
- Rate limiting: 10 req/15min (auth), 100 req/15min (API)
- CORS origin restriction
- Joi input validation on donation, campaign, squad endpoints
- XSS protection via
escapeHTML()
- Production guard on test mode toggle
- Helmet HTTP security headers
Private — Donaria Project