# throwawaybtm/simak-diskum-v5 architecture

> Architecture diagram of the GitHub repository throwawaybtm/simak-diskum-v5, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/throwawaybtm/simak-diskum-v5
- Repository: https://github.com/throwawaybtm/simak-diskum-v5

## Overview

SIMAK DISKUM is a cloud-based agenda management platform with separate protected administration and public-information portals. Administrators authenticate, manage activities through a four-stage lifecycle, maintain master data, detect scheduling conflicts, and generate official reports; the public portal retrieves published agendas and announcements for calendar, agenda, and dashboard views. The shared layer provides domain schemas, privacy-safe publication projection, repositories, scheduling utilities, validation, and report generation. Some implementation paths are unsampled; those links are omitted or marked unverified rather than inferred.

Main entry points: [`department-agenda-firebase/shared/src/repository/activityRepository.ts`](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/repository/activityRepository.ts) (Activity repository), [`department-agenda-firebase/apps/public/src/main.ts`](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/main.ts) (Public app router), [`department-agenda-firebase/apps/admin/src/components/ActivityFormController.ts`](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/components/ActivityFormController.ts) (Activity form), [`department-agenda-firebase/shared/src/projection/publicProjector.ts`](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/projection/publicProjector.ts) (Privacy projection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_admin["Administration portal"]
  node_admin_router["Admin router<br/>[main.ts]"]
  node_auth["Admin authentication<br/>[authService.ts]"]
  node_activity_workflow["Activity workflow"]
  node_activity_form["Activity form"]
  node_master_admin["Master data management<br/>[MasterDataPage.ts]"]
  node_admin_reports["Admin reports<br/>[ReportsPage.ts]"]
end

subgraph group_public["Public portal"]
  node_public_app["Public app router<br/>[main.ts]"]
  node_public_controller["Agenda filtering"]
  node_public_views["Calendar and dashboard<br/>[CalendarView.ts]"]
  node_announcements["Announcements view"]
end

subgraph group_domain["Shared domain services"]
  node_projection["Privacy projection<br/>[publicProjector.ts]"]
  node_activity_schema["Activity schema<br/>[activity.ts]"]
  node_master_schema["Master data schema<br/>[master.ts]"]
  node_audit_schema["Audit schema<br/>[audit.ts]"]
  node_public_dto["Public DTO<br/>[publicDto.ts]"]
  node_time_utils["WIB scheduling utilities<br/>[timeUtils.ts]"]
  node_conflicts["Conflict detection"]
  node_activity_validation["Activity validation"]
  node_privacy_scan["Privacy scanning<br/>[privacyScanner.ts]"]
end

subgraph group_data["Persistence and publication"]
  node_firestore[("Cloud Firestore")]
  node_activity_repo["Activity repository"]
  node_master_repo["Master repository"]
  node_public_repo["Public repository"]
end

subgraph group_exports["Reporting and exports"]
  node_eight_report["Eight-column report"]
  node_xlsx_report["Excel export<br/>[xlsxGenerator.ts]"]
  node_image_report["Image export<br/>[imageGenerator.ts]"]
end

node_operator(("Administrator"))
node_visitor(("Public visitor"))

node_operator -->|"uses"| node_admin_router
node_admin_router -->|"signs in"| node_auth
node_admin_router -->|"routes to"| node_activity_workflow
node_activity_workflow -->|"uses"| node_activity_form
node_activity_form -->|"validates"| node_activity_validation
node_activity_form -->|"scans text"| node_privacy_scan
node_activity_form -->|"checks conflicts"| node_conflicts
node_activity_workflow -.->|"persists activity"| node_activity_repo
node_master_admin -.->|"manages records"| node_master_repo
node_activity_repo -->|"transacts writes"| node_firestore
node_master_repo -.->|"stores records"| node_firestore
node_activity_repo -->|"builds projection"| node_projection
node_projection -->|"produces"| node_public_dto
node_projection -->|"sanitizes text"| node_privacy_scan
node_projection -->|"formats dates"| node_time_utils
node_activity_repo -->|"uses records"| node_activity_schema
node_activity_repo -->|"writes audit"| node_audit_schema
node_activity_repo -->|"uses lookups"| node_master_schema
node_visitor -->|"browses"| node_public_app
node_public_app -->|"reads published data"| node_firestore
node_public_app -->|"renders calendar"| node_public_views
node_public_app -->|"renders announcements"| node_announcements
node_public_views -->|"uses calendar logic"| node_public_controller
node_public_controller -->|"sorts agendas"| node_time_utils
node_public_app -.->|"fetches public agenda"| node_public_repo
node_admin_reports -.->|"generates reports"| node_eight_report
node_eight_report -->|"formats schedule"| node_time_utils
node_eight_report -.->|"exports workbook"| node_xlsx_report
node_image_report -->|"uses report data"| node_eight_report

click node_admin_router "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/main.ts"
click node_auth "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/auth/authService.ts"
click node_activity_workflow "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/pages/ActivityEditWorkflow.ts"
click node_activity_form "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/components/ActivityFormController.ts"
click node_master_admin "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/pages/MasterDataPage.ts"
click node_admin_reports "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/pages/ReportsPage.ts"
click node_public_app "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/main.ts"
click node_public_controller "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/components/PublicController.ts"
click node_public_views "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/pages/CalendarView.ts"
click node_announcements "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/pages/AnnouncementsView.ts"
click node_activity_repo "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/repository/activityRepository.ts"
click node_master_repo "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/repository/masterRepository.ts"
click node_public_repo "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/repository/publicRepository.ts"
click node_projection "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/projection/publicProjector.ts"
click node_activity_schema "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/schema/activity.ts"
click node_master_schema "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/schema/master.ts"
click node_audit_schema "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/schema/audit.ts"
click node_public_dto "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/schema/publicDto.ts"
click node_time_utils "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/scheduling/timeUtils.ts"
click node_conflicts "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/scheduling/conflictDetector.ts"
click node_activity_validation "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/validation/activityValidator.ts"
click node_privacy_scan "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/validation/privacyScanner.ts"
click node_eight_report "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/reports/eightColumnReport.ts"
click node_xlsx_report "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/reports/xlsxGenerator.ts"
click node_image_report "https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/reports/imageGenerator.ts"

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_admin_router,node_auth,node_activity_workflow,node_activity_form,node_master_admin,node_admin_reports toneBlue
class node_public_app,node_public_controller,node_public_views,node_announcements toneAmber
class node_projection,node_activity_schema,node_master_schema,node_audit_schema,node_public_dto,node_time_utils,node_conflicts,node_activity_validation,node_privacy_scan toneMint
class node_firestore,node_activity_repo,node_master_repo,node_public_repo toneRose
class node_eight_report,node_xlsx_report,node_image_report,node_operator,node_visitor toneIndigo
```

## Components

### Administration portal

- [Admin router](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/main.ts): `department-agenda-firebase/apps/admin/src/main.ts`
- [Admin authentication](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/auth/authService.ts): `department-agenda-firebase/apps/admin/src/auth/authService.ts`
- [Activity workflow](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/pages/ActivityEditWorkflow.ts): `department-agenda-firebase/apps/admin/src/pages/ActivityEditWorkflow.ts`
- [Activity form](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/components/ActivityFormController.ts): `department-agenda-firebase/apps/admin/src/components/ActivityFormController.ts`
- [Master data management](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/pages/MasterDataPage.ts): `department-agenda-firebase/apps/admin/src/pages/MasterDataPage.ts`
- [Admin reports](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/admin/src/pages/ReportsPage.ts): `department-agenda-firebase/apps/admin/src/pages/ReportsPage.ts`

### Public portal

- [Public app router](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/main.ts): `department-agenda-firebase/apps/public/src/main.ts`
- [Agenda filtering](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/components/PublicController.ts): `department-agenda-firebase/apps/public/src/components/PublicController.ts`
- [Calendar and dashboard](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/pages/CalendarView.ts): `department-agenda-firebase/apps/public/src/pages/CalendarView.ts`
- [Announcements view](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/apps/public/src/pages/AnnouncementsView.ts): `department-agenda-firebase/apps/public/src/pages/AnnouncementsView.ts`

### Shared domain services

- [Privacy projection](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/projection/publicProjector.ts): `department-agenda-firebase/shared/src/projection/publicProjector.ts`
- [Activity schema](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/schema/activity.ts): `department-agenda-firebase/shared/src/schema/activity.ts`
- [Master data schema](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/schema/master.ts): `department-agenda-firebase/shared/src/schema/master.ts`
- [Audit schema](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/schema/audit.ts): `department-agenda-firebase/shared/src/schema/audit.ts`
- [Public DTO](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/schema/publicDto.ts): `department-agenda-firebase/shared/src/schema/publicDto.ts`
- [WIB scheduling utilities](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/scheduling/timeUtils.ts): `department-agenda-firebase/shared/src/scheduling/timeUtils.ts`
- [Conflict detection](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/scheduling/conflictDetector.ts): `department-agenda-firebase/shared/src/scheduling/conflictDetector.ts`
- [Activity validation](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/validation/activityValidator.ts): `department-agenda-firebase/shared/src/validation/activityValidator.ts`
- [Privacy scanning](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/validation/privacyScanner.ts): `department-agenda-firebase/shared/src/validation/privacyScanner.ts`

### Persistence and publication

- **Cloud Firestore**
- [Activity repository](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/repository/activityRepository.ts): `department-agenda-firebase/shared/src/repository/activityRepository.ts`
- [Master repository](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/repository/masterRepository.ts): `department-agenda-firebase/shared/src/repository/masterRepository.ts`
- [Public repository](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/repository/publicRepository.ts): `department-agenda-firebase/shared/src/repository/publicRepository.ts`

### Reporting and exports

- [Eight-column report](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/reports/eightColumnReport.ts): `department-agenda-firebase/shared/src/reports/eightColumnReport.ts`
- [Excel export](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/reports/xlsxGenerator.ts): `department-agenda-firebase/shared/src/reports/xlsxGenerator.ts`
- [Image export](https://github.com/throwawaybtm/simak-diskum-v5/blob/master/department-agenda-firebase/shared/src/reports/imageGenerator.ts): `department-agenda-firebase/shared/src/reports/imageGenerator.ts`

### Other components

- **Administrator**
- **Public visitor**

## Connections

- Administrator → Admin router: uses
- Admin router → Admin authentication: signs in (evidence: `department-agenda-firebase/apps/admin/src/main.ts`)
- Admin router → Activity workflow: routes to (evidence: `department-agenda-firebase/apps/admin/src/main.ts`)
- Activity workflow → Activity form: uses (evidence: `department-agenda-firebase/apps/admin/src/pages/ActivityEditWorkflow.ts`)
- Activity form → Activity validation: validates (evidence: `department-agenda-firebase/apps/admin/src/components/ActivityFormController.ts`)
- Activity form → Privacy scanning: scans text (evidence: `department-agenda-firebase/apps/admin/src/components/ActivityFormController.ts`)
- Activity form → Conflict detection: checks conflicts (evidence: `department-agenda-firebase/apps/admin/src/components/ActivityFormController.ts`)
- Activity workflow → Activity repository: persists activity
- Master data management → Master repository: manages records
- Activity repository → Cloud Firestore: transacts writes (evidence: `department-agenda-firebase/shared/src/repository/activityRepository.ts`)
- Master repository → Cloud Firestore: stores records
- Activity repository → Privacy projection: builds projection (evidence: `department-agenda-firebase/shared/src/repository/activityRepository.ts`)
- Privacy projection → Public DTO: produces (evidence: `department-agenda-firebase/shared/src/projection/publicProjector.ts`)
- Privacy projection → Privacy scanning: sanitizes text (evidence: `department-agenda-firebase/shared/src/projection/publicProjector.ts`)
- Privacy projection → WIB scheduling utilities: formats dates (evidence: `department-agenda-firebase/shared/src/projection/publicProjector.ts`)
- Activity repository → Activity schema: uses records (evidence: `department-agenda-firebase/shared/src/repository/activityRepository.ts`)
- Activity repository → Audit schema: writes audit (evidence: `department-agenda-firebase/shared/src/repository/activityRepository.ts`)
- Activity repository → Master data schema: uses lookups (evidence: `department-agenda-firebase/shared/src/repository/activityRepository.ts`)
- Public visitor → Public app router: browses
- Public app router → Cloud Firestore: reads published data (evidence: `department-agenda-firebase/apps/public/src/main.ts`)
- Public app router → Calendar and dashboard: renders calendar (evidence: `department-agenda-firebase/apps/public/src/main.ts`)
- Public app router → Announcements view: renders announcements (evidence: `department-agenda-firebase/apps/public/src/main.ts`)
- Calendar and dashboard → Agenda filtering: uses calendar logic (evidence: `department-agenda-firebase/apps/public/src/pages/CalendarView.ts`)
- Agenda filtering → WIB scheduling utilities: sorts agendas (evidence: `department-agenda-firebase/apps/public/src/components/PublicController.ts`)
- Public app router → Public repository: fetches public agenda
- Admin reports → Eight-column report: generates reports
- Eight-column report → WIB scheduling utilities: formats schedule (evidence: `department-agenda-firebase/shared/src/reports/eightColumnReport.ts`)
- Eight-column report → Excel export: exports workbook
- Image export → Eight-column report: uses report data (evidence: `department-agenda-firebase/shared/src/reports/imageGenerator.ts`)
