KembaliArsip / superapp-productivity / dashboard-monitoring-progress
superapp-productivity

dashboard-monitoring-progress

115 file Β· 192.6 MB

Sistem informasi live β€” dashboard-monitoring-progress.vercel.appBuka di tab baru

README

<div align="center">

πŸ›οΈ Dashboard Monitoring Progress

Sistem Monitoring Terintegrasi untuk Program Perumahan dan Permukiman Kementerian PKP

Next.js TypeScript Tailwind CSS License Vercel

<p align="center"> <strong>Platform monitoring progress real-time untuk program BSPS, Penanganan Kawasan Kumuh, dan Sanitasi Layak dengan visualisasi data interaktif, peta geografis, dan sistem manajemen pengguna berbasis role.</strong> </p>

Demo Langsung β€’ Fitur β€’ Instalasi β€’ Dokumentasi β€’ Keamanan β€’ Roadmap

</div>

πŸ“‹ Daftar Isi


🎯 Tentang Proyek

Dashboard Monitoring Progress adalah sistem informasi terintegrasi yang dirancang khusus untuk Kementerian Pekerjaan Umum dan Perumahan Rakyat (PUPR) dalam memantau progres pelaksanaan program-program strategis di bidang perumahan dan permukiman.

Program yang Dimonitor

ProgramDeskripsiTarget
BSPSBantuan Stimulan Perumahan SwadayaPeningkatan kualitas rumah tidak layak huni
Kawasan KumuhPenanganan Kawasan Permukiman KumuhPengurangan luasan kawasan kumuh
Sanitasi LayakProgram Rumah Sanitasi LayakPenyediaan akses sanitasi yang memadai

Mengapa Dashboard Ini?

  • βœ… Real-time Monitoring: Pantau progres fisik dan keuangan secara real-time
  • βœ… Visualisasi Intuitif: Data kompleks disajikan dalam bentuk grafik dan peta interaktif
  • βœ… Multi-level Tracking: Monitoring dari level nasional hingga kabupaten/kota
  • βœ… Decision Support: Identifikasi cepat area bermasalah dengan sistem early warning
  • βœ… Akuntabilitas: Audit trail lengkap untuk setiap aktivitas pengguna

🌐 Demo

Demo Credentials

RoleUsernamePasswordAkses
Adminadminadmin123Full Access
Operatoroperatoroperator123View, Edit, Export
Viewerviewerviewer123View Only

✨ Fitur Utama

πŸ“Š Dashboard & Visualisasi

<table> <tr> <td width="50%">

Dashboard Overview

  • Executive summary dengan KPI cards
  • Quick links ke semua program
  • Status summary (On Track, Warning, Danger)
  • Comparative charts antar program
</td> <td width="50%">

Dashboard BSPS

  • Monitoring target vs realisasi
  • Progress per provinsi
  • Detail per kabupaten/kota
  • Peta distribusi geografis
</td> </tr> <tr> <td width="50%">

Dashboard BSPS Anggaran 2025

  • Alokasi dan realisasi anggaran
  • Progress fisik per tahap
  • Status pencairan (SPM, SP2D)
  • Identifikasi permasalahan
</td> <td width="50%">

Dashboard Kumuh

  • Progress peningkatan kualitas
  • Deviasi progres fisik vs rencana
  • Pagu anggaran vs realisasi
  • Trend progress over time
</td> </tr> <tr> <td width="50%">

Kumuh Monitoring (GENESIS)

  • Project-level monitoring
  • Analisis komponen detail
  • Ringkasan kontraktor
  • Proyek dengan deviasi
</td> <td width="50%">

Dashboard Sanitasi

  • Coverage area sanitasi
  • Distribusi tipe fasilitas
  • Progress per provinsi
  • Peta heat map coverage
</td> </tr> </table>

πŸ›‘οΈ Manajemen & Administrasi

FiturDeskripsi
User ManagementCRUD pengguna, assignment role, toggle status aktif
Activity LogTracking lengkap semua aktivitas pengguna dengan timestamp
Database ManagementView, export (CSV/JSON), dan print data
SettingsProfil pengguna, notifikasi, backup & restore

πŸ“ˆ Charts & Grafik

  • Bar Chart: Perbandingan target vs realisasi
  • Line Chart: Trend waktu dan progress
  • Area Chart: Kumulatif dan distribusi
  • Pie/Donut Chart: Proporsi dan komposisi

