# Blueprint Upgrade Desa Digital
## Versi 2.0 — Frontend Tamanbali + Modul OpenSID

---

## 1. RINGKASAN PERUBAHAN

| Area | Kondisi Sekarang | Target |
|---|---|---|
| **Frontend Publik** | Layout Tailwind generik | Desain bergaya tamanbali.desa.id (hero besar, card statistik, navigasi modern) |
| **Dashboard Admin** | Sidebar sederhana | Sidebar multi-level, tema OpenSID-style dengan AdminLTE-like cards |
| **Identitas Desa** | 6 field di `village_settings` | 25+ field (kode desa, koordinat, logo, lambang, visi misi, kades, sekdes, BPD) |
| **Modul Penduduk** | Form 15 field | Form lengkap 30+ field standar SIAK/Dukcapil |
| **Laporan Kependudukan** | Tidak ada | Statistik grafis: agama, pekerjaan, pendidikan, usia, per-wilayah |
| **Pengaturan** | 1 halaman | Tab: Identitas Desa · Kelembagaan · Tampilan Website · Aplikasi |

---

## 2. ARSITEKTUR DATABASE — TAMBAHAN/PERUBAHAN

### 2a. Upgrade tabel `village_settings`
Field baru yang ditambahkan (sesuai standar OpenSID):

```
-- Identitas dasar
kode_desa           (10 digit, misal: 5101021001)
kode_desa_bps       (kode BPS)
kode_pos            (5 digit)
latitude            (koordinat GPS)
longitude           (koordinat GPS)

-- Kelembagaan
nama_sekdes         (nama sekretaris desa)
nama_bpd_ketua      (ketua BPD)
nip_kades           (NIP kepala desa)
masa_jabatan_kades  (masa jabatan)

-- Profil wilayah
luas_wilayah        (dalam hektar)
batas_utara / batas_selatan / batas_barat / batas_timur
jumlah_rt / jumlah_rw / jumlah_dusun

-- Tampilan website
visi_desa / misi_desa
sejarah_desa
village_lambang     (gambar lambang berbeda dari logo)
website_desa        (URL website resmi)
sosmed_tiktok / sosmed_twitter

-- Aplikasi
warna_tema          (hex color)
sebutan_desa        (desa/kelurahan/nagari/dll)
sebutan_kades       (kepala desa/lurah/dll)
```

### 2b. Tabel baru: `village_officials` (Perangkat Desa)

```sql
CREATE TABLE village_officials (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  nip VARCHAR(20),
  position VARCHAR(100),        -- jabatan (Kepala Desa, Sekdes, dll)
  photo VARCHAR(255),
  sort_order INT DEFAULT 0,
  is_active TINYINT DEFAULT 1,
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);
```

### 2c. Upgrade tabel `residents` — kolom tambahan

```
-- Dokumen
no_kk               → sudah via families.family_card_number
citizenship         (WNI/WNA)
country_of_origin   (untuk WNA)
blood_type          (A/B/AB/O/-)

-- Sosial
disability          (cacat fisik/mental/dll, nullable)
social_welfare      (PKH/BPNT/KIP/dll, nullable)
insurance_type      (BPJS/mandiri/dll)

-- Migrasi
origin_address      (alamat asal jika pindah masuk)
migration_date      (tanggal masuk desa)

-- Foto & dokumen scan (sudah ada di existing: ktp_file, kk_file, photo)
```

---

## 3. FRONTEND PUBLIK — DESAIN BERGAYA TAMANBALI.DESA.ID

### Struktur halaman publik:
```
/                   → Landing page (hero, sambutan, statistik, layanan, berita)
/berita             → Daftar berita
/berita/{slug}      → Detail berita
/layanan            → Daftar layanan surat
/profil             → Profil desa
/transparansi       → PPID / informasi publik (opsional fase 2)
```

### Elemen desain kunci (mengacu tamanbali.desa.id):
- **Hero section**: Full-width dengan overlay gradien, foto desa, nama desa besar, tagline
- **Marquee/Statistik strip**: Angka penduduk, KK, luas, RW/RT
- **Quick access cards**: 3-4 layanan utama dengan ikon besar
- **Berita terbaru**: Grid 3 kolom dengan thumbnail
- **Sambutan Kepala Desa**: Foto, nama, teks sambutan
- **Kontak & Peta**: Alamat kantor, Google Maps embed, sosmed links
- **Footer**: Multi-kolom, logo, copyright, sosmed

---

## 4. DASHBOARD ADMIN — UPGRADE MODUL

### 4a. Sidebar Admin (upgrade)
```
Dashboard
├── Beranda (statistik real-time)

Kependudukan
├── Data Penduduk (upgrade form)
├── Kartu Keluarga
├── Wilayah (Dusun/RW/RT)
├── Laporan Kependudukan [BARU]
│   ├── Rekapitulasi Penduduk
│   ├── Statistik per Agama
│   ├── Statistik per Pekerjaan
│   ├── Statistik per Pendidikan
│   └── Statistik per Usia

Layanan Surat
├── Pengajuan Masuk
├── Jenis & Template Surat

Informasi
├── Berita Desa
├── Galeri [opsional fase 2]

Administrasi
├── Pengguna & Role
├── Aktivitas Log

Pengaturan [UPGRADE]
├── Identitas Desa [BARU - 4 tab]
│   ├── Data Umum Desa
│   ├── Kelembagaan
│   ├── Tampilan Website
│   └── Sosial Media
├── Perangkat Desa [BARU]
├── Profil Desa (Backup)
```

### 4b. Modul Identitas Desa (dari OpenSID)
Mengadopsi konsep multi-tab dari `identitas_desa/tab-umum.blade.php` dan `tab-profil.blade.php` OpenSID, disesuaikan dengan sistem desa-digital:

