πŸš€

HEARTWARE DIGITAL DESA

Solusi Digital Terintegrasi untuk Desa Modern

Dari Web Desa Individual hingga Monitoring Regional 50+ Desa

Dengan Kontrol Penuh & Akses Berbeda untuk Setiap Level

🏒 Web Desa Dotte - Arsitektur

Sistem Informasi & Layanan Publik Desa Berbasis Web

πŸ“°

Publikasi

Berita, Galeri, Video, Sambutan Lurah

πŸ“Š

Statistik

Penduduk, Infografis, Demografi

πŸ“‹

Layanan

Surat Online, Pengaduan, Aspirasi

πŸ’°

Bansos

Jenis, Penerima, Distribusi

πŸ’΅

APBDes

Pendapatan, Belanja, Pembiayaan

πŸ—ΊοΈ

GIS & Dokumen

Peta, Dokumen Publik, UMKM

Teknologi: Laravel 10, Bootstrap, Chart.js, Leaflet.js | Database: MySQL | Storage: Local + Cloud

✨ Web Desa - Fitur Utama

Untuk Admin Desa

  • Kelola semua konten (berita, galeri, video)
  • Manage data penduduk & statistik
  • Approve surat online & pengaduan
  • Input bansos & distribusi
  • Kelola APBDes & laporan keuangan
  • Kelola GIS & dokumen publik

Untuk Masyarakat

  • Akses informasi desa yang lengkap
  • Lihat statistik & infografis
  • Ajukan surat online
  • Kirim pengaduan & aspirasi
  • Lihat status surat online
  • Akses dokumen publik
Authentication: Multi-guard (web admin, masyarakat) | Email Notifications: Status surat, pengaduan updates

πŸ”Œ Web Desa - API Publik

Endpoint terbuka untuk integrasi dengan sistem monitoring regional

Keamanan API

  • βœ“ API Key Authentication (header: X-API-KEY)
  • βœ“ Rate Limiting (60 req/min per key)
  • βœ“ Data masking (no sensitive info)

Endpoint Utama