πŸ—ΊοΈ Peta Interaktif

  • Visualisasi geografis berbasis Leaflet
  • Custom markers dengan status warna
  • Popup detail informasi
  • Zoom dan pan control

πŸ“± Responsive & PWA

  • Mobile-first responsive design
  • Progressive Web App (PWA) ready
  • Installable di device
  • Offline capability (planned)

πŸ› οΈ Tech Stack

Core Framework

TechnologyVersionPurpose
Next.js14.1.0React framework dengan SSR/SSG
React18.2.0UI component library
TypeScript5.3.3Type safety & developer experience

Styling & UI

TechnologyVersionPurpose
Tailwind CSS3.4.1Utility-first CSS framework
Lucide0.312.0Beautiful icon library
PostCSS8.4.33CSS transformation
Autoprefixer10.4.17Browser vendor prefixes

Data Visualization

TechnologyVersionPurpose
Recharts2.10.4React charting library
Leaflet1.9.4Interactive maps
React Leaflet4.2.1React wrapper for Leaflet

State Management & Data Fetching

TechnologyVersionPurpose
Zustand4.5.0Lightweight state management
React Query5.17.19Data fetching & caching
date-fns3.2.0Modern date utility

Development Tools

TechnologyVersionPurpose
ESLint8.56.0Code quality & linting
eslint-config-next14.1.0Next.js ESLint rules

