# jvbees14-coder/the-charter architecture

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

- Interactive diagram: https://gitdiagram.com/jvbees14-coder/the-charter
- Repository: https://github.com/jvbees14-coder/the-charter

## Overview

The Charter is a student-led current-affairs review published as a static site. Contributors create article or source ZIPs in browser-based builders, editors import submissions into content files, and editors/fact-checkers record approvals through the editorial workflow. The build loads and validates that content, renders the site, and produces static files for hosting; readers browse and search those pages. The README documents major site features and command behavior; some implementation details are unsampled, so the graph omits uncertain internal wiring.

Main entry points: [`scripts/lib/content.mjs`](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/content.mjs) (Content loader), [`scripts/build.mjs`](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/build.mjs) (Static site build), [`scripts/import.mjs`](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/import.mjs) (Submission importer), [`scripts/workflow.mjs`](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/workflow.mjs) (Editorial workflow)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_content["Editorial content"]
  node_articles["Articles"]
  node_sources["Source records"]
  node_people["People and roles<br/>[people.yml]"]
  node_site_data["Site configuration<br/>[site.yml]"]
  node_sections_formats["Sections and formats<br/>[sections.yml]"]
  node_other_content["Pages, media, issues"]
  node_numbers_rail["Numbers rail<br/>[numbers-rail.md]"]
end

subgraph group_workflow["Authoring and review"]
  node_article_builder["Article builder<br/>[builder.js]"]
  node_source_builder["Source builder<br/>[source-builder.js]"]
  node_builder_kit["Builder utilities<br/>[builder-kit.js]"]
  node_importer["Submission importer<br/>[import.mjs]"]
  node_editorial_workflow["Editorial workflow<br/>[workflow.mjs]"]
end

subgraph group_generation["Site generation"]
  node_content_loader["Content loader<br/>[content.mjs]"]
  node_checks["Sourcing checks<br/>[checks.mjs]"]
  node_markdown["Markdown renderer<br/>[markdown.mjs]"]
  node_components["Content components<br/>[components.mjs]"]
  node_page_templates["Page templates<br/>[pages.mjs]"]
  node_site_build["Static site build<br/>[build.mjs]"]
end

subgraph group_experience["Reader experience"]
  node_static_site["Generated static site"]
  node_site_styles["Site styling<br/>[charter.css]"]
  node_reader_script["Search and enhancements<br/>[charter.js]"]
end

node_contributors(("Contributors"))
node_editors(("Editors and reviewers"))
node_readers(("Readers"))
node_hosting["Static hosting"]

node_contributors -->|"write articles"| node_article_builder
node_contributors -->|"prepare sources"| node_source_builder
node_article_builder -->|"uses"| node_builder_kit
node_source_builder -->|"uses"| node_builder_kit
node_article_builder -->|"downloads submission"| node_importer
node_source_builder -->|"downloads sources"| node_importer
node_editors -->|"import ZIP"| node_importer
node_importer -->|"writes drafts"| node_articles
node_importer -->|"writes records"| node_sources
node_importer -->|"adds writers"| node_people
node_editors -->|"record decisions"| node_editorial_workflow
node_editorial_workflow -->|"loads records"| node_content_loader
node_editorial_workflow -->|"checks publication"| node_checks
node_editorial_workflow -->|"updates status"| node_articles
node_editorial_workflow -->|"checks roles"| node_people
node_site_build -->|"loads content"| node_content_loader
node_site_build -->|"validates content"| node_checks
node_site_build -->|"renders text"| node_markdown
node_site_build -->|"renders components"| node_components
node_site_build -->|"renders pages"| node_page_templates
node_content_loader -->|"reads"| node_articles
node_content_loader -->|"reads"| node_sources
node_content_loader -->|"reads"| node_people
node_content_loader -->|"reads"| node_site_data
node_content_loader -->|"reads"| node_sections_formats
node_content_loader -->|"reads"| node_other_content
node_content_loader -->|"reads"| node_numbers_rail
node_site_build -->|"writes pages"| node_static_site
node_static_site -->|"loads styles"| node_site_styles
node_static_site -->|"loads script"| node_reader_script
node_hosting -->|"serves"| node_static_site
node_readers -->|"browse and search"| node_hosting

