← Back to Portfolio

Bejagung — Community Management Platform

Visit Project →

Everything used to be recorded in handwritten notebooks. bejagung.web.id was born from a real need: designing and building a unified web platform now used to manage RT residents, prayer group finances, haul genealogy data, and local UMKM business profiles — all in one system with a multi-tenant architecture.

Architecture

Built on the Inertia.js SPA pattern — Laravel 12 on the backend paired with React 19 + TypeScript on the frontend, with no separate REST API. On top of this sits a multi-tenant system supporting three data isolation strategies (shared table, separate database, schema) within a single codebase, without changing business logic across models.

The hardest technical challenge: designing a financial system where data cannot be deleted. Every correction generates a void + reversal entry — preserving full data integrity and audit trail, following professional accounting standards.

Highlights

  • 🏗️ Multi-tenant — one codebase, three data isolation strategies (shared table / separate database / schema)
  • 📒 Immutable financial ledger — corrections via void-reversal, never delete, full audit trail
  • Real-time — WebSocket powered by Laravel Reverb, no paid third-party services
  • 🔐 Granular RBAC — per-feature permissions using Spatie Laravel Permission
  • 📱 PWA — browser push notifications, offline mode, installable

Modules

ModuleFunction
RTResident records, announcements, dues, community programs
NariyahPrayer attendance, dues, auditable cash ledger, arisan
HaulFamily genealogy tree, haul donations, data moderation
UMKMLocal business landing pages per tenant

Tech Stack

LayerTechnology
BackendLaravel 12, PHP 8.2, Inertia.js
FrontendReact 19, TypeScript, Tailwind CSS v4
UI ComponentsRadix UI, Lucide Icons
Real-timeLaravel Reverb (WebSocket)
Auth & AccessSpatie Laravel Permission (RBAC)
Multi-tenancyCustom (shared table / DB / schema)
Build ToolVite
Progressive Web AppPWA, push notifications, offline mode