Files
desa-darmasaba/.claude/ARCHITECTURE.md
nico e0a5177257 feat(kegiatan-desa): add full CRUD frontend + public detail page - bump to 0.1.47
- API: add GET /:id endpoint (findUnique) for KegiatanDesa
- Admin CMS: add pages for list-kegiatan-desa and kategori-kegiatan-desa (list, create, detail, edit)
- Public: add detail page at /desa/kegiatan-desa/[kategori]/[id]
- Refactor: move KegiatanCard to _com to fix Next.js page export constraint
- Nav: register kegiatan-desa in navbar and admin page list

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 14:27:28 +08:00

1.9 KiB

Architecture

Tech Stack

  • Framework: Next.js 15 (App Router) + React 19
  • Runtime/Package manager: Bun (not npm)
  • API server: Elysia.js (mounted at /api/[[...slugs]])
  • ORM: Prisma + PostgreSQL
  • UI: Mantine UI v7-8
  • State: Jotai (atoms), Valtio (proxies), SWR (data fetching)
  • Auth: iron-session + JWT
  • File storage: Local uploads + MinIO (object storage) + Seafile (self-hosted fallback)

Request Flow

Browser → Next.js middleware (src/middleware.ts)
       → Public pages: src/app/darmasaba/
       → Admin pages:  src/app/admin/
       → API:          src/app/api/[[...slugs]]/route.ts (Elysia.js)
                       └── _lib/*.ts  (domain modules)

The Elysia server is a single entry point with domain-specific modules: desa/, kesehatan/, ekonomi/, keamanan/, lingkungan/, pendidikan/, kependudukan/, ppid/, inovasi/, landing_page/, search/, auth/, user/, fileStorage/. Swagger docs are auto-generated at /api/docs.

Domain Modules

Each domain (desa, kesehatan, ekonomi, etc.) has:

  • API handler in src/app/api/[[...slugs]]/_lib/<domain>/
  • Admin CMS pages in src/app/admin/(dashboard)/<domain>/
  • Public pages in src/app/darmasaba/(pages)/<domain>/

Active domains: desa, ekonomi, inovasi, keamanan, kependudukan, kesehatan, lingkungan, musik, pendidikan, ppid — plus landing_page and search (API-only, no public/admin pages).

Key Files

File Purpose
src/middleware.ts Route guards and auth
src/lib/prisma.ts Prisma client singleton
src/lib/api-auth.ts JWT/session validation
src/lib/api-fetch.ts Typed fetch wrapper used by frontend
src/lib/session.ts iron-session config
next.config.ts Next.js config (cache headers, allowed origins)
postcss.config.cjs Mantine CSS preset and breakpoints
docker-entrypoint.sh Runs prisma migrate deploy then starts app