Kementerian Agama Republik Indonesia
Kabupaten Jember — Jawa Timur
SIPADI
Administrasi Manajemen Arsip Handal

"Sistem Aplikasi Pemberkasan Arsip Digital Kementerian Agama Kabupaten Jember."

🛡
Aman
Cepat
Modern
🤖
AI OCR
© 2026 Kementerian Agama RI — Kabupaten Jember
Selamat Datang di
SIPADI
Sistem Aplikasi Pemberkasan Arsip Digital
Sistem aktif · Cloudflare Worker + D1 + R2
Dashboard
SIPADI › Dashboard
Kemenag Kab. Jember
AKTIF
📋
0
Register Nikah
AKTIF
🎓
0
Arsip Ijazah
31+20
🏢
51
Satuan Kerja
ONLINE
👤
0
Operator Aktif

📋 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 Aplikasi Pemberkasan Arsip Digital (SIPADI)

📷 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 Cloudflare dan Node.js terinstal (untuk Wrangler CLI).

1 Buat Worker, D1, dan R2

aInstall Wrangler: npm install -g wrangler lalu wrangler login
bBuat database D1: wrangler d1 create sipadi-db → salin database_id ke wrangler.toml
cBuat bucket R2: wrangler r2 bucket create sipadi-arsip → aktifkan akses publik via r2.dev atau custom domain

2 Skema Tabel D1

-- wrangler d1 execute sipadi-db --file=schema.sql
CREATE TABLE users (
  id TEXT PRIMARY KEY, email TEXT UNIQUE, password_hash TEXT,
  nama TEXT, role TEXT, satker TEXT, status TEXT DEFAULT 'aktif'
);
CREATE TABLE register_nikah (
  id TEXT PRIMARY KEY, no_akta TEXT, no_pmrk TEXT, tgl_nikah TEXT,
  nama_suami TEXT, nik_suami TEXT, nama_istri TEXT, nik_istri TEXT,
  kua TEXT, file_url TEXT, created_by TEXT, created_at TEXT
);
CREATE TABLE ijazah (
  id TEXT PRIMARY KEY, no_ijazah TEXT, nama_siswa TEXT, nisn TEXT,
  madrasah TEXT, jenjang TEXT, file_url TEXT, created_by TEXT, created_at TEXT
);
CREATE TABLE pegawai (
  id TEXT PRIMARY KEY, nama TEXT, nip TEXT, satker TEXT,
  jabatan TEXT, status TEXT
);

3 Endpoint Worker (Auth & CRUD)

// src/index.js — Worker utama, route ke D1 + R2
export default {
  async fetch(req, env) {
    const url = new URL(req.url);

    if (url.pathname === '/auth/login' && req.method === 'POST') {
      const { email, password } = await req.json();
      const user = await env.DB.prepare(
        'SELECT * FROM users WHERE email = ?'
      ).bind(email).first();
      if (!user || !(await verifyPassword(password, user.password_hash)))
        return Response.json({ error: 'Email atau password salah' }, { status: 401 });
      const token = await signToken(user); // JWT sederhana via Web Crypto
      return Response.json({ token, user: { id: user.id, nama: user.nama, role: user.role, satker: user.satker } });
    }

    if (url.pathname === '/nikah' && req.method === 'GET') {
      const auth = await requireAuth(req, env);
      if (!auth) return Response.json({ error: 'Unauthorized' }, { status: 401 });
      const { results } = await env.DB.prepare('SELECT * FROM register_nikah').all();
      return Response.json(results);
    }

    // ... endpoint lain: /ijazah, /pegawai, /operators, /verify/:hash, dst.
    return new Response('Not found', { status: 404 });
  }
};

4 Upload File ke R2

// Worker — terima file dan simpan ke R2
if (url.pathname.startsWith('/upload/') && req.method === 'PUT') {
  const auth = await requireAuth(req, env);
  if (!auth) return Response.json({ error: 'Unauthorized' }, { status: 401 });
  const key = url.pathname.replace('/upload/', '');
  await env.ARSIP_BUCKET.put(key, req.body, {
    httpMetadata: { contentType: req.headers.get('Content-Type') || 'application/octet-stream' }
  });
  return Response.json({ url: `${env.R2_PUBLIC_URL}/${key}` });
}

5 Deploy Worker

aBind D1 dan R2 di wrangler.toml (lihat dokumentasi Cloudflare Workers untuk format binding terbaru)
bDeploy: wrangler deploy → salin URL Worker ke WORKER_URL di frontend
cSet secret produksi (NIK_SECRET, dll) lewat wrangler secret put NAMA_SECRET, jangan hardcode di kode Worker

📋 Statistik Nikah per KUA

🎓 Statistik Ijazah per Madrasah

💾 Backup & Export Data

Data tersimpan aman di perangkat Anda
📋 Register Nikah
Export semua data akta nikah ke CSV
🎓 Arsip Ijazah
Export semua data ijazah ke CSV
👔 Data Pegawai
Export semua data kepegawaian
📦 Backup Lengkap
Semua data dalam satu file JSON
💡 Jadwal Backup: Lakukan backup minimal 1x seminggu. Simpan di Google Drive atau email ke admin. Backup terakhir: