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-dynamicdigunakan 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/:namedengan 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 adminRole- Role/peran penggunaMenu- Menu akses per role
Modul Desa
Berita- Berita desa (dengan featured image & gallery)GalleryFoto/GalleryVideo- Galeri mediaLayanan- Layanan desaPengumuman- PengumumanPotensiDesa- Potensi desaProfileDesaImage- Gambar profil desaProfilPerbekel- Profil perbekel (kepala desa)PejabatDesa- Pejabat desaPenghargaan- PenghargaanPrestasiDesa- PrestasiMediaSosial- Media sosial desa
Modul PPID
StrukturPPID- Struktur organisasiPosisiOrganisasiPPID- Posisi dengan hierarkiPegawaiPPID- Data pegawaiProfilePPID- Profil PPIDVisiMisiPPID- Visi misiDasarHukumPPID- Dasar hukumDaftarInformasiPublik- Daftar informasiPermohonanInformasiPublik- Permohonan informasiFormulirPermohonanKeberatan- Formulir keberatanIndeksKepuasanMasyarakat- IKMResponden+ lookup tables - Data responden IKM
Modul Kesehatan
Puskesmas- Data puskesmasPosyandu- Data posyanduProgramKesehatan- Program kesehatanFasilitasKesehatan- FasilitasInfoWabahPenyakit- Info wabahPenangananDarurat- Penanganan daruratKontakDarurat- Kontak daruratArtikelKesehatan- Artikel
Modul Ekonomi
APBDes&APBDesItem- Anggaran desa (hierarki tree structure)RealisasiItem- Realisasi anggaran (multiple per item)PasarDesa- Pasar desaPegawaiBumDes- Pegawai BUMDesStrukturBumDes- Struktur BUMDesDemografiPekerjaan- Demografi pekerjaanJumlahPendudukMiskin- Data kemiskinanJumlahPengangguran- Data pengangguranLowonganKerjaLokal- Lowongan kerjaProgramKemiskinan- Program kemiskinanSektorUnggulanDesa- Sektor unggulanPendapatanAsli- Pendapatan asli desa
Modul Kependudukan
DataBanjar- Data banjarDistribusiAgama- Distribusi agamaDistribusiUmur- Distribusi umurMigrasiPenduduk- Migrasi
Modul Pendidikan
InfoSekolah- Data sekolahBeasiswaDesa- BeasiswaBimbinganBelajar- Bimbingan belajarPendidikanNonFormal- Pendidikan non-formalDataPerpustakaan- Perpustakaan
Modul Keamanan
KeamananLingkungan- Keamanan lingkunganMenuTipsKeamanan- Tips keamananPencegahanKriminalitas- Pencegahan kriminalitasPolsekTerdekat- Polsek terdekatLaporanPublik- Laporan publik
Modul Lingkungan
DataLingkunganDesa- Data lingkunganKonservasiAdatBali- Konservasi adatBankSampah- Bank sampahProgramPenghijauan- PenghijauanGotongRoyong- Gotong royongEdukasiLingkungan- Edukasi
Modul Inovasi
ProgramInovasi- Program inovasiDesaDigital- Desa digitalInfoTekno- Info teknologiKolaborasiInovasi+MitraKolaborasi- KolaborasiLayananOnlineDesa- Layanan onlineProgramKreatifDesa- Program kreatifAjukan- Pengajuan ide
Modul Musik
MusikDesa- Musik desaaudioFile-> FileStoragecoverImage-> FileStorage
Landing Page
DesaAntiKorupsi+KategoriDesaAntiKorupsiSdgsDesa- SDGsPrestasiDesa+KategoriPrestasiDesaMediaSosialLandingPage_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 modeDarkModeToggle.tsx- Toggle dark modeUnifiedSurface.tsx- Komponen surface/card unifiedUnifiedTypography.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 |