click node_article_builder "https://github.com/jvbees14-coder/the-charter/blob/main/assets/js/builder.js"
click node_source_builder "https://github.com/jvbees14-coder/the-charter/blob/main/assets/js/source-builder.js"
click node_builder_kit "https://github.com/jvbees14-coder/the-charter/blob/main/assets/js/builder-kit.js"
click node_importer "https://github.com/jvbees14-coder/the-charter/blob/main/scripts/import.mjs"
click node_editorial_workflow "https://github.com/jvbees14-coder/the-charter/blob/main/scripts/workflow.mjs"
click node_articles "https://github.com/jvbees14-coder/the-charter/tree/main/content/articles"
click node_sources "https://github.com/jvbees14-coder/the-charter/tree/main/content/sources"
click node_people "https://github.com/jvbees14-coder/the-charter/blob/main/content/people.yml"
click node_site_data "https://github.com/jvbees14-coder/the-charter/blob/main/content/site.yml"
click node_sections_formats "https://github.com/jvbees14-coder/the-charter/blob/main/content/sections.yml"
click node_other_content "https://github.com/jvbees14-coder/the-charter/tree/main/content"
click node_numbers_rail "https://github.com/jvbees14-coder/the-charter/blob/main/content/numbers-rail.md"
click node_content_loader "https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/content.mjs"
click node_checks "https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/checks.mjs"
click node_markdown "https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/markdown.mjs"
click node_components "https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/components.mjs"
click node_page_templates "https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/pages.mjs"
click node_site_build "https://github.com/jvbees14-coder/the-charter/blob/main/scripts/build.mjs"
click node_site_styles "https://github.com/jvbees14-coder/the-charter/blob/main/assets/css/charter.css"
click node_reader_script "https://github.com/jvbees14-coder/the-charter/blob/main/assets/js/charter.js"

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_articles,node_sources,node_people,node_site_data,node_sections_formats,node_other_content,node_numbers_rail,node_editors toneBlue
class node_article_builder,node_source_builder,node_builder_kit,node_importer,node_editorial_workflow toneAmber
class node_content_loader,node_checks,node_markdown,node_components,node_page_templates,node_site_build toneMint
class node_static_site,node_site_styles,node_reader_script toneRose
class node_contributors,node_readers,node_hosting toneIndigo
```

## Components

### Editorial content

- [Articles](https://github.com/jvbees14-coder/the-charter/tree/main/content/articles): `content/articles`
- [Source records](https://github.com/jvbees14-coder/the-charter/tree/main/content/sources): `content/sources`
- [People and roles](https://github.com/jvbees14-coder/the-charter/blob/main/content/people.yml): `content/people.yml`
- [Site configuration](https://github.com/jvbees14-coder/the-charter/blob/main/content/site.yml): `content/site.yml`
- [Sections and formats](https://github.com/jvbees14-coder/the-charter/blob/main/content/sections.yml): `content/sections.yml`
- [Pages, media, issues](https://github.com/jvbees14-coder/the-charter/tree/main/content): `content`
- [Numbers rail](https://github.com/jvbees14-coder/the-charter/blob/main/content/numbers-rail.md): `content/numbers-rail.md`

### Authoring and review

- [Article builder](https://github.com/jvbees14-coder/the-charter/blob/main/assets/js/builder.js): `assets/js/builder.js`
- [Source builder](https://github.com/jvbees14-coder/the-charter/blob/main/assets/js/source-builder.js): `assets/js/source-builder.js`
- [Builder utilities](https://github.com/jvbees14-coder/the-charter/blob/main/assets/js/builder-kit.js): `assets/js/builder-kit.js`
- [Submission importer](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/import.mjs): `scripts/import.mjs`
- [Editorial workflow](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/workflow.mjs): `scripts/workflow.mjs`

### Site generation

- [Content loader](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/content.mjs): `scripts/lib/content.mjs`
- [Sourcing checks](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/checks.mjs): `scripts/lib/checks.mjs`
- [Markdown renderer](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/markdown.mjs): `scripts/lib/markdown.mjs`
- [Content components](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/components.mjs): `scripts/lib/components.mjs`
- [Page templates](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/lib/pages.mjs): `scripts/lib/pages.mjs`
- [Static site build](https://github.com/jvbees14-coder/the-charter/blob/main/scripts/build.mjs): `scripts/build.mjs`

### Reader experience

- **Generated static site**
- [Site styling](https://github.com/jvbees14-coder/the-charter/blob/main/assets/css/charter.css): `assets/css/charter.css`
- [Search and enhancements](https://github.com/jvbees14-coder/the-charter/blob/main/assets/js/charter.js): `assets/js/charter.js`

### Other components

- **Contributors**
- **Editors and reviewers**
- **Readers**
- **Static hosting**

## Connections

- Contributors → Article builder: write articles
- Contributors → Source builder: prepare sources
- Article builder → Builder utilities: uses
- Source builder → Builder utilities: uses
- Article builder → Submission importer: downloads submission
- Source builder → Submission importer: downloads sources
- Editors and reviewers → Submission importer: import ZIP
- Submission importer → Articles: writes drafts
- Submission importer → Source records: writes records
- Submission importer → People and roles: adds writers
- Editors and reviewers → Editorial workflow: record decisions
- Editorial workflow → Content loader: loads records
- Editorial workflow → Sourcing checks: checks publication
- Editorial workflow → Articles: updates status
- Editorial workflow → People and roles: checks roles
- Static site build → Content loader: loads content
- Static site build → Sourcing checks: validates content
- Static site build → Markdown renderer: renders text
- Static site build → Content components: renders components
- Static site build → Page templates: renders pages
- Content loader → Articles: reads
- Content loader → Source records: reads
- Content loader → People and roles: reads
- Content loader → Site configuration: reads
- Content loader → Sections and formats: reads
- Content loader → Pages, media, issues: reads
- Content loader → Numbers rail: reads
- Static site build → Generated static site: writes pages
- Generated static site → Site styling: loads styles
- Generated static site → Search and enhancements: loads script
- Static hosting → Generated static site: serves
- Readers → Static hosting: browse and search
