# moonx388/gereja architecture

> Architecture diagram of the GitHub repository moonx388/gereja, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/moonx388/gereja
- Repository: https://github.com/moonx388/gereja

## Overview

Gereja Digital combines a church-management dashboard and member portal with a NestJS API, tenant-aware identity, and an AI chatbot integration. The principal workflow is a user authenticating into a church tenant, then using the portal or admin dashboard to manage church records through the API. The graph preserves the documented bot, reporting, attendance, and notification capabilities; some are represented by their enclosing source directories because their implementation was not sampled. Data-store wiring is not inferred from adapter names alone.

Main entry points: [`server_side/src`](https://github.com/moonx388/gereja/tree/main/server_side/src) (Church data API), [`server_side/src/auth/auth.service.ts`](https://github.com/moonx388/gereja/blob/main/server_side/src/auth/auth.service.ts) (Auth service), [`client_side/lib/api.ts`](https://github.com/moonx388/gereja/blob/main/client_side/lib/api.ts) (API client), [`client_side/app/admin/pages`](https://github.com/moonx388/gereja/tree/main/client_side/app/admin/pages) (Admin dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web applications"]
  node_portal["Member portal"]
  node_adminui["Admin dashboard"]
  node_clientapi["API client<br/>[api.ts]"]
  node_authui["Login and SSO<br/>[page.tsx]"]
end

subgraph group_identity["Identity and tenants"]
  node_authapi["Auth API"]
  node_authservice["Auth service<br/>[auth.service.ts]"]
  node_users["User management"]
  node_tenants["Tenant management"]
  node_sso["SSO verification"]
end

subgraph group_church["Church operations"]
  node_churchapi["Church data API"]
  node_jemaat["Member records"]
  node_keluarga["Family records"]
  node_pelayan["Staff and servants"]
  node_keuangan["Finance"]
  node_inventaris["Inventory"]
  node_jadwal["Schedules"]
  node_notif["Notifications"]
  node_reports["Attendance and reports"]
end

subgraph group_bot["Chatbot"]
  node_botapi["Bot endpoints"]
  node_botservice["Bot service<br/>[bot.service.ts]"]
  node_ai["AI service<br/>[ai.service.ts]"]
  node_dialogflow["Dialogflow webhook"]
end

subgraph group_internal["Persistence layer"]
  node_generic["Generic CRUD"]
  node_adapters["Storage adapters"]
  node_store[("Database")]
end

node_member(("Church member"))
node_admin(("Church admin"))
node_whatsapp(("WhatsApp user"))
node_dialogflowservice(("Dialogflow"))

node_member -->|"uses"| node_portal
node_admin -->|"manages"| node_adminui
node_portal -->|"opens login"| node_authui
node_adminui -->|"opens login"| node_authui
node_authui -->|"submits credentials"| node_clientapi
node_clientapi -->|"calls"| node_authapi
node_authapi -->|"delegates"| node_authservice
node_authservice -->|"looks up users"| node_users
node_authservice -->|"resolves church"| node_tenants
node_authservice -->|"creates or updates"| node_users
node_sso -->|"issues local login"| node_authservice
node_adminui -->|"requests records"| node_clientapi
node_portal -->|"requests services"| node_clientapi
node_clientapi -->|"calls"| node_churchapi
node_churchapi -->|"dispatches"| node_jemaat
node_churchapi -->|"dispatches"| node_keluarga
node_churchapi -->|"dispatches"| node_pelayan
node_churchapi -->|"dispatches"| node_keuangan
node_churchapi -->|"dispatches"| node_inventaris
node_churchapi -->|"dispatches"| node_jadwal
node_churchapi -->|"dispatches"| node_notif
node_adminui -->|"views"| node_reports
node_botapi -->|"delegates"| node_botservice
node_botservice -->|"generates replies"| node_ai
node_whatsapp -.->|"sends messages"| node_botservice
node_botservice -.->|"replies via"| node_whatsapp
node_dialogflowservice -.->|"posts webhook"| node_dialogflow
node_dialogflow -->|"resolves tenant"| node_tenants
node_churchapi -->|"extends CRUD"| node_generic

click node_portal "https://github.com/moonx388/gereja/tree/main/client_side/app"
click node_adminui "https://github.com/moonx388/gereja/tree/main/client_side/app/admin/pages"
click node_clientapi "https://github.com/moonx388/gereja/blob/main/client_side/lib/api.ts"
click node_authui "https://github.com/moonx388/gereja/blob/main/client_side/app/login/page.tsx"
click node_authapi "https://github.com/moonx388/gereja/tree/main/server_side/src/auth"
click node_authservice "https://github.com/moonx388/gereja/blob/main/server_side/src/auth/auth.service.ts"
click node_users "https://github.com/moonx388/gereja/tree/main/server_side/src/users"
click node_tenants "https://github.com/moonx388/gereja/tree/main/server_side/src/tenants"
click node_sso "https://github.com/moonx388/gereja/tree/main/server_side/src/sso"
click node_churchapi "https://github.com/moonx388/gereja/tree/main/server_side/src"
click node_jemaat "https://github.com/moonx388/gereja/tree/main/server_side/src/jemaat"
click node_keluarga "https://github.com/moonx388/gereja/tree/main/server_side/src/keluarga"
click node_pelayan "https://github.com/moonx388/gereja/tree/main/server_side/src/pelayan"
click node_keuangan "https://github.com/moonx388/gereja/tree/main/server_side/src/keuangan"
click node_inventaris "https://github.com/moonx388/gereja/tree/main/server_side/src/inventaris"
click node_jadwal "https://github.com/moonx388/gereja/tree/main/server_side/src/jadwal"
click node_notif "https://github.com/moonx388/gereja/tree/main/server_side/src/notif"
click node_reports "https://github.com/moonx388/gereja/tree/main/client_side/app/admin/pages"
click node_botapi "https://github.com/moonx388/gereja/tree/main/server_side/src/bot"
click node_botservice "https://github.com/moonx388/gereja/blob/main/server_side/src/bot/bot.service.ts"
click node_ai "https://github.com/moonx388/gereja/blob/main/server_side/src/bot/ai/ai.service.ts"
click node_dialogflow "https://github.com/moonx388/gereja/blob/main/server_side/src/bot/dialogflow.controller.ts"
click node_generic "https://github.com/moonx388/gereja/blob/main/server_side/src/common/base/generic-controller.ts"
click node_adapters "https://github.com/moonx388/gereja/tree/main/server_side/src/adapters"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_portal,node_adminui,node_clientapi,node_authui,node_whatsapp toneBlue
class node_authapi,node_authservice,node_users,node_tenants,node_sso toneAmber
class node_churchapi,node_jemaat,node_keluarga,node_pelayan,node_keuangan,node_inventaris,node_jadwal,node_notif,node_reports toneMint
class node_botapi,node_botservice,node_ai,node_dialogflow toneRose
class node_generic,node_adapters,node_store,node_member,node_admin,node_dialogflowservice toneIndigo
```

## Components

### Web applications

- [Member portal](https://github.com/moonx388/gereja/tree/main/client_side/app): `client_side/app`
- [Admin dashboard](https://github.com/moonx388/gereja/tree/main/client_side/app/admin/pages): `client_side/app/admin/pages`
- [API client](https://github.com/moonx388/gereja/blob/main/client_side/lib/api.ts): `client_side/lib/api.ts`
- [Login and SSO](https://github.com/moonx388/gereja/blob/main/client_side/app/login/page.tsx): `client_side/app/login/page.tsx`

### Identity and tenants

- [Auth API](https://github.com/moonx388/gereja/tree/main/server_side/src/auth): `server_side/src/auth`
- [Auth service](https://github.com/moonx388/gereja/blob/main/server_side/src/auth/auth.service.ts): `server_side/src/auth/auth.service.ts`
- [User management](https://github.com/moonx388/gereja/tree/main/server_side/src/users): `server_side/src/users`
- [Tenant management](https://github.com/moonx388/gereja/tree/main/server_side/src/tenants): `server_side/src/tenants`
- [SSO verification](https://github.com/moonx388/gereja/tree/main/server_side/src/sso): `server_side/src/sso`

### Church operations

- [Church data API](https://github.com/moonx388/gereja/tree/main/server_side/src): `server_side/src`
- [Member records](https://github.com/moonx388/gereja/tree/main/server_side/src/jemaat): `server_side/src/jemaat`
- [Family records](https://github.com/moonx388/gereja/tree/main/server_side/src/keluarga): `server_side/src/keluarga`
- [Staff and servants](https://github.com/moonx388/gereja/tree/main/server_side/src/pelayan): `server_side/src/pelayan`
- [Finance](https://github.com/moonx388/gereja/tree/main/server_side/src/keuangan): `server_side/src/keuangan`
- [Inventory](https://github.com/moonx388/gereja/tree/main/server_side/src/inventaris): `server_side/src/inventaris`
- [Schedules](https://github.com/moonx388/gereja/tree/main/server_side/src/jadwal): `server_side/src/jadwal`
- [Notifications](https://github.com/moonx388/gereja/tree/main/server_side/src/notif): `server_side/src/notif`
- [Attendance and reports](https://github.com/moonx388/gereja/tree/main/client_side/app/admin/pages): `client_side/app/admin/pages`

### Chatbot

- [Bot endpoints](https://github.com/moonx388/gereja/tree/main/server_side/src/bot): `server_side/src/bot`
- [Bot service](https://github.com/moonx388/gereja/blob/main/server_side/src/bot/bot.service.ts): `server_side/src/bot/bot.service.ts`
- [AI service](https://github.com/moonx388/gereja/blob/main/server_side/src/bot/ai/ai.service.ts): `server_side/src/bot/ai/ai.service.ts`
- [Dialogflow webhook](https://github.com/moonx388/gereja/blob/main/server_side/src/bot/dialogflow.controller.ts): `server_side/src/bot/dialogflow.controller.ts`

### Persistence layer

- [Generic CRUD](https://github.com/moonx388/gereja/blob/main/server_side/src/common/base/generic-controller.ts): `server_side/src/common/base/generic-controller.ts`
- [Storage adapters](https://github.com/moonx388/gereja/tree/main/server_side/src/adapters): `server_side/src/adapters`
- **Database**

### Other components

- **Church member**
- **Church admin**
- **WhatsApp user**
- **Dialogflow**

## Connections

- Church member → Member portal: uses
- Church admin → Admin dashboard: manages
- Member portal → Login and SSO: opens login
- Admin dashboard → Login and SSO: opens login
- Login and SSO → API client: submits credentials
- API client → Auth API: calls
- Auth API → Auth service: delegates
- Auth service → User management: looks up users
- Auth service → Tenant management: resolves church
- Auth service → User management: creates or updates
- SSO verification → Auth service: issues local login
- Admin dashboard → API client: requests records
- Member portal → API client: requests services
- API client → Church data API: calls
- Church data API → Member records: dispatches
- Church data API → Family records: dispatches
- Church data API → Staff and servants: dispatches
- Church data API → Finance: dispatches
- Church data API → Inventory: dispatches
- Church data API → Schedules: dispatches
- Church data API → Notifications: dispatches
- Admin dashboard → Attendance and reports: views
- Bot endpoints → Bot service: delegates
- Bot service → AI service: generates replies
- WhatsApp user → Bot service: sends messages
- Bot service → WhatsApp user: replies via
- Dialogflow → Dialogflow webhook: posts webhook
- Dialogflow webhook → Tenant management: resolves tenant
- Church data API → Generic CRUD: extends CRUD
