Files
sistem-desa-mandiri/.claude/ARCHITECTURE.md
amaliadwiy a53568da8f docs: split CLAUDE.md into focused reference files
Move architecture, env vars, and deployment details into .claude/ subdocs
referenced via @-imports, keeping CLAUDE.md to commands and pointers only.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 15:49:57 +08:00

2.0 KiB

Architecture

Sistem Desa Mandiri is a village administration platform built on Next.js 14 (App Router) with PostgreSQL.

Key Layers

  • src/app/(application)/ — Auth-protected pages grouped by feature (announcement, division, project, discussion, member, profile, home, group)
  • src/app/(auth)/ — Login/register pages
  • src/app/api/ — REST API endpoints; subdirectories map to resource types (/api/announcement, /api/project, /api/task, etc.). Mobile-specific endpoints live under /api/mobile/
  • src/module/ — Business logic modules, one per feature (19 modules). Each module contains hooks, components, and API call functions for that domain
  • src/lib/ — Shared utilities: Prisma client singleton (prisma.ts), Firebase init, route definitions (routes.ts), push notification hooks

Data Access

All DB access goes through the Prisma client singleton in src/lib/prisma.ts. Schema at prisma/schema.prisma (40+ models). Migrations in prisma/migrations/.

State Management

  • Hookstate (@hookstate/core + @hookstate/localstored) — client-side global state with localStorage persistence
  • Iron-session — server-side session management / auth
  • Jose — JWT handling

UI Stack

  • Mantine 7 — primary UI library (components, forms, modals, notifications, charts, dates)
  • Tailwind CSS — utility classes, used alongside Mantine
  • PostCSS — configured with Mantine preset (postcss.config.mjs)

Real-time & Notifications

  • Firebase FCM (src/lib/firebase/) — mobile push notifications
  • Web Push + VAPID keys (src/lib/usePushNotifications.ts) — browser push
  • wibu-realtime (custom library) — WebSocket-based real-time updates

User Roles

Five roles with distinct access levels (see PANDUAN PENGGUNAAN.md):

  1. Super Admin — full system access
  2. Admin Desa — village-level administration
  3. Ketua Divisi — division leader
  4. Anggota Divisi — division member
  5. Warga/Perangkat Desa — village resident/official