πŸ—οΈ Arsitektur Sistem

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        CLIENT LAYER                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚
β”‚  β”‚   Browser    β”‚  β”‚   PWA App    β”‚  β”‚   Mobile     β”‚          β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    APPLICATION LAYER                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                           β–Ό                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚                    Next.js 14 (App Router)               β”‚    β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚    β”‚
β”‚  β”‚  β”‚   Pages     β”‚  β”‚ Components  β”‚  β”‚   Hooks     β”‚      β”‚    β”‚
β”‚  β”‚  β”‚  /app/*     β”‚  β”‚ /components β”‚  β”‚  /hooks     β”‚      β”‚    β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚    β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚    β”‚
β”‚  β”‚  β”‚   Stores    β”‚  β”‚    Types    β”‚  β”‚   Utils     β”‚      β”‚    β”‚
β”‚  β”‚  β”‚  (Zustand)  β”‚  β”‚  /types     β”‚  β”‚   /lib      β”‚      β”‚    β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      DATA LAYER                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Local Storage  β”‚  β”‚   Mock Data     β”‚  β”‚  Static JSON    β”‚  β”‚
β”‚  β”‚  (Persistence)  β”‚  β”‚   (/lib/data)   β”‚  β”‚  (/public)      β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Component Architecture

App
β”œβ”€β”€ DashboardLayout
β”‚   β”œβ”€β”€ Sidebar (Navigation)
β”‚   β”œβ”€β”€ Header (Title, Theme, User)
β”‚   └── Main Content
β”‚       β”œβ”€β”€ KPI Cards
β”‚       β”œβ”€β”€ Charts (Bar, Line, Area, Pie)
β”‚       β”œβ”€β”€ DataTable
β”‚       └── MapComponent
β”œβ”€β”€ Providers
β”‚   β”œβ”€β”€ ThemeProvider
β”‚   └── ToastProvider
└── Stores
    β”œβ”€β”€ AuthStore (User & Permissions)
    β”œβ”€β”€ ThemeStore (Dark/Light Mode)
    └── ToastStore (Notifications)

πŸš€ Quick Start

Prerequisites

Pastikan sistem Anda memiliki:

  • Node.js >= 18.0.0
  • npm >= 9.0.0 atau yarn >= 1.22.0
  • Git >= 2.0.0

Installation

# 1. Clone repository
git clone https://github.com/subkhanibnuaji/dashboard-monitoring-progress.git

# 2. Masuk ke direktori proyek
cd dashboard-monitoring-progress

# 3. Install dependencies
npm install
# atau
yarn install

# 4. Jalankan development server
npm run dev
# atau
yarn dev

# 5. Buka browser
# http://localhost:3000

Build untuk Production

# Build aplikasi
npm run build

# Jalankan production server
npm start

# Lint check
npm run lint

Environment Variables (Optional)

Buat file .env.local untuk konfigurasi tambahan:

# API Configuration (untuk integrasi masa depan)
NEXT_PUBLIC_API_URL=https://api.example.com

# Map Configuration
NEXT_PUBLIC_MAP_TILE_URL=https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png

# Analytics (opsional)
NEXT_PUBLIC_GA_ID=UA-XXXXXXXXX-X

# Feature Flags
NEXT_PUBLIC_ENABLE_ANALYTICS=false
NEXT_PUBLIC_ENABLE_DEBUG=false

πŸ“ Struktur Proyek

dashboard-monitoring-progress/
β”‚
β”œβ”€β”€ πŸ“‚ public/                      # Static assets
β”‚   β”œβ”€β”€ πŸ“‚ icons/                   # PWA icons (72x72 - 512x512)
β”‚   β”œβ”€β”€ πŸ“„ manifest.json            # PWA manifest
β”‚   └── πŸ“„ favicon.ico              # Favicon
β”‚
β”œβ”€β”€ πŸ“‚ src/
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ app/                     # Next.js App Router
β”‚   β”‚   β”œβ”€β”€ πŸ“„ layout.tsx           # Root layout
β”‚   β”‚   β”œβ”€β”€ πŸ“„ page.tsx             # Homepage (Overview)
β”‚   β”‚   β”œβ”€β”€ πŸ“„ globals.css          # Global styles
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ bsps/                # Dashboard BSPS
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ bsps-anggaran/       # BSPS Anggaran 2025
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ kumuh/               # Dashboard Kumuh
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ kumuh-monitoring/    # Kumuh Monitoring Detail
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ sanitasi/            # Dashboard Sanitasi
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ login/               # Authentication
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ users/               # User Management (Admin)
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ activity-log/        # Activity Log (Admin)
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ database/            # Database Management
β”‚   β”‚   β”‚   └── πŸ“„ page.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   └── πŸ“‚ settings/            # User Settings
β”‚   β”‚       └── πŸ“„ page.tsx
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ components/
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ charts/              # Chart components
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ BarChartComponent.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ LineChartComponent.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ AreaChartComponent.tsx
β”‚   β”‚   β”‚   └── πŸ“„ PieChartComponent.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ layout/              # Layout components
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ DashboardLayout.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ Sidebar.tsx
β”‚   β”‚   β”‚   └── πŸ“„ Header.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ maps/                # Map components
β”‚   β”‚   β”‚   └── πŸ“„ MapComponent.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ providers/           # Context providers
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ ThemeProvider.tsx
β”‚   β”‚   β”‚   └── πŸ“„ ToastProvider.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ tables/              # Table components
β”‚   β”‚   β”‚   └── πŸ“„ DataTable.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   └── πŸ“‚ ui/                  # UI components
β”‚   β”‚       β”œβ”€β”€ πŸ“„ Badge.tsx
β”‚   β”‚       β”œβ”€β”€ πŸ“„ Button.tsx
β”‚   β”‚       β”œβ”€β”€ πŸ“„ Card.tsx
β”‚   β”‚       β”œβ”€β”€ πŸ“„ KPICard.tsx
β”‚   β”‚       β”œβ”€β”€ πŸ“„ ProgressBar.tsx
β”‚   β”‚       β”œβ”€β”€ πŸ“„ Skeleton.tsx
β”‚   β”‚       β”œβ”€β”€ πŸ“„ ThemeToggle.tsx
β”‚   β”‚       β”œβ”€β”€ πŸ“„ Toast.tsx
β”‚   β”‚       β”œβ”€β”€ πŸ“„ QuickLinks.tsx
β”‚   β”‚       └── πŸ“„ KeyboardShortcutsModal.tsx
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ hooks/                   # Custom React hooks
β”‚   β”‚   └── πŸ“„ useKeyboardShortcuts.ts
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“‚ lib/
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ data/                # Mock data
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ bsps-data.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ bsps-anggaran-2025.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ kumuh-data.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ kumuh-projects-2025.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ sanitasi-data.ts
β”‚   β”‚   β”‚   └── πŸ“„ summary-data.ts
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ πŸ“‚ stores/              # Zustand stores
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ auth-store.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ πŸ“„ theme-store.ts
β”‚   β”‚   β”‚   └── πŸ“„ toast-store.ts
β”‚   β”‚   β”‚
β”‚   β”‚   └── πŸ“„ utils.ts             # Utility functions
β”‚   β”‚
β”‚   └── πŸ“‚ types/                   # TypeScript definitions
β”‚       └── πŸ“„ index.ts
β”‚
β”œβ”€β”€ πŸ“„ .eslintrc.json               # ESLint configuration
β”œβ”€β”€ πŸ“„ .gitignore                   # Git ignore rules
β”œβ”€β”€ πŸ“„ next.config.js               # Next.js configuration
β”œβ”€β”€ πŸ“„ package.json                 # Dependencies & scripts
β”œβ”€β”€ πŸ“„ postcss.config.js            # PostCSS configuration
β”œβ”€β”€ πŸ“„ tailwind.config.js           # Tailwind CSS configuration
β”œβ”€β”€ πŸ“„ tsconfig.json                # TypeScript configuration
β”œβ”€β”€ πŸ“„ vercel.json                  # Vercel deployment config
└── πŸ“„ README.md                    # Documentation (this file)

πŸ“– Panduan Penggunaan

Login & Authentication

  1. Akses halaman login di /login
  2. Masukkan credentials sesuai role
  3. Setelah login, Anda akan diarahkan ke dashboard utama

Navigasi Dashboard

  • Sidebar: Navigasi utama ke semua program
  • Header: Informasi user, theme toggle, dan menu
  • Breadcrumb: Lokasi saat ini dalam aplikasi

Menggunakan Filter

  1. Klik dropdown filter di bagian atas dashboard
  2. Pilih provinsi/kabupaten yang ingin ditampilkan
  3. Data akan di-filter secara otomatis

Export Data

  1. Buka halaman Database (/database)
  2. Pilih dataset yang ingin di-export
  3. Klik tombol "Export CSV" atau "Export JSON"
  4. File akan ter-download otomatis

Print Report

  1. Di halaman Database, klik tombol "Print"
  2. Browser akan membuka dialog print
  3. Pilih printer atau save as PDF

πŸ” Keamanan & Enkripsi

Role-Based Access Control (RBAC)

Sistem mengimplementasikan RBAC dengan 3 tingkat akses:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     PERMISSION MATRIX                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Permission  β”‚   Admin   β”‚  Operator β”‚       Viewer          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ View Data   β”‚     βœ…    β”‚     βœ…    β”‚          βœ…           β”‚
β”‚ Edit Data   β”‚     βœ…    β”‚     βœ…    β”‚          ❌           β”‚
β”‚ Delete Data β”‚     βœ…    β”‚     ❌    β”‚          ❌           β”‚
β”‚ Export Data β”‚     βœ…    β”‚     βœ…    β”‚          ❌           β”‚
β”‚ Manage Usersβ”‚     βœ…    β”‚     ❌    β”‚          ❌           β”‚
β”‚ View Logs   β”‚     βœ…    β”‚     ❌    β”‚          ❌           β”‚
β”‚ Settings    β”‚     βœ…    β”‚     ❌    β”‚          ❌           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Security Features

FeatureDeskripsi
Authentication GateSemua halaman protected memerlukan login
Permission CheckValidasi permission sebelum render konten
Session ManagementTracking last login dan session aktif
Account LockoutKemampuan disable akun tidak aktif
Audit TrailLogging lengkap semua aktivitas pengguna

Activity Logging

Sistem mencatat semua aktivitas berikut:

type ActivityAction =
  | 'LOGIN'           // User login
  | 'LOGOUT'          // User logout
  | 'CREATE_USER'     // Pembuatan user baru
  | 'UPDATE_USER'     // Update data user
  | 'DELETE_USER'     // Hapus user
  | 'TOGGLE_USER_STATUS'  // Aktivasi/deaktivasi user
  | 'EXPORT_DATA'     // Export data
  | 'DELETE_DATA';    // Hapus data

Data Protection

AspekImplementasi
Client-side StorageData tersimpan di Local Storage dengan partisi terpisah
State PersistenceZustand middleware untuk persist state dengan enkripsi key
No Backend ExposureTidak ada API endpoint yang terekspos
Secure HeadersNext.js security headers (CSP, HSTS)

Future Security Enhancements

  • JWT Token-based authentication
  • Server-side session management
  • Data encryption at rest (AES-256)
  • Two-factor authentication (2FA)
  • Rate limiting & brute force protection
  • IP whitelisting untuk admin access

⌨️ Keyboard Shortcuts

Untuk meningkatkan produktivitas, tersedia keyboard shortcuts:

ShortcutAction
Ctrl + KFocus search bar
Ctrl + Shift + DToggle dark/light mode
Alt + HGo to Home (Overview)
Alt + BGo to BSPS Dashboard
Alt + MGo to Kumuh Dashboard
Alt + SGo to Sanitasi Dashboard
/Show keyboard shortcuts modal

πŸ“Š Data & API

Data Structure

BSPS Data

interface BSPSData {
  id: string;
  kabupaten: string;        // Nama kabupaten/kota
  provinsi: string;         // Nama provinsi
  target: number;           // Target unit
  realisasi: number;        // Realisasi unit
  persentase: number;       // Persentase pencapaian
  status: 'on-track' | 'warning' | 'danger';
  lat: number;              // Latitude
  lng: number;              // Longitude
}

BSPS Anggaran 2025

interface BSPSAnggaran2025 {
  id: string;
  provinsi: string;
  kodeProvinsi: string;
  alokasiUnit: number;
  paguAnggaran: number;         // dalam Rupiah
  realisasiAnggaran: number;
  persentaseRealisasi: number;
  verifikasi: number;           // persentase verifikasi
  progressFisik: {
    belumMulai: number;
    awalPekerjaan: number;
    pertengahan: number;
    selesai: number;
  };
  statusPencairan: 'Belum' | 'Proses' | 'SPM' | 'SP2D' | 'Selesai';
  permasalahan: string[];
  tindakLanjut: string[];
  lastUpdated: string;          // ISO date string
}

Kumuh Data

interface KumuhData {
  id: string;
  kabupaten: string;
  provinsi: string;
  progresFisikRencana: number;      // persentase
  progresFisikRealisasi: number;
  deviasi: number;                  // bisa negatif
  paguAnggaran: number;
  realisasiAnggaran: number;
  persentaseRealisasi: number;
}

Sanitasi Data

interface SanitasiData {
  id: string;
  wilayah: string;
  provinsi: string;
  jumlahRumah: number;
  sanitasiLayak: number;
  persentase: number;
  tipe: 'Septic Tank' | 'IPAL Komunal' | 'MCK' | 'PDAM';
}

Utility Functions

// Format number dengan locale Indonesia
formatNumber(value: number): string

// Format currency ke Rupiah
formatCurrency(value: number): string

// Format persentase dengan 2 desimal
formatPercentage(value: number): string

// Get status color berdasarkan nilai
getStatusColor(status: string): string

// Export data ke CSV
exportToCSV(data: any[], filename: string, columns: Column[]): void

// Export data ke JSON
exportToJSON(data: any[], filename: string): void

// Print table dengan styling
printTable(data: any[], columns: Column[], title: string): void

πŸš€ Deployment

Vercel (Recommended)

Proyek ini dikonfigurasi untuk deploy ke Vercel dengan mudah:

# Install Vercel CLI
npm i -g vercel

# Deploy
vercel

# Deploy ke production
vercel --prod

Vercel Configuration

{
  "framework": "nextjs",
  "buildCommand": "npm run build",
  "devCommand": "npm run dev",
  "installCommand": "npm install",
  "regions": ["sin1"],
  "functions": {
    "app/**/*.js": {
      "maxDuration": 10
    }
  }
}

