Files
desa-darmasaba/STRUKTUR-PROJEK.md

29 KiB

Dokumentasi Struktur Proyek - Desa Darmasaba

1. Ringkasan Proyek

Desa Darmasaba adalah aplikasi web komprehensif untuk layanan pemerintahan desa di Desa Darmasaba, Kabupaten Badung, Bali. Aplikasi ini berfungsi sebagai platform digital untuk layanan pemerintah, informasi publik, dan keterlibatan masyarakat.

Tech Stack

Kategori Teknologi
Framework Frontend Next.js 15 dengan App Router
Bahasa TypeScript (strict mode)
Styling Mantine UI v7/v8 + Custom CSS
Backend API Elysia.js (high-performance TypeScript framework)
Database PostgreSQL
ORM Prisma 6.3.1
Runtime Bun
State Management Jotai + Valtio + SWR
Autentikasi iron-session + JWT
File Storage Seafile
Rich Text Editor TipTap
Charts Recharts + Chart.js
Maps Leaflet + react-leaflet
UI Components Mantine, PrimeReact, Framer Motion
Validasi Zod
Testing Vitest (unit), Playwright (E2E)
Deployment Docker + GitHub Actions + Portainer
Registry GitHub Container Registry (GHCR)

2. Struktur Direktori

desa-darmasaba/
├── .github/workflows/           # GitHub Actions CI/CD
│   ├── docker-publish.yml       # Auto build & push saat tag v*
│   ├── publish.yml              # Manual build & push ke GHCR
│   ├── re-pull.yml              # Manual re-pull image di Portainer
│   └── script/                  # Script deployment
│
├── prisma/
│   ├── schema.prisma            # Database schema (2413 baris, 100+ model)
│   ├── seed.ts                  # Database seeder utama
│   └── _seeder_list/            # Data seed per modul
│       ├── desa/                # Seed berita, gallery, layanan, dll
│       ├── ekonomi/             # Seed APBDes, demografi, dll
│       ├── inovasi/             # Seed ide inovatif, desa digital
│       ├── keamanan/            # Seed keamanan, kontak darurat
│       ├── kesehatan/           # Seed fasilitas kesehatan, posyandu
│       ├── kependudukan/        # Seed data penduduk
│       ├── lingkungan/          # Seed lingkungan desa
│       ├── pendidikan/          # Seed sekolah, beasiswa
│       ├── ppid/                # Seed PPID
│       └── landing-page/        # Seed landing page
│
├── src/
│   ├── app/                     # Next.js App Router
│   │   ├── _com/                # Komponen global (SplashScreen, WebVitals)
│   │   ├── admin/               # Panel administrasi (protected)
│   │   │   ├── _com/            # Komponen admin shared
│   │   │   ├── (dashboard)/     # Dashboard admin dengan route groups
│   │   │   │   ├── _com/        # Komponen dashboard shared
│   │   │   │   ├── _state/      # State khusus dashboard
│   │   │   │   ├── _utils/      # Utilitas dashboard
│   │   │   │   ├── auth/        # Autentikasi admin
│   │   │   │   ├── desa/        # Admin: berita, gallery, profil, layanan
│   │   │   │   ├── ekonomi/     # Admin: APBDes, demografi, BUMDes
│   │   │   │   ├── inovasi/     # Admin: ide inovatif, desa digital
│   │   │   │   ├── keamanan/    # Admin: keamanan, kontak darurat
│   │   │   │   ├── kependudukan/# Admin: banjar, agama, umur, migrasi
│   │   │   │   ├── kesehatan/   # Admin: puskesmas, posyandu, wabah
│   │   │   │   ├── landing-page/# Admin: konten landing page
│   │   │   │   ├── lingkungan/  # Admin: konservasi, sampah, penghijauan
│   │   │   │   ├── musik/       # Admin: musik desa
│   │   │   │   ├── pendidikan/  # Admin: sekolah, beasiswa, perpustakaan
│   │   │   │   ├── ppid/        # Admin: PPID, IKM, permohonan
│   │   │   │   └── user&role/   # Admin: manajemen user & role
│   │   │   ├── auth/            # Halaman login admin
│   │   │   ├── csv/             # Upload/demo CSV
│   │   │   ├── images/          # Manajemen gambar
│   │   │   └── upload-demo/     # Demo upload
│   │   │
│   │   ├── api/                 # API routes (Elysia.js)
│   │   │   ├── [[...slugs]]/    # Catch-all route untuk Elysia
│   │   │   │   ├── _lib/        # Modul API per domain
│   │   │   │   │   ├── auth/    # Autentikasi API
│   │   │   │   │   ├── desa/    # API modul desa
│   │   │   │   │   ├── ekonomi/ # API modul ekonomi
│   │   │   │   │   ├── fileStorage/ # API file storage
│   │   │   │   │   ├── inovasi/ # API modul inovasi
│   │   │   │   │   ├── keamanan/# API modul keamanan
│   │   │   │   │   ├── kependudukan/ # API modul kependudukan
│   │   │   │   │   ├── kesehatan/    # API modul kesehatan
│   │   │   │   │   ├── landing_page/ # API landing page
│   │   │   │   │   ├── lingkungan/   # API modul lingkungan
│   │   │   │   │   ├── pendidikan/   # API modul pendidikan
│   │   │   │   │   ├── ppid/         # API modul PPID
│   │   │   │   │   ├── search/       # API pencarian global
│   │   │   │   │   └── user/         # API user management
│   │   │   │   └── route.ts     # Entry point Elysia server
│   │   │   ├── admin/           # API khusus admin
│   │   │   ├── auth/            # API autentikasi
│   │   │   ├── health/          # Health check endpoint
│   │   │   ├── layout/          # API layout
│   │   │   ├── news/            # API berita
│   │   │   ├── subscribe/       # API subscription (email)
│   │   │   └── tts/             # Text-to-Speech (ElevenLabs)
│   │   │
│   │   ├── context/             # React contexts
│   │   │   └── MusicContext.tsx # Context untuk pemutar musik
│   │   │
│   │   ├── darmasaba/           # Halaman publik (front-facing)
│   │   │   ├── _com/            # Komponen shared publik
│   │   │   │   ├── main-page/   # Komponen halaman utama
│   │   │   │   ├── Navbar.tsx   # Navigasi utama
│   │   │   │   ├── Footer.tsx   # Footer
│   │   │   │   ├── FixedPlayerBar.tsx # Music player bar
│   │   │   │   ├── LoadDataFirstClient.tsx # Data prefetching
│   │   │   │   ├── NewsReader.tsx # Component pembaca berita
│   │   │   │   ├── globalSearch.tsx # Pencarian global
│   │   │   │   └── scrollToTopButton.tsx
│   │   │   ├── (pages)/         # Halaman publik utama
│   │   │   │   ├── desa/        # Halaman: profil, berita, gallery, layanan
│   │   │   │   ├── ekonomi/     # Halaman: APBDes, BUMDes, demografi
│   │   │   │   ├── inovasi/     # Halaman: inovasi desa
│   │   │   │   ├── keamanan/    # Halaman: keamanan lingkungan
│   │   │   │   ├── kependudukan/# Halaman: data penduduk
│   │   │   │   ├── kesehatan/   # Halaman: fasilitas kesehatan
│   │   │   │   ├── lingkungan/  # Halaman: lingkungan desa
│   │   │   │   ├── module/      # Halaman modul tambahan
│   │   │   │   ├── musik/       # Halaman: musik desa
│   │   │   │   ├── pendidikan/  # Halaman: pendidikan
│   │   │   │   └── ppid/        # Halaman: PPID publik
│   │   │   ├── (tambahan)/      # Halaman tambahan
│   │   │   ├── layout.tsx       # Layout utama publik
│   │   │   └── page.tsx         # Landing page utama
│   │   │
│   │   ├── login/               # Halaman login
│   │   ├── registrasi/          # Halaman registrasi
│   │   ├── waiting-room/        # Halaman waiting room
│   │   ├── terms-of-service/    # Halaman syarat layanan
│   │   ├── test-upload/         # Halaman tes upload
│   │   ├── validasi/            # Halaman validasi
│   │   ├── coba/                # Halaman percobaan
│   │   ├── percobaan/           # Halaman percobaan lainnya
│   │   ├── layout.tsx           # Root layout (MantineProvider)
│   │   ├── page.tsx             # Root page
│   │   ├── error.tsx            # Error boundary
│   │   ├── not-found.tsx        # 404 page
│   │   ├── globals.css          # Global styles
│   │   └── favicon.ico
│   │
│   ├── components/
│   │   └── admin/               # Komponen admin reusable
│   │       ├── AdminThemeProvider.tsx
│   │       ├── DarkModeToggle.tsx
│   │       ├── UnifiedSurface.tsx
│   │       └── UnifiedTypography.tsx
│   │
│   ├── con/                     # Constants & konfigurasi
│   │   └── colors.ts            # Palet warna
│   │
│   ├── lib/                     # Utility functions
│   │   ├── router/              # Router utilities
│   │   ├── api-auth.ts          # Autentikasi API
│   │   ├── api-fetch.ts         # Helper fetch API
│   │   ├── EnvStringParse.ts    # Parser environment variables
│   │   ├── prisma.ts            # Prisma client instance
│   │   ├── seafile-auth-service.ts # Integrasi Seafile
│   │   └── session.ts           # iron-session helper
│   │
│   ├── middlewares/             # Next.js middleware
│   ├── state/                   # Global state (Jotai/Valtio)
│   │   ├── darkModeStore.ts     # State dark mode
│   │   ├── state-layanan.ts     # State layanan
│   │   ├── state-list-image.ts  # State daftar gambar
│   │   └── state-nav.ts         # State navigasi
│   │
│   ├── store/                   # State management tambahan
│   └── types/                   # TypeScript type definitions
│
├── public/                      # Static assets
│   └── assets/                  # Gambar, icon, dll
│
├── uploads/                     # Directory upload (runtime)
│   └── image/                   # Upload gambar
│
├── .env.example                 # Contoh environment variables
├── .gitignore
├── AGENTS.md                    # Panduan untuk AI coding agents
├── Dockerfile                   # Docker image definition
├── docker-entrypoint.sh         # Entry point container
├── next.config.ts               # Next.js configuration
├── package.json                 # Dependencies & scripts
├── tsconfig.json                # TypeScript configuration
├── biome.json                   # Biome linter config
├── eslint.config.mjs            # ESLint config
├── NOTE.md                      # Catatan deployment
└── QWEN.md                      # Konteks & memori proyek

