# rebots-online/sanctissimissa architecture

> Architecture diagram of the GitHub repository rebots-online/sanctissimissa, 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/rebots-online/sanctissimissa
- Repository: https://github.com/rebots-online/sanctissimissa
- Video tour (about a minute): https://gitdiagram.com/rebots-online/sanctissimissa/video

## Overview

SanctissiMissa is a liturgical navigation and reading application: a user selects a date, explores the Mass’s subway-style ordo, and reads bilingual prayers with cross-references and similarity-based discovery. The graph also preserves the documented calendar, Divine Office, and audiobook capabilities. The excerpts show the app’s date resolution, corpus access, Office construction, and audiobook/voice internals; some other feature links are documented in the README but their implementation was not sampled, so those links are marked unverified.

Main entry points: [`src/App.tsx`](https://github.com/rebots-online/sanctissimissa/blob/master/src/App.tsx) (App shell), [`src/core/office/engine.ts`](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/office/engine.ts) (Divine Office), [`src/core/data/corpusDb.ts`](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/data/corpusDb.ts) (Graph corpus), [`src/core/account/useAccount.ts`](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/account/useAccount.ts) (Account access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and navigation"]
  node_app["App shell<br/>[App.tsx]"]
end

subgraph group_liturgical["Liturgical content"]
  node_calendar["Perpetual calendar<br/>[computus.ts]"]
  node_day["Liturgical day<br/>[liturgicalDay.ts]"]
  node_ordo["Mass ordo map<br/>[massOrdo.ts]"]
  node_reader["Exegetical reader<br/>[ReaderView.tsx]"]
  node_office["Divine Office<br/>[engine.ts]"]
end

subgraph group_discovery["Corpus discovery"]
  node_corpus[("Graph corpus<br/>[corpusDb.ts]")]
  node_vectors["Vector similarity<br/>[search.ts]"]
  node_concordance["Concordance<br/>[corpusDb.ts]"]
  node_annotations["Annotations index"]
end

subgraph group_personal["Personal features"]
  node_account["Account access<br/>[useAccount.ts]"]
  node_billing["Billing<br/>[client.ts]"]
  node_bookstore["Bookstore<br/>[BookstoreView.tsx]"]
end

subgraph group_speech["Speech and audio"]
  node_audiobook["Audiobook controller<br/>[controller.ts]"]
  node_voice["Voice synthesis<br/>[voice.ts]"]
  node_speechpipe["Speech pipeline<br/>[pipeline.ts]"]
end

node_user(("Reader"))

node_user -->|"opens"| node_app
node_app -->|"resolves date"| node_day
node_app -->|"loads corpus"| node_corpus
node_app -.->|"uses calendar"| node_calendar
node_app -.->|"shows ordo"| node_ordo
node_app -.->|"renders reader"| node_reader
node_app -.->|"opens Office"| node_office
node_app -->|"opens index"| node_annotations
node_office -->|"parses date"| node_calendar
node_office -->|"resolves vigil"| node_day
node_office -->|"reads prayers"| node_corpus
node_corpus -->|"uses vectors"| node_vectors
node_user -.->|"requests meaning"| node_concordance
node_user -.->|"finds similar text"| node_vectors
node_user -.->|"signs in"| node_account
node_account -.->|"uses billing"| node_billing
node_user -.->|"browses books"| node_bookstore
node_user -.->|"plays audiobook"| node_audiobook
node_audiobook -->|"renders chapters"| node_voice
node_user -.->|"speaks selection"| node_speechpipe

click node_app "https://github.com/rebots-online/sanctissimissa/blob/master/src/App.tsx"
click node_calendar "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/calendar/computus.ts"
click node_day "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/data/liturgicalDay.ts"
click node_ordo "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/model/massOrdo.ts"
click node_reader "https://github.com/rebots-online/sanctissimissa/blob/master/src/ui/ReaderView.tsx"
click node_office "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/office/engine.ts"
click node_corpus "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/data/corpusDb.ts"
click node_vectors "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/vector/search.ts"
click node_concordance "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/data/corpusDb.ts"
click node_annotations "https://github.com/rebots-online/sanctissimissa/blob/master/src/ui/AnnotationIndex.tsx"
click node_account "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/account/useAccount.ts"
click node_billing "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/billing/client.ts"
click node_bookstore "https://github.com/rebots-online/sanctissimissa/blob/master/src/ui/library/BookstoreView.tsx"
click node_audiobook "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/audiobook/controller.ts"
click node_voice "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/voice/voice.ts"
click node_speechpipe "https://github.com/rebots-online/sanctissimissa/blob/master/src/core/voice/pipeline.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_app toneBlue
class node_calendar,node_day,node_ordo,node_reader,node_office toneAmber
class node_corpus,node_vectors,node_concordance,node_annotations toneMint
class node_account,node_billing,node_bookstore toneRose
class node_audiobook,node_voice,node_speechpipe,node_user toneIndigo
```

## Components

### Application and navigation

- [App shell](https://github.com/rebots-online/sanctissimissa/blob/master/src/App.tsx): `src/App.tsx`

### Liturgical content

- [Perpetual calendar](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/calendar/computus.ts): `src/core/calendar/computus.ts`
- [Liturgical day](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/data/liturgicalDay.ts): `src/core/data/liturgicalDay.ts`
- [Mass ordo map](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/model/massOrdo.ts): `src/core/model/massOrdo.ts`
- [Exegetical reader](https://github.com/rebots-online/sanctissimissa/blob/master/src/ui/ReaderView.tsx): `src/ui/ReaderView.tsx`
- [Divine Office](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/office/engine.ts): `src/core/office/engine.ts`

### Corpus discovery

- [Graph corpus](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/data/corpusDb.ts): `src/core/data/corpusDb.ts`
- [Vector similarity](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/vector/search.ts): `src/core/vector/search.ts`
- [Concordance](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/data/corpusDb.ts): `src/core/data/corpusDb.ts`
- [Annotations index](https://github.com/rebots-online/sanctissimissa/blob/master/src/ui/AnnotationIndex.tsx): `src/ui/AnnotationIndex.tsx`

### Personal features

- [Account access](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/account/useAccount.ts): `src/core/account/useAccount.ts`
- [Billing](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/billing/client.ts): `src/core/billing/client.ts`
- [Bookstore](https://github.com/rebots-online/sanctissimissa/blob/master/src/ui/library/BookstoreView.tsx): `src/ui/library/BookstoreView.tsx`

### Speech and audio

- [Audiobook controller](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/audiobook/controller.ts): `src/core/audiobook/controller.ts`
- [Voice synthesis](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/voice/voice.ts): `src/core/voice/voice.ts`
- [Speech pipeline](https://github.com/rebots-online/sanctissimissa/blob/master/src/core/voice/pipeline.ts): `src/core/voice/pipeline.ts`

### Other components

- **Reader**

## Connections

- Reader → App shell: opens
- App shell → Liturgical day: resolves date (evidence: `src/App.tsx`)
- App shell → Graph corpus: loads corpus (evidence: `src/App.tsx`)
- App shell → Perpetual calendar: uses calendar (evidence: `src/App.tsx`)
- App shell → Mass ordo map: shows ordo (evidence: `src/App.tsx`)
- App shell → Exegetical reader: renders reader (evidence: `src/App.tsx`)
- App shell → Divine Office: opens Office (evidence: `src/App.tsx`)
- App shell → Annotations index: opens index (evidence: `src/App.tsx`)
- Divine Office → Perpetual calendar: parses date (evidence: `src/core/office/engine.ts`)
- Divine Office → Liturgical day: resolves vigil (evidence: `src/core/office/engine.ts`)
- Divine Office → Graph corpus: reads prayers (evidence: `src/core/office/engine.ts`)
- Graph corpus → Vector similarity: uses vectors (evidence: `src/core/data/corpusDb.ts`)
- Reader → Concordance: requests meaning
- Reader → Vector similarity: finds similar text
- Reader → Account access: signs in
- Account access → Billing: uses billing
- Reader → Bookstore: browses books
- Reader → Audiobook controller: plays audiobook
- Audiobook controller → Voice synthesis: renders chapters (evidence: `src/core/audiobook/controller.ts`)
- Reader → Speech pipeline: speaks selection (evidence: `src/core/voice/pipeline.ts`)