Docker Deployment

# Dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:18-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json

EXPOSE 3000
CMD ["npm", "start"]
# Build dan run
docker build -t dashboard-monitoring .
docker run -p 3000:3000 dashboard-monitoring

Manual Server Deployment

# 1. Clone di server
git clone https://github.com/subkhanibnuaji/dashboard-monitoring-progress.git
cd dashboard-monitoring-progress

# 2. Install dependencies
npm ci --production

# 3. Build
npm run build

# 4. Start dengan PM2
pm2 start npm --name "dashboard" -- start

⚑ Performance & Optimasi

Built-in Optimizations

OptimizationDeskripsi
SWC MinificationKompilasi dan minifikasi dengan SWC (lebih cepat dari Babel)
Image OptimizationAutomatic image optimization via Next.js
Code SplittingAutomatic code splitting per-page
Tree ShakingEliminasi dead code saat build
Incremental CompilationTypeScript incremental build

Performance Metrics Target

MetricTargetKeterangan
First Contentful Paint< 1.5sWaktu hingga konten pertama muncul
Largest Contentful Paint< 2.5sWaktu hingga konten terbesar muncul
Time to Interactive< 3.0sWaktu hingga halaman interaktif
Cumulative Layout Shift< 0.1Stabilitas layout

Best Practices Implemented

  • βœ… Memoization dengan useMemo untuk komputasi berat
  • βœ… Lazy loading untuk komponen non-critical
  • βœ… Optimized re-renders dengan Zustand
  • βœ… Efficient data structures
  • βœ… Minimal bundle size