Endpoint Deskripsi Return
GET /api/public/penduduk Data penduduk (filter by RT, RW, pekerjaan, pendidikan) JSON paginated
GET /api/public/bansos/* Jenis, penerima, distribusi bansos JSON array
GET /api/public/apbdes Pendapatan, belanja, pembiayaan desa JSON detail
GET /api/public/summary Ringkasan untuk monitoring (total penduduk, bansos, APBDes realisasi) JSON summary
Dokumentasi: Swagger UI di /docs | Notifikasi: Email saat surat online status berubah

πŸ—„οΈ Web Desa - System Design & Database

Arsitektur Sistem

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ WEB DESA DOTTE β”‚ β”‚ (Laravel 10 + MySQL) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Presentation Layer (Blade + Bootstrap) β”‚ β”‚ + Admin Panel + Masyarakat Portal β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Application Layer β”‚ β”‚ Controllers β†’ Services β†’ Models β”‚ β”‚ (Business Logic, Validasi, Auth) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Data Access Layer β”‚ β”‚ Repositories, Query Builders, Cache β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Database Layer (MySQL) β”‚ β”‚ 15+ Tables (users, penduduk, bansos...) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Core Tables

πŸ”„ Web Desa - Data Flow & API Integration

Internal Data Flow

Masyarakat Admin Desa β”‚ β”‚ β”‚ Input (Surat, Pengaduan) β”‚ Input (Konten, Data) β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ API Requests + Form Submissions β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Laravel Controllers & Middleware β”‚ β”‚ (Auth, Validation, Authorization) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Database (MySQL) β”‚ β”‚ + File Storage (Uploads) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Notifications β”‚ β”‚ β€’ Email (Surat status, Pengaduan) β”‚ β”‚ β€’ In-app (Dashboard alerts) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

API Public Endpoints (untuk Monitoring)

GET /api/public/summary β†’ Ringkasan desa (total penduduk, bansos, APBDes)

GET /api/public/penduduk β†’ Data demografis (filter, pagination)

GET /api/public/bansos β†’ Distribusi bansos (per bulan, per KK)

GET /api/public/apbdes β†’ Keuangan desa (realisasi, timeline)

Security: API Key (X-API-KEY header) + Rate Limit (60 req/min) + JWT middleware untuk internal

πŸ“‹ Problem Statement

Saat Ini (As-Is)

  • πŸ”΄ 50+ desa punya web sendiri-sendiri
  • πŸ”΄ Data terpisah di 10 kabupaten berbeda
  • πŸ”΄ Pemerintah provinsi tidak bisa monitor
  • πŸ”΄ Tidak ada dashboard terpusat
  • πŸ”΄ Sulit membandingkan performa antar desa
  • πŸ”΄ Tidak ada visibility regional

Yang Kita Inginkan (To-Be)

  • βœ… Satu dashboard pusat agregasi 50+ desa
  • βœ… Setiap desa tetap manage web sendiri
  • βœ… Pemerintah provinsi bisa monitor semua
  • βœ… Pemerintah kabupaten hanya lihat desa sendiri
  • βœ… Real-time data sync & alerts
  • βœ… Mobile app untuk akses mudah
Solusi: Build Monitoring Heartware Digital Desa Platform + Keep Individual Desa Instances
🎯

MONITORING HEARTWARE DIGITAL DESA

Platform Terpusat Monitoring 50+ Desa

Satu web yang mengagregasi data dari semua desa
Dengan kontrol akses berbeda untuk setiap level

Publik β†’ Kabupaten β†’ Provinsi β†’ Heartware Digital

πŸ—„οΈ Monitoring - System Design & Database

Arsitektur Multi-Layer

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MONITORING HEARTWARE DIGITAL DESA β”‚ β”‚ (Laravel 12 + PostgreSQL + Redis) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Frontend Layer (Vue.js 3) β”‚ β”‚ β€’ Public Dashboard β”‚ β”‚ β€’ Auth Dashboard (Kab/Prov) β”‚ β”‚ β€’ Admin Panel β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ API Layer (REST + Webhooks) β”‚ β”‚ β€’ Dashboard Endpoints β”‚ β”‚ β€’ Desa Management APIs β”‚ β”‚ β€’ Sync & Alert APIs β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Business Logic (Services & Jobs) β”‚ β”‚ β€’ SyncService (pull dari 50+ desa) β”‚ β”‚ β€’ AggregationService (compute summary) β”‚ β”‚ β€’ AlertService (notifikasi) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Cache Layer (Redis) β”‚ β”‚ β€’ Desa summaries (updated every 10 min) β”‚ β”‚ β€’ Dashboard cards & charts β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Database (PostgreSQL) β”‚ β”‚ β€’ 12 Tables (users, desa, api_keys...) β”‚ β”‚ β€’ Audit logs (immutable) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Core Tables (PostgreSQL)

Table Fields Purpose
users id, name, email, role, kabupaten_id Auth user (admin, kabupaten, provinsi)
kabupatens id, nama, provinsi, koordinat 10 kabupaten/kota
desas id, nama, kabupaten_id, api_url, api_key 50+ desa dengan API endpoint
desa_summaries desa_id, total_penduduk, total_bansos, apbdes_data, updated_at Cache agregat dari API desa
sync_logs id, desa_id, status, error_msg, synced_at Tracking setiap sync (success/fail)
audit_logs id, user_id, action, model, changes, created_at Immutable log semua perubahan

πŸ”„ Monitoring - Data Sync & Cache Strategy

Pull-Based Sync Architecture

Every 10 Minutes (Laravel Scheduled Job) β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ SyncService::syncAllDesas() β”‚ β”‚ (Async Queue - Background Job) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚Desa A β”‚ β”‚Desa B β”‚ β”‚Desa N β”‚ β”‚ API β”‚ β”‚ API β”‚ β”‚ API β”‚ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό Validate Response (Status 200, JSON valid) β”‚ β”œβ”€β†’ SUCCESS: Update desa_summaries in DB β”‚ Cache to Redis (30 min TTL) β”‚ Log to sync_logs (status: success) β”‚ └─→ FAIL: Log error, Retry (3x) If still fail β†’ Alert to admin Keep old cache until next success

Cache Strategy

Redis Cache Keys

desa_summary:{desa_id} β†’ Individual desa

dashboard:all β†’ All 50 desa summary

kabupaten:{kab_id} β†’ Filtered per kabupaten

TTL & Invalidation

βœ“ Cache TTL: 30 minutes

βœ“ Auto refresh: Every 10 min sync

βœ“ Manual invalidate: Admin trigger

βœ“ Fallback: Old cache if sync fails

πŸ—οΈ Arsitektur Sistem Monitoring

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MONITORING HEARTWARE DIGITAL DESA β”‚ β”‚ (Central Dashboard + Mobile Apps) β”‚ β”‚ Laravel 12 + PostgreSQL + Redis β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚Desa A β”‚ β”‚Desa B β”‚ β”‚Desa N β”‚ β”‚/api/..β”‚ β”‚/api/..β”‚ β”‚/api/..β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Every 10 min Pull via API Keys Cache to Redis Serve Dashboard
Key Point: Pull-based sync (bukan push), data cached di Redis, toleran kalau desa offline, async queue untuk scalability

πŸ‘₯ Role & Permission (1/2)

1️⃣ Publik (Tanpa Login)

βœ“ Dashboard summary agregat semua 50 desa

βœ“ Total penduduk, bansos, APBDes realisasi

βœ“ Daftar desa + detail (statistik, berita, galeri)

βœ— Tidak bisa lihat nama penduduk atau data sensitif

2️⃣ Pemerintah Kabupaten (10 users)

βœ“ Dashboard desa-desa di kabupaten masing-masing SAJA

βœ“ Detail statistik, bansos, APBDes, surat online per desa

βœ“ Perbandingan antar desa dalam 1 kabupaten

βœ— TIDAK bisa lihat desa kabupaten lain

3️⃣ Dinas Kominfo Provinsi (1 user)

βœ“ SEMUA desa di SEMUA 10 kabupaten

βœ“ Perbandingan desa dari kabupaten berbeda

βœ“ Regional KPI report + monitoring alerts

βœ— Readonly access (tidak bisa edit)

πŸ‘₯ Role & Permission (2/2)

4️⃣ Tim Heartware Digital (Superadmin)

βœ“ Full access: CRUD kabupaten, desa, users, API keys

βœ“ Manage system settings, sync scheduling, monitoring

βœ“ View audit logs (immutable, semua perubahan tercatat)

βœ“ Manual trigger sync, system monitoring & alerts

Access Matrix

Feature Publik Kabupaten Provinsi Heartware
Dashboard Summary βœ… βœ… βœ… βœ…
Detail Desa Sendiri - βœ… βœ… βœ…
Lihat Semua Desa - - βœ… βœ…
Manage Users & API Keys - - - βœ…

πŸ“Š Monitoring Dashboard - Fitur Utama

1. Public Dashboard (No Login)

2. Kabupaten Dashboard

3. Provinsi Dashboard

πŸ› οΈ Technology Stack

Backend

Laravel 12
PostgreSQL
Redis
  • Queue System (async jobs)
  • JWT Authentication
  • Role-based Access Control
  • Telescope (debugging)

Frontend & Mobile

Vue.js 3
Tailwind CSS
Flutter (Phase 2)
  • Real-time Charts (ApexCharts)
  • GIS Maps (Leaflet.js)
  • Mobile Responsive
  • Offline Support
Infrastructure: VPS/Kubernetes + GitHub Actions CI/CD + Sentry Error Tracking + DataDog Monitoring

βš™οΈ Admin Panel (Heartware Only)

Dashboard Management

Monitoring & Logs

Alerts & Notifications

πŸ“… Implementation Timeline (MVP)

Week 1-2: Foundation

Setup Laravel 12, PostgreSQL, Auth system, API key management

Week 3-4: Sync Engine

Build sync job, Redis cache, sync status tracker, error handling

Week 5-6: Backend APIs

Dashboard endpoints, desa filtering, comparison, alerts

Week 7-8: Frontend (Vue.js)

Public dashboard, desa list, detail view, components

Week 9-10: Auth Dashboard

Role-based dashboard, desa filtering, comparison view

Week 11-12: Admin Panel

CRUD operations, user management, audit logs, monitoring

Week 13-14: Testing & Deploy

Unit/E2E tests, security audit, staging & production

Total: 14 minggu (3.5 bulan) untuk MVP

πŸ’° Cost Estimation

Development (One-Time)

Web Development (MVP) Rp 300 - 600 juta
Backend + Frontend + Admin + Testing (8-12 weeks)

Infrastructure (Monthly)

VPS Server (2-4 vCPU, 4-8GB RAM) Rp 5 - 8 juta
Managed PostgreSQL Rp 1 - 2 juta
CDN + Monitoring + Sentry Rp 1 - 2 juta
Total/Bulan Rp 7 - 12 juta

πŸ’Ž Total Tahun Pertama: Rp 600 juta - 1.2 miliar

✨ Key Benefits

πŸ“ˆ

Skalabilitas

Dari 50 desa bisa scale ke 200+ tanpa redesign

πŸ”’

Security

JWT, role-based access, audit logs, encryption

⚑

Performance

Redis cache, async queue, toleran offline

πŸ“±

Multi-Channel

Web dashboard + mobile apps (Phase 2)

πŸ“Š

Insights

Comparison, trends, alerts, real-time monitoring

🀝

Collaboration

Multi-level access, granular permissions

πŸš€ Next Steps

Immediate (Minggu Depan)

Phase 1 Execution

Phase 2 Planning

❓

Questions & Discussion

Terima kasih atas perhatian

Mari kita wujudkan Heartware Digital Desa untuk Indonesia! πŸŽ‰

πŸ“§ Contact: admin@heartware.id

πŸ”— Dashboard: monitoring.heartware.id

πŸ’» GitHub: github.com/heartware/monitoring-desa

1 / 21