# holynova/concept-atlas architecture

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

- Interactive diagram: https://gitdiagram.com/holynova/concept-atlas
- Repository: https://github.com/holynova/concept-atlas

## Overview

Concept Atlas is a static, bilingual-described gallery of 60 illustrated concept explainers. The visitor workflow is to browse or search the collection, filter by category, open a full-resolution poster, consult its explanatory copy and source, then copy text or download PNGs. The README documents these capabilities; the sampled implementation excerpt covers content generation, not the browser runtime. Accordingly, the app and download features are represented from the file tree and README, while their internal call relationships are not asserted.

Main entry points: [`dist/app.js`](https://github.com/holynova/concept-atlas/blob/main/dist/app.js) (Concept gallery), [`source`](https://github.com/holynova/concept-atlas/tree/main/source) (Concept manifests), [`source/build-sports-cinema-manifest.mjs`](https://github.com/holynova/concept-atlas/blob/main/source/build-sports-cinema-manifest.mjs) (Sports and cinema concepts), [`source/build-manifest-31.mjs`](https://github.com/holynova/concept-atlas/blob/main/source/build-manifest-31.mjs) (Concepts 31–40)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_visitor["Visitor experience"]
  node_gallery["Concept gallery<br/>[app.js]"]
  node_zip_download["PNG bundle download<br/>[zip-store.js]"]
end

subgraph group_content["Concept content"]
  node_concept_data["Concept records<br/>[concepts.json]"]
  node_posters["Poster images"]
  node_thumbnails["Gallery thumbnails"]
  node_details["Reading images"]
  node_captions["Explanatory copy<br/>[captions.md]"]
  node_manifests["Concept manifests"]
end

subgraph group_authoring["Content authoring"]
  node_sports_cinema["Sports and cinema concepts"]
  node_manifest31["Concepts 31–40"]
  node_manifest51["Concepts 51–60"]
end

node_visitor(("Visitor"))

node_visitor -->|"browses"| node_gallery
node_gallery -.->|"presents records"| node_concept_data
node_gallery -.->|"shows previews"| node_thumbnails
node_gallery -.->|"opens full-size"| node_details
node_gallery -.->|"offers copy"| node_captions
node_gallery -.->|"offers originals"| node_posters
node_visitor -->|"downloads PNGs"| node_zip_download
node_sports_cinema -->|"writes entries"| node_manifests
node_manifest31 -->|"writes entries"| node_manifests
node_manifest51 -->|"writes entries"| node_manifests

click node_gallery "https://github.com/holynova/concept-atlas/blob/main/dist/app.js"
click node_concept_data "https://github.com/holynova/concept-atlas/blob/main/dist/concepts.json"
click node_posters "https://github.com/holynova/concept-atlas/tree/main/dist/assets/posters"
click node_thumbnails "https://github.com/holynova/concept-atlas/tree/main/dist/assets/thumbs"
click node_details "https://github.com/holynova/concept-atlas/tree/main/dist/assets/detail"
click node_captions "https://github.com/holynova/concept-atlas/blob/main/dist/captions.md"
click node_zip_download "https://github.com/holynova/concept-atlas/blob/main/dist/zip-store.js"
click node_sports_cinema "https://github.com/holynova/concept-atlas/blob/main/source/build-sports-cinema-manifest.mjs"
click node_manifest31 "https://github.com/holynova/concept-atlas/blob/main/source/build-manifest-31.mjs"
click node_manifest51 "https://github.com/holynova/concept-atlas/blob/main/source/create-51-manifest.py"
click node_manifests "https://github.com/holynova/concept-atlas/tree/main/source"

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_gallery,node_zip_download toneBlue
class node_concept_data,node_posters,node_thumbnails,node_details,node_captions,node_manifests toneAmber
class node_sports_cinema,node_manifest31,node_manifest51 toneMint
class node_visitor toneIndigo
```

## Components

### Visitor experience

- [Concept gallery](https://github.com/holynova/concept-atlas/blob/main/dist/app.js): `dist/app.js`
- [PNG bundle download](https://github.com/holynova/concept-atlas/blob/main/dist/zip-store.js): `dist/zip-store.js`

### Concept content

- [Concept records](https://github.com/holynova/concept-atlas/blob/main/dist/concepts.json): `dist/concepts.json`
- [Poster images](https://github.com/holynova/concept-atlas/tree/main/dist/assets/posters): `dist/assets/posters`
- [Gallery thumbnails](https://github.com/holynova/concept-atlas/tree/main/dist/assets/thumbs): `dist/assets/thumbs`
- [Reading images](https://github.com/holynova/concept-atlas/tree/main/dist/assets/detail): `dist/assets/detail`
- [Explanatory copy](https://github.com/holynova/concept-atlas/blob/main/dist/captions.md): `dist/captions.md`
- [Concept manifests](https://github.com/holynova/concept-atlas/tree/main/source): `source`

### Content authoring

- [Sports and cinema concepts](https://github.com/holynova/concept-atlas/blob/main/source/build-sports-cinema-manifest.mjs): `source/build-sports-cinema-manifest.mjs`
- [Concepts 31–40](https://github.com/holynova/concept-atlas/blob/main/source/build-manifest-31.mjs): `source/build-manifest-31.mjs`
- [Concepts 51–60](https://github.com/holynova/concept-atlas/blob/main/source/create-51-manifest.py): `source/create-51-manifest.py`

### Other components

- **Visitor**

## Connections

- Visitor → Concept gallery: browses (evidence: `README.md`)
- Concept gallery → Concept records: presents records
- Concept gallery → Gallery thumbnails: shows previews
- Concept gallery → Reading images: opens full-size
- Concept gallery → Explanatory copy: offers copy
- Concept gallery → Poster images: offers originals
- Visitor → PNG bundle download: downloads PNGs (evidence: `README.md`)
- Sports and cinema concepts → Concept manifests: writes entries (evidence: `source/build-sports-cinema-manifest.mjs`)
- Concepts 31–40 → Concept manifests: writes entries (evidence: `source/build-manifest-31.mjs`)
- Concepts 51–60 → Concept manifests: writes entries (evidence: `source/create-51-manifest.py`)