πŸ—ΊοΈ Roadmap Pengembangan

Phase 1: Foundation βœ… (Completed)

  • Setup Next.js 14 dengan TypeScript
  • Implementasi Tailwind CSS theming
  • Dashboard Overview dengan KPI
  • Dashboard BSPS dengan charts dan peta
  • Dashboard Kumuh dengan progress tracking
  • Dashboard Sanitasi
  • Role-based access control
  • Activity logging
  • Dark/Light mode
  • Responsive design
  • PWA manifest

Phase 2: Enhanced Features πŸ”„ (In Progress)

  • BSPS Anggaran 2025 monitoring
  • Kumuh Monitoring dengan GENESIS features
  • User management system
  • Database export (CSV/JSON)
  • Keyboard shortcuts
  • Toast notifications
  • Advanced filtering dan search
  • Batch data operations
  • Custom date range picker

Phase 3: Backend Integration πŸ“‹ (Planned)

  • REST API development
  • PostgreSQL database integration
  • Real-time data updates (WebSocket)
  • Authentication dengan JWT
  • API rate limiting
  • Data caching layer (Redis)
  • File upload untuk dokumen

Phase 4: Advanced Analytics πŸ“‹ (Planned)

  • Predictive analytics
  • AI-powered insights
  • Custom report builder
  • Scheduled report generation
  • Email notification system
  • WhatsApp integration
  • Dashboard embedding