3. Arsitektur Aplikasi

3.1 Arsitektur Keseluruhan

┌─────────────────────────────────────────────────────────┐
│                    Client (Browser)                      │
└────────────┬────────────────────────────┬────────────────┘
             │                            │
             │  Next.js Pages             │  API Calls
             │  (SSR/CSR)                 │
             ▼                            ▼
┌────────────────────────┐    ┌────────────────────────────┐
│   Next.js 15 App Router│    │   Elysia.js API Server     │
│   - Pages publik       │    │   - RESTful endpoints      │
│   - Admin dashboard    │    │   - File upload            │
│   - Server components  │    │   - Swagger docs (/api/docs│
│   - Client components  │    │   - Static file serving    │
└────────────┬───────────┘    └────────────┬───────────────┘
             │                             │
             │                             │
             ▼                             ▼
┌─────────────────────────────────────────────────────────┐
│                    PostgreSQL Database                   │
│                    (via Prisma ORM)                      │
└─────────────────────────────────────────────────────────┘
             │
             ▼
┌─────────────────────────────────────────────────────────┐
│                    Seafile File Storage                  │
│                    (Images & Documents)                  │
└─────────────────────────────────────────────────────────┘

3.2 Next.js App Router

  • Menggunakan App Router (bukan Pages Router)
  • Route groups (dashboard), (pages), (tambahan) untuk organisasi tanpa mempengaruhi URL
  • Layout bersarang: root layout -> admin/darmasaba layout -> page layouts
  • force-dynamic digunakan untuk menghindari error prerendering
  • View Transitions API diaktifkan via next-view-transitions

3.3 Elysia.js API Server

  • Terintegrasi sebagai catch-all route di /api/[[...slugs]]/route.ts
  • Semua HTTP methods (GET, POST, PATCH, DELETE, PUT) di-handle oleh Elysia
  • Plugin yang digunakan:
    • @elysiajs/cors - CORS configuration
    • @elysiajs/static - Static file serving dari /uploads
    • @elysiajs/swagger - API documentation di /api/docs
    • @elysiajs/jwt - JWT authentication
    • @elysiajs/cookie - Cookie handling
  • Endpoint file upload: /api/upl-img, /api/upl-img-single, /api/upl-csv
  • Image serving: /api/img/:name dengan resize support

3.4 Rendering Strategy

  • Server Components: Halaman publik untuk SEO optimal
  • Client Components: Komponen interaktif (form, state, animasi)
  • Force Dynamic: Beberapa halaman menggunakan force-dynamic
  • ISR: Caching header untuk assets (1 jam cache)

4. Modul Domain

4.1 Profil Desa (Desa)

Admin: /admin/desa/* | Publik: /darmasaba/desa/*

Sub-modul Fungsi
berita CRUD berita/pengumuman desa
gallery Galeri foto dan video
layanan Manajemen layanan desa
penghargaan Penghargaan yang diraih
pengumuman Pengumuman publik
potensi Potensi desa (pertanian, pariwisata, dll)
profil Profil desa (sejarah, visi misi, lambang, maskot, perangkat)

4.2 PPID (Pejabat Pengelola Informasi dan Dokumentasi)

Admin: /admin/ppid/* | Publik: /darmasaba/ppid/*

Sub-modul Fungsi
profil-ppid Profil pejabat PPID
struktur-ppid Struktur organisasi PPID
visi-misi-ppid Visi dan misi PPID
daftar-informasi-publik Daftar informasi yang tersedia
dasar-hukum Dasar hukum PPID
permohonan-informasi-publik Form permohonan informasi
permohonan-keberatan-informasi-publik Form keberatan
indeks-kepuasan-masyarakat Survei kepuasan masyarakat (IKM)

4.3 Kesehatan

Admin: /admin/kesehatan/* | Publik: /darmasaba/kesehatan/*

Sub-modul Fungsi
fasilitas-kesehatan Data puskesmas, klinik, dokter
posyandu Manajemen posyandu
program-kesehatan Program kesehatan desa
info-wabah-penyakit Informasi wabah
penanganan-darurat Prosedur penanganan darurat
kontak-darurat Kontak darurat kesehatan
data-kesehatan-warga Statistik kesehatan warga
artikel-kesehatan Artikel kesehatan

4.4 Ekonomi

Admin: /admin/ekonomi/* | Publik: /darmasaba/ekonomi/*

Sub-modul Fungsi
APBDes Anggaran Pendapatan dan Belanja Desa (hierarki items + realisasi)
PADesa-pendapatan-asli-desa Pendapatan asli desa
demografi-pekerjaan Demografi pekerjaan penduduk
jumlah-penduduk-miskin Data penduduk miskin
jumlah-pengangguran Data pengangguran
lowongan-kerja-lokal Lowongan kerja lokal
pasar-desa Data pasar desa
program-kemiskinan Program penanganan kemiskinan
sektor-unggulan-desa Sektor unggulan ekonomi
Struktur-Organisasi-Dan-Sk-Pengurus-BumDes Struktur BUMDes

4.5 Kependudukan

Admin: /admin/kependudukan/* | Publik: /darmasaba/kependudukan/*

Sub-modul Fungsi
data-banjar Data banjar (unit wilayah tradisional Bali)
distribusi-agama Distribusi agama penduduk
distribusi-umur Distribusi umur penduduk
migrasi-penduduk Data migrasi (masuk/keluar)

4.6 Pendidikan

Admin: /admin/pendidikan/* | Publik: /darmasaba/pendidikan/*

Sub-modul Fungsi
beasiswa-desa Program beasiswa
bimbingan-belajar-desa Bimbingan belajar
data-pendidikan Data statistik pendidikan
info-sekolah Informasi sekolah
pendidikan-non-formal Pendidikan non-formal
perpustakaan-digital Perpustakaan digital
program-pendidikan-anak Program pendidikan anak

4.7 Keamanan

Admin: /admin/keamanan/* | Publik: /darmasaba/keamanan/*

Sub-modul Fungsi
keamanan-lingkungan-pecalang-patwal Keamanan lingkungan (pecalang Bali)
kontak-darurat Kontak darurat keamanan
laporan-publik Laporan publik
pencegahan-kriminalitas Pencegahan kriminalitas
polsek-terdekat Data polsek terdekat
tips-keamanan Tips keamanan

4.8 Lingkungan

Admin: /admin/lingkungan/* | Publik: /darmasaba/lingkungan/*

Sub-modul Fungsi
data-lingkungan-desa Data lingkungan desa
edukasi-lingkungan Edukasi lingkungan
gotong-royong Kegiatan gotong royong
konservasi-adat-bali Konservasi adat Bali
pengelolaan-sampah-bank-sampah Bank sampah
program-penghijauan Program penghijauan

4.9 Inovasi

Admin: /admin/inovasi/* | Publik: /darmasaba/inovasi/*

Sub-modul Fungsi
ajukan-ide-inovatif Form pengajuan ide inovatif
desa-digital-smart-village Program desa digital
info-teknologi-tepat-guna Info teknologi tepat guna
kolaborasi-inovasi Kolaborasi inovasi
layanan-online-desa Layanan online desa
program-kreatif-desa Program kreatif desa

4.10 Musik Desa

Admin: /admin/musik/* | Publik: /darmasaba/musik/*

  • Manajemen audio dan cover musik desa
  • Fixed player bar di halaman publik
  • Context provider untuk state pemutar musik

4.11 Landing Page

Admin: /admin/landing-page/*

Sub-modul Fungsi
desa-anti-korupsi Konten anti-korupsi
prestasi-desa Prestasi yang diraih
sdgs-desa SDGs (Sustainable Development Goals)
profil-landing-page Profil dan media sosial

4.12 User & Role

Admin: /admin/user&role/*

  • Manajemen pengguna admin
  • Manajemen role dan permission
  • Manajemen menu akses

5. Database Schema

5.1 Overview

Database menggunakan PostgreSQL dengan Prisma ORM (versi 6.3.1). Schema terdiri dari 2413 baris dengan 100+ model.

5.2 Model Utama

FileStorage

Model sentral untuk semua file (gambar, dokumen, audio):

model FileStorage {
  id           String   @id @default(cuid())
  name         String   @unique
  realName     String
  path         String
  mimeType     String
  category     String   // "image" / "document" / "audio" / "other"
  link         String
  isActive     Boolean  @default(true)
  // Relasi ke 50+ model lain (Berita, PotensiDesa, GalleryFoto, dll)
}

AppMenu & AppMenuChild

Menu navigasi aplikasi:

model AppMenu {
  id           String         @id @default(cuid())
  name         String         @unique
  link         String
  isActive     Boolean        @default(true)
  AppMenuChild AppMenuChild[]
}

User & Role (Autentikasi Admin)

  • User - Data pengguna admin
  • Role - Role/peran pengguna
  • Menu - Menu akses per role

Modul Desa

  • Berita - Berita desa (dengan featured image & gallery)
  • GalleryFoto / GalleryVideo - Galeri media
  • Layanan - Layanan desa
  • Pengumuman - Pengumuman
  • PotensiDesa - Potensi desa
  • ProfileDesaImage - Gambar profil desa
  • ProfilPerbekel - Profil perbekel (kepala desa)
  • PejabatDesa - Pejabat desa
  • Penghargaan - Penghargaan
  • PrestasiDesa - Prestasi
  • MediaSosial - Media sosial desa

Modul PPID

  • StrukturPPID - Struktur organisasi
  • PosisiOrganisasiPPID - Posisi dengan hierarki
  • PegawaiPPID - Data pegawai
  • ProfilePPID - Profil PPID
  • VisiMisiPPID - Visi misi
  • DasarHukumPPID - Dasar hukum
  • DaftarInformasiPublik - Daftar informasi
  • PermohonanInformasiPublik - Permohonan informasi
  • FormulirPermohonanKeberatan - Formulir keberatan
  • IndeksKepuasanMasyarakat - IKM
  • Responden + lookup tables - Data responden IKM

Modul Kesehatan

  • Puskesmas - Data puskesmas
  • Posyandu - Data posyandu
  • ProgramKesehatan - Program kesehatan
  • FasilitasKesehatan - Fasilitas
  • InfoWabahPenyakit - Info wabah
  • PenangananDarurat - Penanganan darurat
  • KontakDarurat - Kontak darurat
  • ArtikelKesehatan - Artikel

Modul Ekonomi

  • APBDes & APBDesItem - Anggaran desa (hierarki tree structure)
  • RealisasiItem - Realisasi anggaran (multiple per item)
  • PasarDesa - Pasar desa
  • PegawaiBumDes - Pegawai BUMDes
  • StrukturBumDes - Struktur BUMDes
  • DemografiPekerjaan - Demografi pekerjaan
  • JumlahPendudukMiskin - Data kemiskinan
  • JumlahPengangguran - Data pengangguran
  • LowonganKerjaLokal - Lowongan kerja
  • ProgramKemiskinan - Program kemiskinan
  • SektorUnggulanDesa - Sektor unggulan
  • PendapatanAsli - Pendapatan asli desa

Modul Kependudukan

  • DataBanjar - Data banjar
  • DistribusiAgama - Distribusi agama
  • DistribusiUmur - Distribusi umur
  • MigrasiPenduduk - Migrasi

Modul Pendidikan

  • InfoSekolah - Data sekolah
  • BeasiswaDesa - Beasiswa
  • BimbinganBelajar - Bimbingan belajar
  • PendidikanNonFormal - Pendidikan non-formal
  • DataPerpustakaan - Perpustakaan

Modul Keamanan

  • KeamananLingkungan - Keamanan lingkungan
  • MenuTipsKeamanan - Tips keamanan
  • PencegahanKriminalitas - Pencegahan kriminalitas
  • PolsekTerdekat - Polsek terdekat
  • LaporanPublik - Laporan publik

Modul Lingkungan

  • DataLingkunganDesa - Data lingkungan
  • KonservasiAdatBali - Konservasi adat
  • BankSampah - Bank sampah
  • ProgramPenghijauan - Penghijauan
  • GotongRoyong - Gotong royong
  • EdukasiLingkungan - Edukasi

Modul Inovasi

  • ProgramInovasi - Program inovasi
  • DesaDigital - Desa digital
  • InfoTekno - Info teknologi
  • KolaborasiInovasi + MitraKolaborasi - Kolaborasi
  • LayananOnlineDesa - Layanan online
  • ProgramKreatifDesa - Program kreatif
  • Ajukan - Pengajuan ide

Modul Musik

  • MusikDesa - Musik desa
    • audioFile -> FileStorage
    • coverImage -> FileStorage

Landing Page

  • DesaAntiKorupsi + KategoriDesaAntiKorupsi
  • SdgsDesa - SDGs
  • PrestasiDesa + KategoriPrestasiDesa
  • MediaSosial
  • LandingPage_Layanan

APBDes (Struktur Hierarki)

model APBDesItem {
  kode           String       // "4", "4.1", "4.1.2"
  uraian         String       // Nama item
  anggaran       Float        // Anggaran dalam Rupiah
  tipe           String?      // "pendapatan" | "belanja" | "pembiayaan"
  level          Int          // 1, 2, 3
  parentId       String?      // Self-referencing untuk tree
  children       APBDesItem[]
  totalRealisasi Float        @default(0)  // Auto-calculated
  selisih        Float        @default(0)  // totalRealisasi - anggaran
  persentase     Float        @default(0)  // (totalRealisasi / anggaran) * 100
  realisasiItems RealisasiItem[]
}

5.3 Pola Umum Model

Hampir semua model mengikuti pola:

model Contoh {
  id        String   @id @default(cuid())
  // ... fields
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  deletedAt DateTime? @default(now())  // Soft delete
  isActive  Boolean  @default(true)    // Soft delete flag
}

6. API Routes

6.1 Struktur API

Semua API routes ditangani oleh Elysia.js di /src/app/api/[[...slugs]]/route.ts

6.2 API Groups

Prefix Modul Contoh Endpoints
/api/layanan Layanan GET /api/layanan
/api/potensi Potensi GET /api/potensi
/api/desa/* Desa CRUD berita, gallery, profil, dll
/api/ppid/* PPID CRUD struktur, profil, permohonan
/api/kesehatan/* Kesehatan CRUD puskesmas, posyandu, dll
/api/ekonomi/* Ekonomi CRUD APBDes, BUMDes, demografi
/api/kependudukan/* Kependudukan CRUD banjar, demografi
/api/pendidikan/* Pendidikan CRUD sekolah, beasiswa
/api/keamanan/* Keamanan CRUD keamanan, kontak darurat
/api/lingkungan/* Lingkungan CRUD data lingkungan
/api/inovasi/* Inovasi CRUD program inovasi
/api/landing-page/* Landing Page CRUD konten landing page
/api/user/* User CRUD user admin
/api/user/role/* Role CRUD role & permission
/api/search Search Pencarian global
/api/file-storage/* File Storage CRUD file storage
/api/img/:name Image GET gambar dengan resize
/api/upl-img Upload Upload multiple images
/api/upl-img-single Upload Upload single image
/api/upl-csv Upload Upload CSV files
/api/utils/version Utils GET versi aplikasi

6.3 API Documentation

Swagger UI tersedia di: /api/docs

6.4 API Route Lainnya

Route Fungsi
/api/health Health check endpoint
/api/news API berita (standalone)
/api/subscribe Subscription email
/api/tts Text-to-Speech (ElevenLabs)
/api/admin/* API khusus admin
/api/auth/* API autentikasi

7. Halaman Admin

7.1 Struktur

Admin dashboard berada di /admin dengan route group (dashboard).

Section Path Fungsi
Dashboard /admin Dashboard utama
Autentikasi /admin/auth Login admin
Desa /admin/desa/* Berita, gallery, profil, layanan, penghargaan, pengumuman, potensi
PPID /admin/ppid/* Profil, struktur, visi-misi, daftar informasi, dasar hukum, permohonan, IKM
Kesehatan /admin/kesehatan/* Puskesmas, posyandu, program kesehatan, wabah, kontak darurat
Ekonomi /admin/ekonomi/* APBDes, PAD, demografi, pengangguran, kemiskinan, BUMDes, pasar desa
Kependudukan /admin/kependudukan/* Banjar, distribusi agama, distribusi umur, migrasi
Pendidikan /admin/pendidikan/* Sekolah, beasiswa, bimbingan belajar, perpustakaan digital
Keamanan /admin/keamanan/* Keamanan lingkungan, kontak darurat, pencegahan kriminalitas, polsek
Lingkungan /admin/lingkungan/* Data lingkungan, konservasi, bank sampah, penghijauan, gotong royong
Inovasi /admin/inovasi/* Ide inovatif, desa digital, teknologi tepat guna, kolaborasi
Musik /admin/musik/* Manajemen musik desa
Landing Page /admin/landing-page/* Anti-korupsi, prestasi, SDGs, media sosial
User & Role /admin/user&role/* Manajemen user dan role
Images /admin/images/* Manajemen gambar
CSV /admin/csv/* Upload/import CSV

7.2 Komponen Admin Shared

  • AdminThemeProvider.tsx - Theme provider untuk dark/light mode
  • DarkModeToggle.tsx - Toggle dark mode
  • UnifiedSurface.tsx - Komponen surface/card unified
  • UnifiedTypography.tsx - Tipografi unified

8. Halaman Publik

8.1 Struktur

Halaman publik berada di /darmasaba dengan layout yang mencakup Navbar, Footer, dan Fixed Music Player.

Halaman Path Konten
**Landing Page