# vingturbo/sitehub architecture

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

- Interactive diagram: https://gitdiagram.com/vingturbo/sitehub
- Repository: https://github.com/vingturbo/sitehub

## Overview

SiteHub is a static directory of independent websites, with GitHub Issues as its submission interface and GitHub Actions automating intake. The documented workflow runs from issue submission through parsing, validation and repository storage, then to visitor-facing cards. The frontend also renders site theme colors and rotating quotes. README documentation supports the main data and hosting relationships, but no source excerpts were available to verify finer implementation details or every integration call.

Main entry points: [`index.html`](https://github.com/vingturbo/sitehub/blob/main/index.html) (Directory page), [`.github/workflows/add_website.yml`](https://github.com/vingturbo/sitehub/blob/main/.github/workflows/add_website.yml) (Issue automation), [`add_website_for_issue.sh`](https://github.com/vingturbo/sitehub/blob/main/add_website_for_issue.sh) (Issue processor), [`data`](https://github.com/vingturbo/sitehub/tree/main/data) (Site records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_intake["Submission automation"]
  node_form["Submission form"]
  node_workflow["Issue automation<br/>[add_website.yml]"]
  node_processor["Issue processor"]
end

subgraph group_catalog["Site catalog"]
  node_catalog_data[("Site records")]
  node_site_index["Site index<br/>[index.txt]"]
end

subgraph group_frontend["Visitor experience"]
  node_home["Directory page<br/>[index.html]"]
  node_quotes["Rotating quotes<br/>[say.txt]"]
end

node_submitter(("Website submitter"))
node_issue["GitHub Issues"]
node_visitor(("Site visitor"))
node_cloudflare["Cloudflare Pages"]
node_github_pages["GitHub Pages"]

node_submitter -->|"submits"| node_issue
node_issue -->|"uses template"| node_form
node_issue -->|"triggers"| node_workflow
node_workflow -->|"runs"| node_processor
node_processor -->|"writes records"| node_catalog_data
node_workflow -->|"replies"| node_issue
node_home -->|"reads index"| node_site_index
node_home -->|"reads records"| node_catalog_data
node_home -->|"reads quotes"| node_quotes
node_visitor -->|"views"| node_home
node_cloudflare -->|"serves page"| node_visitor
node_github_pages -->|"serves page"| node_visitor

click node_form "https://github.com/vingturbo/sitehub/blob/main/.github/ISSUE_TEMPLATE/Apply_your_website_links.yml"
click node_workflow "https://github.com/vingturbo/sitehub/blob/main/.github/workflows/add_website.yml"
click node_processor "https://github.com/vingturbo/sitehub/blob/main/add_website_for_issue.sh"
click node_catalog_data "https://github.com/vingturbo/sitehub/tree/main/data"
click node_site_index "https://github.com/vingturbo/sitehub/blob/main/index.txt"
click node_home "https://github.com/vingturbo/sitehub/blob/main/index.html"
click node_quotes "https://github.com/vingturbo/sitehub/blob/main/say.txt"

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_form,node_workflow,node_processor toneBlue
class node_catalog_data,node_site_index toneAmber
class node_home,node_quotes toneMint
class node_submitter,node_issue,node_visitor,node_cloudflare,node_github_pages toneIndigo
```

## Components

### Submission automation

- [Submission form](https://github.com/vingturbo/sitehub/blob/main/.github/ISSUE_TEMPLATE/Apply_your_website_links.yml): `.github/ISSUE_TEMPLATE/Apply_your_website_links.yml`
- [Issue automation](https://github.com/vingturbo/sitehub/blob/main/.github/workflows/add_website.yml): `.github/workflows/add_website.yml`
- [Issue processor](https://github.com/vingturbo/sitehub/blob/main/add_website_for_issue.sh): `add_website_for_issue.sh`

### Site catalog

- [Site records](https://github.com/vingturbo/sitehub/tree/main/data): `data`
- [Site index](https://github.com/vingturbo/sitehub/blob/main/index.txt): `index.txt`

### Visitor experience

- [Directory page](https://github.com/vingturbo/sitehub/blob/main/index.html): `index.html`
- [Rotating quotes](https://github.com/vingturbo/sitehub/blob/main/say.txt): `say.txt`

### Other components

- **Website submitter**
- **GitHub Issues**
- **Site visitor**
- **Cloudflare Pages**
- **GitHub Pages**

## Connections

- Website submitter → GitHub Issues: submits
- GitHub Issues → Submission form: uses template
- GitHub Issues → Issue automation: triggers
- Issue automation → Issue processor: runs
- Issue processor → Site records: writes records
- Issue automation → GitHub Issues: replies
- Directory page → Site index: reads index
- Directory page → Site records: reads records
- Directory page → Rotating quotes: reads quotes
- Site visitor → Directory page: views
- Cloudflare Pages → Site visitor: serves page
- GitHub Pages → Site visitor: serves page
