# ednikamrotciv/twocchurch-site architecture

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

- Interactive diagram: https://gitdiagram.com/ednikamrotciv/twocchurch-site
- Repository: https://github.com/ednikamrotciv/twocchurch-site

## Overview

World Overcomers is a church website with public ministry/content pages, livestream and presentation experiences, and an office-facing CMS. Visitors enter through the React app, which resolves routes and renders public pages in a shared layout; editors use the admin console to manage and publish content through the CMS client and shared content backend. The repository also documents sermon, giving, prayer, events, locations, and other ministry capabilities. Unsampled page and backend internals are represented at their exact tree paths; their detailed call relationships are not inferred.

Main entry points: [`src/App.tsx`](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/App.tsx) (App shell), [`src/components/layout.tsx`](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/components/layout.tsx) (Shared layout and blocks), [`src/pages`](https://github.com/ednikamrotciv/twocchurch-site/tree/main/src/pages) (Public ministry pages), [`src/pages/WatchLive.tsx`](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/pages/WatchLive.tsx) (Livestream experience)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application Shell"]
  node_entry["React entry<br/>[main.tsx]"]
  node_app_shell["App shell<br/>[App.tsx]"]
  node_routing["Route registry<br/>[routes.tsx]"]
  node_shared_layout["Shared layout and blocks<br/>[layout.tsx]"]
end

subgraph group_content["Church Content"]
  node_public_pages["Public ministry pages"]
  node_content_data["Church content data<br/>[content.ts]"]
  node_site_data["Site and branch data<br/>[site.ts]"]
  node_copy["Editable and translated copy<br/>[copy.ts]"]
  node_sermons["Sermon library<br/>[sermons.ts]"]
end

subgraph group_live["Live and Media"]
  node_live_page["Livestream experience<br/>[WatchLive.tsx]"]
  node_live_status["Live status and verification<br/>[livestatus.ts]"]
  node_recent_streams["Recent streams<br/>[recentstreams.ts]"]
  node_slides["Presentation and slides<br/>[slides.tsx]"]
end

subgraph group_admin["Content Management"]
  node_admin_page["Admin console<br/>[Admin.tsx]"]
  node_editor["Content editor<br/>[editor.tsx]"]
  node_cms_client["CMS client<br/>[cms.ts]"]
  node_cms_backend["Shared content backend<br/>[cms-server.js]"]
end

subgraph group_runtime["Shared Runtime"]
  node_store[("Browser state store<br/>[store.ts]")]
  node_hooks["Reactive hooks<br/>[hooks.ts]"]
  node_i18n["Language services<br/>[i18n.ts]"]
  node_embed["Media embed helpers<br/>[embed.ts]"]
end

node_visitor(("Site visitor"))

node_visitor -->|"opens site"| node_entry
node_entry -->|"mounts"| node_app_shell
node_app_shell -->|"resolves routes"| node_routing
node_routing -->|"dispatches pages"| node_public_pages
node_app_shell -->|"renders"| node_shared_layout
node_shared_layout -->|"reads content"| node_content_data
node_shared_layout -->|"reads site data"| node_site_data
node_shared_layout -->|"reads copy"| node_copy
node_public_pages -.->|"uses content"| node_content_data
node_public_pages -.->|"uses sermons"| node_sermons
node_public_pages -.->|"includes live page"| node_live_page
node_live_page -->|"checks status"| node_live_status
node_live_page -.->|"loads streams"| node_recent_streams
node_live_page -.->|"uses embed helpers"| node_embed
node_app_shell -.->|"provides slides"| node_slides
node_admin_page -->|"renders editor"| node_editor
node_admin_page -->|"uses CMS"| node_cms_client
node_editor -->|"edits content"| node_cms_client
node_cms_client -.->|"publishes content"| node_cms_backend
node_cms_client -->|"persists draft state"| node_store
node_hooks -.->|"reacts to storage"| node_store
node_copy -->|"translates text"| node_i18n
node_sermons -->|"builds watch links"| node_embed
node_live_status -->|"parses video IDs"| node_embed

click node_entry "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/main.tsx"
click node_app_shell "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/App.tsx"
click node_routing "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/routes.tsx"
click node_public_pages "https://github.com/ednikamrotciv/twocchurch-site/tree/main/src/pages"
click node_shared_layout "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/components/layout.tsx"
click node_content_data "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/data/content.ts"
click node_site_data "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/data/site.ts"
click node_copy "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/data/copy.ts"
click node_sermons "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/data/sermons.ts"
click node_live_page "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/pages/WatchLive.tsx"
click node_live_status "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/livestatus.ts"
click node_recent_streams "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/recentstreams.ts"
click node_slides "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/components/slides.tsx"
click node_admin_page "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/pages/Admin.tsx"
click node_editor "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/components/editor.tsx"
click node_cms_client "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/cms.ts"
click node_cms_backend "https://github.com/ednikamrotciv/twocchurch-site/blob/main/scripts/cms-server.js"
click node_store "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/store.ts"
click node_hooks "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/hooks.ts"
click node_i18n "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/i18n.ts"
click node_embed "https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/embed.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_entry,node_app_shell,node_routing,node_shared_layout toneBlue
class node_public_pages,node_content_data,node_site_data,node_copy,node_sermons toneAmber
class node_live_page,node_live_status,node_recent_streams,node_slides toneMint
class node_admin_page,node_editor,node_cms_client,node_cms_backend toneRose
class node_store,node_hooks,node_i18n,node_embed,node_visitor toneIndigo
```

## Components

### Application Shell

- [React entry](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/main.tsx): `src/main.tsx`
- [App shell](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/App.tsx): `src/App.tsx`
- [Route registry](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/routes.tsx): `src/lib/routes.tsx`
- [Shared layout and blocks](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/components/layout.tsx): `src/components/layout.tsx`

### Church Content

- [Public ministry pages](https://github.com/ednikamrotciv/twocchurch-site/tree/main/src/pages): `src/pages`
- [Church content data](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/data/content.ts): `src/data/content.ts`
- [Site and branch data](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/data/site.ts): `src/data/site.ts`
- [Editable and translated copy](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/data/copy.ts): `src/data/copy.ts`
- [Sermon library](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/data/sermons.ts): `src/data/sermons.ts`

### Live and Media

- [Livestream experience](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/pages/WatchLive.tsx): `src/pages/WatchLive.tsx`
- [Live status and verification](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/livestatus.ts): `src/lib/livestatus.ts`
- [Recent streams](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/recentstreams.ts): `src/lib/recentstreams.ts`
- [Presentation and slides](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/components/slides.tsx): `src/components/slides.tsx`

### Content Management

- [Admin console](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/pages/Admin.tsx): `src/pages/Admin.tsx`
- [Content editor](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/components/editor.tsx): `src/components/editor.tsx`
- [CMS client](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/cms.ts): `src/lib/cms.ts`
- [Shared content backend](https://github.com/ednikamrotciv/twocchurch-site/blob/main/scripts/cms-server.js): `scripts/cms-server.js`

### Shared Runtime

- [Browser state store](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/store.ts): `src/lib/store.ts`
- [Reactive hooks](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/hooks.ts): `src/lib/hooks.ts`
- [Language services](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/i18n.ts): `src/lib/i18n.ts`
- [Media embed helpers](https://github.com/ednikamrotciv/twocchurch-site/blob/main/src/lib/embed.ts): `src/lib/embed.ts`

### Other components

- **Site visitor**

## Connections

- Site visitor → React entry: opens site (evidence: `README.md`)
- React entry → App shell: mounts (evidence: `src/main.tsx`)
- App shell → Route registry: resolves routes (evidence: `src/App.tsx`)
- Route registry → Public ministry pages: dispatches pages (evidence: `src/lib/routes.tsx`)
- App shell → Shared layout and blocks: renders (evidence: `src/App.tsx`)
- Shared layout and blocks → Church content data: reads content (evidence: `src/components/layout.tsx`)
- Shared layout and blocks → Site and branch data: reads site data (evidence: `src/components/layout.tsx`)
- Shared layout and blocks → Editable and translated copy: reads copy (evidence: `src/components/layout.tsx`)
- Public ministry pages → Church content data: uses content (evidence: `src/pages/Prayer.tsx`)
- Public ministry pages → Sermon library: uses sermons (evidence: `src/pages/Admin.tsx`)
- Public ministry pages → Livestream experience: includes live page
- Livestream experience → Live status and verification: checks status (evidence: `src/pages/WatchLive.tsx`)
- Livestream experience → Recent streams: loads streams (evidence: `src/pages/WatchLive.tsx`)
- Livestream experience → Media embed helpers: uses embed helpers (evidence: `src/pages/WatchLive.tsx`)
- App shell → Presentation and slides: provides slides
- Admin console → Content editor: renders editor (evidence: `src/pages/Admin.tsx`)
- Admin console → CMS client: uses CMS (evidence: `src/pages/Admin.tsx`)
- Content editor → CMS client: edits content (evidence: `src/components/editor.tsx`)
- CMS client → Shared content backend: publishes content (evidence: `README.md`)
- CMS client → Browser state store: persists draft state (evidence: `src/lib/cms.ts`)
- Reactive hooks → Browser state store: reacts to storage (evidence: `src/lib/store.ts`)
- Editable and translated copy → Language services: translates text (evidence: `src/data/copy.ts`)
- Sermon library → Media embed helpers: builds watch links (evidence: `src/data/sermons.ts`)
- Live status and verification → Media embed helpers: parses video IDs (evidence: `src/lib/livestatus.ts`)
