尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Wakaf Digital — Demo Interaktif (Yayasan Khazanah Berkah Mulia / KBM) Demo web wakaf digital yang sepenuhnya bisa dicoba end-to-end memakai mock backend (in-memory store di sisi server + API routes). Tidak ada database sungguhan dan tidak ada payment gateway asli.查看完整 README ↗
Demo web wakaf digital yang sepenuhnya bisa dicoba end-to-end memakai mock backend (in-memory store di sisi server + API routes). Tidak ada database sungguhan dan tidak ada payment gateway asli.
npm install
npm run dev
# buka http://localhost:3000
Build produksi:
npm run build && npm start
| Peran | Cara masuk |
|---|---|
| Admin | /admin → [email protected] / admin123 |
| Wakif | /riwayat → email apa pun + OTP 123456 (selalu diterima). Pakai [email protected] untuk melihat riwayat contoh. |
/program: 10 program dikelompokkan jadi 4 seksi
berdasarkan jenis — Wakaf Uang, Wakaf Melalui Uang, Infaq &
Shadaqah, dan Zakat — masing-masing dengan penjelasan singkat. Filter
kategori + pencarian kata kunci berlaku lintas seksi.DEMO … — sengaja
memakai huruf agar tidak bisa dimasukkan ke aplikasi bank sungguhan)./wakaf/[id]: countdown mundur benar-benar jalan.
POST /api/transactions/[id]/pay → status paid → redirect ke halaman sukses.expired
/sertifikat/[nomor]: nomor unik, print-friendly, tombol
Unduh PDF (jsPDF) + Cetak. Bisa diverifikasi di /verifikasi./riwayat: login mock (email + OTP 123456), daftar
transaksi by email, lihat & unduh ulang sertifikat./admin/dashboard:
/zakat: hitung zakat maal (nisab 85 gr emas,
kadar 2,5%) dan zakat penghasilan. Hasil hitungan langsung membawa
nominalnya ke form pembayaran lewat ?nominal=./profil: latar belakang, visi, misi, tujuan,
legalitas, dewan pengurus & nazhir, kontak. Konten masih placeholder
(bertanda TODO) menunggu company profile resmi KBM./transparansi:
GET /api/donations, proyeksi publik: tanpa
email/telepon; yang memilih anonim tampil sebagai "Hamba Allah").
Selesaikan pembayaran mock → nama langsung muncul di paling atas.Reset data demo: tombol di banner atas setiap halaman, atau
POST /api/reset. Mengembalikan mock-db ke kondisi seed.
Alur wakaf → sertifikat, ditangkap otomatis oleh
scripts/capture-screenshots.mjs
(node scripts/capture-screenshots.mjs saat server demo berjalan).
Tombol "Simulasikan pembayaran berhasil" ditandai jelas sebagai alat demo.
Rp 313.500.000 → Rp 313.600.000, 214 → 215 wakif (baca dari mock-db yang sama).
| Beranda | Daftar program | Detail + form |
|---|---|---|
| Kalkulator zakat | Profil yayasan |
|---|---|
Seluruh gambar program adalah ilustrasi dummy, dan isi halaman Profil (nama pengurus, nomor legalitas, alamat, kontak) adalah data karangan untuk keperluan demo — semuanya akan diganti dengan materi resmi KBM.
Diuji pada 3 lebar: HP 390px, tablet 768px, desktop ≥1024px.
lg; nav penuh muncul di desktop.Rp 1,04 miliar,
Rp 325 juta) via formatRupiahCompact agar tidak terpotong di layar sempit.sm+.app/(pages) Halaman publik + area /admin (layout & guard terpisah)
app/api/... Mock backend — tiap route menunda 500–1500ms (lib/api/server.ts)
components/ Komponen UI, dipecah per fungsi (+ components/admin/*, components/home/*)
lib/mock-db/ In-memory store server-side + data seed
lib/api/client.ts Wrapper fetch tunggal untuk semua komponen
lib/store/ Zustand: sesi login (persist localStorage) & toast
lib/config.ts SEMUA nilai yang dipercepat/dipalsukan untuk demo
types/ Tipe domain bersama + kamus istilah per jenis program
program_type adalah sumbu utama pengelompokan, mengikuti pembagian lembaga
wakaf (rujukan definisi BWI):
| Jenis | Arti singkat |
|---|---|
wakaf-uang | Uangnya jadi objek wakaf. Pokok dijaga, hasil pengelolaan yang disalurkan (dana abadi). |
wakaf-melalui-uang | Uang langsung diwujudkan jadi aset wakaf (tanah, masjid, sumur). |
infaq-shadaqah | Sedekah sukarela, disalurkan langsung habis. |
zakat | Kewajiban, terikat nisab/haul & 8 asnaf. |
Karena istilahnya berbeda-beda, PROGRAM_TYPE_TERMS di types/index.ts memetakan
sebutan per jenis dan dipakai konsisten di form, sertifikat, riwayat, dan
transparansi:
| Wakaf | Infaq/Shadaqah | Zakat | |
|---|---|---|---|
| Pemberi | Wakif | Donatur | Muzakki |
| Pengelola | Nazhir | Lembaga penyalur | Amil |
| Bukti | Sertifikat Wakaf | Bukti Donasi | Bukti Setor Zakat |
kategori (masjid, pendidikan, produktif-UMKM, sumur & air bersih, kemanusiaan,
sosial & dhuafa) tetap ada sebagai klasifikasi sekunder untuk filter.
Semua ditandai komentar di kode. Ringkasnya:
| Lokasi | Disederhanakan | Untuk produksi |
|---|---|---|
lib/config.ts → VA_TTL_MS | Masa berlaku VA 3 menit | Kembalikan ke 24 jam |
lib/api/server.ts → mockLatency() | Delay 500–1500ms tiap request | Hapus |
lib/mock-db/ | Store di memori proses | Database sungguhan (Prisma/Drizzle) |
lib/mock-db/ → makeVaNumber() | Nomor VA tiruan diawali DEMO (tidak bisa dibayar) | VA asli dari payment gateway (Midtrans/Xendit) |
app/api/transactions/[id]/pay | Webhook dipicu tombol | Callback + verifikasi signature dari payment gateway |
app/api/transactions/[id]/expire | Expiry di-set dari browser | Job terjadwal / callback gateway |
app/api/auth/* | 1 akun admin hardcode; OTP wakif selalu 123456 | User store + hash + sesi ber-token + OTP asli |
components/mock-file-input.tsx | File dibaca jadi data URL di browser | Upload ke object storage, simpan URL |
components/brand-logo.tsx | Wordmark "kbm" dibuat via CSS | Ganti dengan file SVG/PNG logo resmi |
lib/config.ts → HARGA_EMAS_PER_GRAM | Harga emas di-hardcode untuk nisab zakat | Ambil dari API harga emas / setelan admin |
app/profil/page.tsx | Nama pengurus, akta/SK/NIB/NPWP, alamat & kontak semuanya dummy karangan | Isi dari company profile resmi KBM |
components/site-footer.tsx | Legalitas di footer ikut dummy | Samakan dengan data resmi |
components/program-illustration.tsx | Ilustrasi SVG dummy menggantikan foto program | Isi imageUrl dengan foto dokumentasi asli |
reactStrictMode: false (next.config.js) agar interval countdown demo tidak
double-fire di dev.components/program-illustration.tsx) — bukan foto stok, supaya konsisten
dan tidak ada gambar yang tidak sesuai konteks. Begitu foto dokumentasi asli
tersedia, cukup isi imageUrl pada data program.MIT.