A
Kementerian Agama Republik Indonesia
Kabupaten Jember — Jawa Timur
AMANAH Tools Bantu Administrasi Manajemen Arsip Handal
atau masuk manual
Sistem aktif · Supabase Auth + PostgreSQL + Storage
Dashboard
AMANAH › Dashboard
Kemenag Kab. Jember
AKTIF
📋
0
Register Nikah
AKTIF
🎓
0
Arsip Ijazah
31+20
🏢
51
Satuan Kerja
ONLINE
👤
0
Operator Aktif

💡 Fitur Arsip Digital yang Disarankan

Roadmap AMANAH
OCR Otomatis
Scan berkas → data terisi otomatis via AI
QR + Hash Verifikasi
Setiap dokumen punya kode unik anti-pemalsuan
Watermark Cetak
Setiap cetak/download ada tanda AMANAH
Multi Role Operator
KUA · Madrasah · Kepegawaian · Kabupaten
🔜
Retensi Arsip
Jadwal simpan & musnahkan arsip sesuai JRA Kemenag
🔜
Audit Trail
Log semua aktivitas: siapa ubah apa kapan
🔜
Notifikasi Otomatis
WhatsApp/email saat dokumen hampir kedaluwarsa
🔜
e-Surat & Disposisi
Surat masuk/keluar digital, tanda tangan elektronik
🔜
Backup Otomatis
Export bulk ke Google Drive/lokal terjadwal
🔜
Pencarian Fulltext
Cari isi dokumen PDF, bukan hanya metadata
🔜
Verifikasi Publik
Masyarakat scan QR → cek keaslian dokumen online
🔜
Dashboard Analytics
Grafik tren nikah, ijazah, pegawai per periode

📋 Register Nikah Terbaru

No AktaSuamiIstriKUA

🎓 Ijazah Terbaru

No IjazahNama SiswaMadrasahTh

📋 Daftar Register Nikah

0 data
#Nomor AktaTanggalSuamiIstriKUAStatusAksi

🎓 Arsip Ijazah Madrasah Negeri

0 data
#No IjazahNama SiswaMadrasahJenjangLulusStatusAksi

🕌 KUA Kabupaten Jember

#Nama Satuan KerjaKodeOp.Total DokStatusAksi

👤 Manajemen Operator & Akses

#NamaEmailSatuan KerjaRoleStatusAksi

Masukkan hash SHA-256 atau nomor akta/ijazah
untuk memverifikasi keaslian dokumen dalam sistem AMANAH

📷 Scan & OCR Dokumen

📄
Drag & drop file scan Register Nikah di sini
atau klik untuk pilih file
Format: PDF · JPG · PNG
⚠️ Panduan teknis untuk developer. Pastikan memiliki akun Google, akun Firebase, dan Node.js terinstal.

1 Buat Project Firebase

aBuka console.firebase.google.com → klik "Add project"
bNama project: amanah-kemenag-jember → lanjutkan
cDi dashboard → klik ikon Web (</>) → Register app → salin firebaseConfig

2 Aktifkan Layanan Firebase

aAuthentication: Sign-in method → aktifkan Google + Email/Password
bFirestore: Create database → Production mode → Region: asia-southeast2 (Jakarta)
cStorage: Get Started → region sama → struktur folder: nikah/ ijazah/ temp/

3 Inisialisasi SDK

// Terminal — install dependencies
npm install firebase

// src/firebase.js — konfigurasi utama
import { initializeApp } from "firebase/app";
import { getAuth, GoogleAuthProvider } from "firebase/auth";
import { getFirestore } from "firebase/firestore";
import { getStorage } from "firebase/storage";

const firebaseConfig = {
  apiKey:            "AIzaSy...",           // dari Firebase Console
  authDomain:        "amanah-kemenag-jember.firebaseapp.com",
  projectId:         "amanah-kemenag-jember",
  storageBucket:     "amanah-kemenag-jember.appspot.com",
  messagingSenderId: "123456789",
  appId:             "1:123456789:web:abc123"
};

const app = initializeApp(firebaseConfig);
export const auth           = getAuth(app);
export const db             = getFirestore(app);
export const storage        = getStorage(app);
export const googleProvider = new GoogleAuthProvider();

4 Fungsi Auth & CRUD

// Login Google
export async function loginGoogle() {
  const res     = await signInWithPopup(auth, googleProvider);
  const userDoc = await getDoc(doc(db, "users", res.user.uid));
  return { user: res.user, role: userDoc.data()?.role || "viewer" };
}

// Simpan Register Nikah + hash otomatis
export async function saveRegisterNikah(data) {
  const hash = await sha256(JSON.stringify(data));
  return await addDoc(collection(db, "registerNikah"), {
    ...data, hash,
    status:    "terverifikasi",
    createdAt: serverTimestamp(),
    createdBy: auth.currentUser.uid
  });
}

// SHA-256 native browser (tanpa library tambahan)
export async function sha256(text) {
  const buf = await crypto.subtle.digest("SHA-256",
    new TextEncoder().encode(text));
  return "sha256:" + [...new Uint8Array(buf)]
    .map(b => b.toString(16).padStart(2,"0")).join("");
}

5 Security Rules Firestore

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    function isAuth()   { return request.auth != null; }
    function role()     { return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role; }
    function satker()   { return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.satker; }
    function isAdmin()  { return role() == "kabupaten"; }

    match /registerNikah/{id} {
      allow read: if isAuth();
      allow create, update: if isAuth() && (isAdmin() ||
        (role() == "kua" && request.resource.data.kua == satker()));
      allow delete: if isAdmin();
    }
    match /ijazah/{id} {
      allow read: if isAuth();
      allow create, update: if isAuth() && (isAdmin() ||
        (role() == "madrasah" && request.resource.data.madrasah == satker()));
      allow delete: if isAdmin();
    }
    match /users/{uid} {
      allow read:  if isAuth();
      allow write: if isAdmin() || request.auth.uid == uid;
    }
  }
}

📋 Statistik Nikah per KUA

🎓 Statistik Ijazah per Madrasah