Phase 5: Enterprise Features πŸ“‹ (Planned)

  • Multi-tenant architecture
  • SSO integration (Keycloak/LDAP)
  • Audit compliance reporting
  • Data encryption at rest
  • Backup & disaster recovery
  • High availability setup
  • Performance monitoring (APM)

Phase 6: Mobile & Offline πŸ“‹ (Planned)

  • Native mobile app (React Native)
  • Offline-first architecture
  • Push notifications
  • Location-based features
  • Camera integration untuk dokumentasi
  • Barcode/QR scanner

🀝 Contributing

Kami menyambut kontribusi dari komunitas! Berikut panduan untuk berkontribusi:

Development Workflow

# 1. Fork repository
# 2. Clone fork Anda
git clone https://github.com/YOUR_USERNAME/dashboard-monitoring-progress.git

# 3. Buat branch baru
git checkout -b feature/nama-fitur

# 4. Lakukan perubahan dan commit
git add .
git commit -m "feat: menambahkan fitur baru"

# 5. Push ke fork
git push origin feature/nama-fitur

# 6. Buat Pull Request

Commit Convention

Gunakan format commit message berikut:

<type>(<scope>): <description>

[optional body]
[optional footer]
TypeDeskripsi
featFitur baru
fixBug fix
docsDokumentasi
styleFormatting, tidak mengubah logic
refactorRefactoring kode
testMenambah/memperbaiki tests
choreMaintenance tasks

Code Style

  • Gunakan TypeScript strict mode
  • Follow ESLint rules yang sudah dikonfigurasi
  • Gunakan Tailwind CSS untuk styling
  • Tulis komponen sebagai functional components
  • Implementasi proper error handling

Pull Request Guidelines

  1. Pastikan semua tests pass
  2. Update dokumentasi jika diperlukan
  3. Sertakan screenshots untuk UI changes
  4. Link ke issue yang terkait
  5. Minta review dari maintainer

πŸ“„ License

MIT License

Copyright (c) 2024 Subkhan Ibnu Aji

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

πŸ“ž Kontak & Support

<div align="center">

Developer

Subkhan Ibnu Aji

GitHub LinkedIn

Project Links

Repository Issues Discussions

</div>
<div align="center">

⭐ Star Repository Ini

Jika proyek ini membantu Anda, berikan ⭐ star untuk mendukung pengembangan!

<br>

Made with ❀️ for Indonesia's Housing & Settlement Programs

<br>

Built with Next.js Deployed on Vercel

</div>

File Utama

  • .env.example
  • .gitignore
  • .npmrc
  • .vercelignore
  • DEPLOYMENT_RULES.md
  • FEATURE_FORGE_ROADMAP.md
  • FEATURE_SUMMARY.md
  • LICENSE