**Tab 1: Data Umum**
- Nama Desa, Kode Desa, Kode BPS, Kode Pos
- Kepala Desa, NIP, Masa Jabatan
- Sekretaris Desa
- Alamat Kantor, Email, Telepon
- Website Resmi
- Koordinat GPS (Latitude/Longitude)

**Tab 2: Kelembagaan**
- Visi Misi
- Sejarah Desa
- Batas Wilayah (Utara/Selatan/Barat/Timur)
- Luas Wilayah
- Jumlah RT/RW/Dusun

**Tab 3: Tampilan Website**
- Logo Desa (upload)
- Lambang Desa (upload)
- Foto Hero Landing Page (upload)
- Foto Sambutan Kades (upload)
- Teks Sambutan Kades
- Warna Tema Aplikasi

**Tab 4: Sosial Media**
- Facebook, Instagram, YouTube, TikTok, Twitter/X

### 4c. Modul Penduduk — Field Tambahan (dari OpenSID)
Form lengkap mengadopsi standar Dukcapil:

**Bagian Data Diri (existing + tambahan):**
- NIK, Nama Lengkap, Jenis Kelamin
- Tempat/Tanggal Lahir
- Agama, Pendidikan, Pekerjaan
- Status Perkawinan, Hubungan dalam KK
- Nama Ayah, Nama Ibu
- **[BARU]** Golongan Darah (A/B/AB/O/-)
- **[BARU]** Kewarganegaraan (WNI/WNA)
- **[BARU]** Disabilitas
- Status Hidup (Hidup/Meninggal/Pindah)

**Bagian Alamat:**
- Alamat lengkap (existing)
- Dusun/RW/RT (existing)
- **[BARU]** Kode Pos

**Bagian Dokumen:**
- Scan KTP (existing)
- Scan KK (existing)
- Foto (existing)

**Bagian Sosial:**
- **[BARU]** Program Bantuan (PKH/BPNT/KIP/dll)
- **[BARU]** Jenis Asuransi Kesehatan

### 4d. Laporan Kependudukan [MODUL BARU]
Mengadopsi logika `LaporanPendudukRepository.php` dari OpenSID:

```
Route: admin/laporan/penduduk
Controller: Admin\LaporanPendudukController

Tampilan:
- Ringkasan (total penduduk, KK, laki/perempuan)
- Grafik per Agama (bar chart / pie)
- Grafik per Pekerjaan (horizontal bar)
- Grafik per Pendidikan (bar)
- Grafik per Usia (pyramid/bar)
- Tabel per Wilayah (dusun/rw/rt)
- Export: Excel & PDF
```

---

## 5. URUTAN IMPLEMENTASI

### FASE 1 — Database & Model (prioritas)
1. Migration `upgrade_village_settings_table` — tambah kolom
2. Migration `create_village_officials_table`
3. Migration `upgrade_residents_table` — kolom tambahan
4. Update Model `VillageSetting`
5. Create Model `VillageOfficial`
6. Update Model `Resident`

### FASE 2 — Pengaturan Identitas Desa (admin)
1. `Admin\IdentitasDesaController` (baru, pisah dari SettingController)
2. View: `admin/identitas-desa/index.blade.php` (4 tab)
3. View: `admin/identitas-desa/tab-umum.blade.php`
4. View: `admin/identitas-desa/tab-kelembagaan.blade.php`
5. View: `admin/identitas-desa/tab-tampilan.blade.php`
6. View: `admin/identitas-desa/tab-sosmed.blade.php`
7. `Admin\PerangkatDesaController`
8. View: `admin/perangkat-desa/index.blade.php`

### FASE 3 — Penduduk Upgrade
1. Update `ResidentController@create/edit` — tambah validasi field baru
2. Update `form-partial.blade.php` — tambah field baru
3. Update `ResidentImportExportController` — tambah kolom export

### FASE 4 — Laporan Kependudukan
1. `Admin\LaporanPendudukController`
2. View: `admin/laporan/penduduk.blade.php`
3. Route

### FASE 5 — Frontend Publik Upgrade
1. Update `LandingController`
2. Redesign `components/public-layout.blade.php`
3. Redesign `welcome.blade.php` (landing page gaya tamanbali)

### FASE 6 — Sidebar & Layout Admin Upgrade
1. Update `components/admin-layout.blade.php` — sidebar upgrade
2. Update dashboard stats

---

## 6. FILE YANG DIHASILKAN

Setiap fase menghasilkan file-file berikut yang siap pakai:

```
migrations/
  └── 2026_06_24_upgrade_village_settings.php
  └── 2026_06_24_create_village_officials.php
  └── 2026_06_24_upgrade_residents.php

models/
  └── VillageSetting.php (updated)
  └── VillageOfficial.php (new)
  └── Resident.php (updated)

controllers/
  └── Admin/IdentitasDesaController.php (new)
  └── Admin/PerangkatDesaController.php (new)
  └── Admin/LaporanPendudukController.php (new)
  └── LandingController.php (updated)

views/admin/
  └── identitas-desa/index.blade.php
  └── identitas-desa/tab-umum.blade.php
  └── identitas-desa/tab-kelembagaan.blade.php
  └── identitas-desa/tab-tampilan.blade.php
  └── identitas-desa/tab-sosmed.blade.php
  └── perangkat-desa/index.blade.php
  └── laporan/penduduk.blade.php
  └── penduduk/form-partial.blade.php (updated)
  └── [components]/admin-layout.blade.php (updated)

views/public/
  └── welcome.blade.php (redesigned)
  └── [components]/public-layout.blade.php (redesigned)

routes/
  └── web.php (additions)
```
