# w00j00ng/glorycourse architecture

> Architecture diagram of the GitHub repository w00j00ng/glorycourse, 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/w00j00ng/glorycourse
- Repository: https://github.com/w00j00ng/glorycourse

## Overview

Glorycourse is a local-first church course and enrollment manager. Its main workflow is semester/course setup, application entry or Excel import, allocation-draft review and confirmation, then enrollment-history review and export. The graph also preserves catalog, import, and local SQLite storage capabilities documented in the README. Some service and frontend wiring is unsampled; those relationships are limited to indexed references or documented behavior rather than assumed from directory structure.

Main entry points: [`frontend/app.js`](https://github.com/w00j00ng/glorycourse/blob/main/frontend/app.js) (Screen coordinator), [`backend/src/api/router.ts`](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/api/router.ts) (API router), [`backend/src/repository/database.ts`](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/repository/database.ts) (Repository facade), [`backend/src/bootstrap/database.ts`](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/bootstrap/database.ts) (Database bootstrap)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["User interface"]
  node_frontend["Screen coordinator<br/>[app.js]"]
  node_catalog["Semester and course screens<br/>[catalog-page.js]"]
  node_applications_ui["Application screens"]
  node_draft_ui["Draft review screens<br/>[draft-detail.js]"]
  node_enrollments_ui["Enrollment screens"]
  node_imports_ui["Import screens<br/>[imports-page.js]"]
end

subgraph group_http["Local application"]
  node_server["HTTP server<br/>[server.ts]"]
  node_router["API router<br/>[router.ts]"]
  node_workbooks["Excel workbooks<br/>[workbooks.ts]"]
end

subgraph group_workflow["Enrollment workflows"]
  node_application_service["Application service<br/>[applications.ts]"]
  node_import_service["Import preview and commit<br/>[import-preview.ts]"]
  node_draft_service["Draft service<br/>[drafts.ts]"]
  node_allocation["Allocation engine<br/>[engine.ts]"]
  node_finalization["Draft finalization<br/>[finalization.ts]"]
  node_enrollment_service["Enrollment service<br/>[enrollments.ts]"]
end

subgraph group_data["Domain and persistence"]
  node_domain["Records and query models<br/>[records.ts]"]
  node_warnings["Application warnings"]
  node_repository["Repository facade<br/>[database.ts]"]
  node_queries["Domain queries<br/>[queries.ts]"]
  node_relational["Relational persistence"]
end

subgraph group_storage["Local storage"]
  node_sqlite[("SQLite data file<br/>[database-file.ts]")]
  node_bootstrap["Database bootstrap<br/>[database.ts]"]
  node_migrations["Store migrations<br/>[migrations.ts]"]
end

node_operator(("Church administrator"))

node_operator -->|"uses"| node_frontend
node_frontend -->|"renders"| node_catalog
node_frontend -->|"renders"| node_applications_ui
node_frontend -->|"renders"| node_draft_ui
node_frontend -->|"renders"| node_enrollments_ui
node_frontend -->|"renders"| node_imports_ui
node_frontend -.->|"requests"| node_server
node_server -->|"dispatches"| node_router
node_router -->|"calls"| node_application_service
node_router -->|"calls"| node_import_service
node_router -->|"calls"| node_draft_service
node_router -->|"calls"| node_finalization
node_router -->|"calls"| node_enrollment_service
node_router -->|"generates exports"| node_workbooks
node_application_service -->|"uses"| node_allocation
node_allocation -->|"checks"| node_warnings
node_application_service -->|"reads and writes"| node_repository
node_enrollment_service -->|"reads and writes"| node_repository
node_import_service -->|"reads and writes"| node_repository
node_repository -->|"creates query session"| node_queries
node_repository -->|"reads and writes"| node_relational
node_relational -->|"stores records"| node_domain
node_bootstrap -->|"opens"| node_repository
node_bootstrap -->|"runs"| node_migrations
node_bootstrap -.->|"opens file"| node_sqlite
node_operator -->|"submits applications"| node_applications_ui
node_operator -->|"reviews draft"| node_draft_ui
node_operator -->|"reviews history"| node_enrollments_ui
node_operator -->|"uploads Excel"| node_imports_ui

click node_frontend "https://github.com/w00j00ng/glorycourse/blob/main/frontend/app.js"
click node_catalog "https://github.com/w00j00ng/glorycourse/blob/main/frontend/catalog-page.js"
click node_applications_ui "https://github.com/w00j00ng/glorycourse/blob/main/frontend/applications-page.js"
click node_draft_ui "https://github.com/w00j00ng/glorycourse/blob/main/frontend/draft-detail.js"
click node_enrollments_ui "https://github.com/w00j00ng/glorycourse/blob/main/frontend/enrollments-page.js"
click node_imports_ui "https://github.com/w00j00ng/glorycourse/blob/main/frontend/imports-page.js"
click node_server "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/server.ts"
click node_router "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/api/router.ts"
click node_workbooks "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/excel/workbooks.ts"
click node_application_service "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/applications.ts"
click node_import_service "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/import-preview.ts"
click node_draft_service "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/drafts.ts"
click node_allocation "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/allocation/engine.ts"
click node_finalization "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/finalization.ts"
click node_enrollment_service "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/enrollments.ts"
click node_domain "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/domain/records.ts"
click node_warnings "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/domain/application-warnings.ts"
click node_repository "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/repository/database.ts"
click node_queries "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/repository/queries.ts"
click node_relational "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/repository/relational-store.ts"
click node_sqlite "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/storage/database-file.ts"
click node_bootstrap "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/bootstrap/database.ts"
click node_migrations "https://github.com/w00j00ng/glorycourse/blob/main/backend/src/storage/migrations.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_frontend,node_catalog,node_applications_ui,node_draft_ui,node_enrollments_ui,node_imports_ui toneBlue
class node_server,node_router,node_workbooks toneAmber
class node_application_service,node_import_service,node_draft_service,node_allocation,node_finalization,node_enrollment_service toneMint
class node_domain,node_warnings,node_repository,node_queries,node_relational toneRose
class node_sqlite,node_bootstrap,node_migrations,node_operator toneIndigo
```

## Components

### User interface

- [Screen coordinator](https://github.com/w00j00ng/glorycourse/blob/main/frontend/app.js): `frontend/app.js`
- [Semester and course screens](https://github.com/w00j00ng/glorycourse/blob/main/frontend/catalog-page.js): `frontend/catalog-page.js`
- [Application screens](https://github.com/w00j00ng/glorycourse/blob/main/frontend/applications-page.js): `frontend/applications-page.js`
- [Draft review screens](https://github.com/w00j00ng/glorycourse/blob/main/frontend/draft-detail.js): `frontend/draft-detail.js`
- [Enrollment screens](https://github.com/w00j00ng/glorycourse/blob/main/frontend/enrollments-page.js): `frontend/enrollments-page.js`
- [Import screens](https://github.com/w00j00ng/glorycourse/blob/main/frontend/imports-page.js): `frontend/imports-page.js`

### Local application

- [HTTP server](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/server.ts): `backend/src/server.ts`
- [API router](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/api/router.ts): `backend/src/api/router.ts`
- [Excel workbooks](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/excel/workbooks.ts): `backend/src/excel/workbooks.ts`

### Enrollment workflows

- [Application service](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/applications.ts): `backend/src/services/applications.ts`
- [Import preview and commit](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/import-preview.ts): `backend/src/services/import-preview.ts`
- [Draft service](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/drafts.ts): `backend/src/services/drafts.ts`
- [Allocation engine](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/allocation/engine.ts): `backend/src/allocation/engine.ts`
- [Draft finalization](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/finalization.ts): `backend/src/services/finalization.ts`
- [Enrollment service](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/services/enrollments.ts): `backend/src/services/enrollments.ts`

### Domain and persistence

- [Records and query models](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/domain/records.ts): `backend/src/domain/records.ts`
- [Application warnings](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/domain/application-warnings.ts): `backend/src/domain/application-warnings.ts`
- [Repository facade](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/repository/database.ts): `backend/src/repository/database.ts`
- [Domain queries](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/repository/queries.ts): `backend/src/repository/queries.ts`
- [Relational persistence](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/repository/relational-store.ts): `backend/src/repository/relational-store.ts`

### Local storage

- [SQLite data file](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/storage/database-file.ts): `backend/src/storage/database-file.ts`
- [Database bootstrap](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/bootstrap/database.ts): `backend/src/bootstrap/database.ts`
- [Store migrations](https://github.com/w00j00ng/glorycourse/blob/main/backend/src/storage/migrations.ts): `backend/src/storage/migrations.ts`

### Other components

- **Church administrator**

## Connections

- Church administrator → Screen coordinator: uses (evidence: `README.md`)
- Screen coordinator → Semester and course screens: renders (evidence: `frontend/app.js`)
- Screen coordinator → Application screens: renders (evidence: `frontend/app.js`)
- Screen coordinator → Draft review screens: renders (evidence: `frontend/app.js`)
- Screen coordinator → Enrollment screens: renders (evidence: `frontend/app.js`)
- Screen coordinator → Import screens: renders (evidence: `frontend/app.js`)
- Screen coordinator → HTTP server: requests
- HTTP server → API router: dispatches (evidence: `backend/src/server.ts`)
- API router → Application service: calls (evidence: `backend/src/api/router.ts`)
- API router → Import preview and commit: calls (evidence: `backend/src/api/router.ts`)
- API router → Draft service: calls (evidence: `backend/src/api/router.ts`)
- API router → Draft finalization: calls (evidence: `backend/src/api/router.ts`)
- API router → Enrollment service: calls (evidence: `backend/src/api/router.ts`)
- API router → Excel workbooks: generates exports (evidence: `backend/src/api/router.ts`)
- Application service → Allocation engine: uses (evidence: `backend/src/services/applications.ts`)
- Allocation engine → Application warnings: checks (evidence: `backend/src/allocation/engine.ts`)
- Application service → Repository facade: reads and writes (evidence: `backend/src/services/applications.ts`)
- Enrollment service → Repository facade: reads and writes (evidence: `backend/src/services/enrollments.ts`)
- Import preview and commit → Repository facade: reads and writes (evidence: `backend/src/services/import-preview.ts`)
- Repository facade → Domain queries: creates query session (evidence: `backend/src/repository/database.ts`)
- Repository facade → Relational persistence: reads and writes (evidence: `backend/src/repository/database.ts`)
- Relational persistence → Records and query models: stores records (evidence: `backend/src/repository/relational-store.ts`)
- Database bootstrap → Repository facade: opens (evidence: `backend/src/bootstrap/database.ts`)
- Database bootstrap → Store migrations: runs (evidence: `backend/src/bootstrap/database.ts`)
- Database bootstrap → SQLite data file: opens file
- Church administrator → Application screens: submits applications (evidence: `README.md`)
- Church administrator → Draft review screens: reviews draft (evidence: `README.md`)
- Church administrator → Enrollment screens: reviews history (evidence: `README.md`)
- Church administrator → Import screens: uploads Excel (evidence: `README.md`)
