# nvbangg/awesome-morphe architecture

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

- Interactive diagram: https://gitdiagram.com/nvbangg/awesome-morphe
- Repository: https://github.com/nvbangg/awesome-morphe

## Overview

Awesome Morphe aggregates community patch-bundle sources into an interactive catalog, with automated discovery, availability checks, bundle parsing, app metadata, and update summaries. The main data workflow is visible across the fetch and updater scripts; the README also documents the website, unavailable-bundle filtering, legacy .mpp fallback, and Telegram notifications. Source-index references establish several script dependencies, but many website and parser internals were not sampled, so those connections are left out or marked unverified.

Main entry points: [`scripts/bundle-parser/src/main/kotlin/me/jman/parser/Main.kt`](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser/Main.kt) (Bundle Parser), [`scripts/update.py`](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/update.py) (Update Orchestrator), [`scripts/fetch.py`](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/fetch.py) (Bundle Fetch), [`scripts/discover.py`](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/discover.py) (Project Discovery)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Source Discovery"]
  node_discover["Project Discovery<br/>[discover.py]"]
  node_find_projects["Find Projects<br/>[find_projects.py]"]
  node_readme_audit["README Audit<br/>[audit_readme.py]"]
end

subgraph group_ingestion["Bundle Ingestion"]
  node_fetch["Bundle Fetch<br/>[fetch.py]"]
  node_parser["Bundle Parser<br/>[Main.kt]"]
  node_morphe_parser["Morphe Parser"]
  node_legacy_parser["Legacy Parsers"]
  node_extract_cache["Extraction Cache<br/>[ExtractionCache.kt]"]
end

subgraph group_data["Catalog Data"]
  node_update["Update Orchestrator<br/>[update.py]"]
  node_local_data["Catalog Assembly<br/>[local_data.py]"]
  node_app_metadata["App Metadata<br/>[gplay_scrape.py]"]
  node_repos["Repository Access<br/>[repositories.py]"]
end

subgraph group_web["Catalog Website"]
  node_catalog_ui["Bundle Catalog"]
  node_test_bundle["Test Bundle Preview"]
end

subgraph group_updates["Updates"]
  node_whats_new["What's New<br/>[whats_new.py]"]
  node_telegram["Telegram Notifications<br/>[telegram.py]"]
end

node_curator(("Catalog Maintainer"))
node_web_visitor(("Catalog Visitor"))
node_hosting["Git Hosting"]
node_web_user(("Website User"))

node_curator -.->|"initiates discovery"| node_discover
node_discover -.->|"runs discovery"| node_find_projects
node_find_projects -->|"uses repository helpers"| node_repos
node_curator -.->|"refreshes bundles"| node_fetch
node_fetch -->|"runs parser"| node_parser
node_parser -->|"uses cache"| node_extract_cache
node_parser -.->|"selects parser"| node_morphe_parser
node_parser -.->|"falls back"| node_legacy_parser
node_fetch -->|"fetches bundles"| node_hosting
node_update -->|"assembles catalog"| node_local_data
node_update -->|"refreshes app data"| node_app_metadata
node_update -->|"generates updates"| node_whats_new
node_local_data -->|"uses repository helpers"| node_repos
node_web_user -->|"explores bundles"| node_catalog_ui
node_web_user -->|"previews bundle"| node_test_bundle
node_test_bundle -->|"fetches repository"| node_hosting
node_whats_new -.->|"notifies updates"| node_telegram

click node_discover "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/discover.py"
click node_find_projects "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/discovery/find_projects.py"
click node_readme_audit "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/discovery/audit_readme.py"
click node_fetch "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/fetch.py"
click node_parser "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser/Main.kt"
click node_morphe_parser "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser/MorphePatchParser.kt"
click node_legacy_parser "https://github.com/nvbangg/awesome-morphe/tree/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser"
click node_extract_cache "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser/ExtractionCache.kt"
click node_update "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/update.py"
click node_local_data "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/updater/local_data.py"
click node_app_metadata "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/updater/gplay_scrape.py"
click node_repos "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/common/repositories.py"
click node_catalog_ui "https://github.com/nvbangg/awesome-morphe/tree/main/web/src/features/catalog"
click node_test_bundle "https://github.com/nvbangg/awesome-morphe/blob/main/web/src/features/test-bundle/TestBundleController.tsx"
click node_whats_new "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/updater/whats_new.py"
click node_telegram "https://github.com/nvbangg/awesome-morphe/blob/main/scripts/telegram.py"

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_discover,node_find_projects,node_readme_audit,node_web_user toneBlue
class node_fetch,node_parser,node_morphe_parser,node_legacy_parser,node_extract_cache toneAmber
class node_update,node_local_data,node_app_metadata,node_repos toneMint
class node_catalog_ui,node_test_bundle toneRose
class node_whats_new,node_telegram,node_curator,node_web_visitor,node_hosting toneIndigo
```

## Components

### Source Discovery

- [Project Discovery](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/discover.py): `scripts/discover.py`
- [Find Projects](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/discovery/find_projects.py): `scripts/discovery/find_projects.py`
- [README Audit](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/discovery/audit_readme.py): `scripts/discovery/audit_readme.py`

### Bundle Ingestion

- [Bundle Fetch](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/fetch.py): `scripts/fetch.py`
- [Bundle Parser](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser/Main.kt): `scripts/bundle-parser/src/main/kotlin/me/jman/parser/Main.kt`
- [Morphe Parser](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser/MorphePatchParser.kt): `scripts/bundle-parser/src/main/kotlin/me/jman/parser/MorphePatchParser.kt`
- [Legacy Parsers](https://github.com/nvbangg/awesome-morphe/tree/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser): `scripts/bundle-parser/src/main/kotlin/me/jman/parser`
- [Extraction Cache](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/bundle-parser/src/main/kotlin/me/jman/parser/ExtractionCache.kt): `scripts/bundle-parser/src/main/kotlin/me/jman/parser/ExtractionCache.kt`

### Catalog Data

- [Update Orchestrator](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/update.py): `scripts/update.py`
- [Catalog Assembly](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/updater/local_data.py): `scripts/updater/local_data.py`
- [App Metadata](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/updater/gplay_scrape.py): `scripts/updater/gplay_scrape.py`
- [Repository Access](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/common/repositories.py): `scripts/common/repositories.py`

### Catalog Website

- [Bundle Catalog](https://github.com/nvbangg/awesome-morphe/tree/main/web/src/features/catalog): `web/src/features/catalog`
- [Test Bundle Preview](https://github.com/nvbangg/awesome-morphe/blob/main/web/src/features/test-bundle/TestBundleController.tsx): `web/src/features/test-bundle/TestBundleController.tsx`

### Updates

- [What's New](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/updater/whats_new.py): `scripts/updater/whats_new.py`
- [Telegram Notifications](https://github.com/nvbangg/awesome-morphe/blob/main/scripts/telegram.py): `scripts/telegram.py`

### Other components

- **Catalog Maintainer**
- **Catalog Visitor**
- **Git Hosting**
- **Website User**

## Connections

- Catalog Maintainer → Project Discovery: initiates discovery (evidence: `README.md`)
- Project Discovery → Find Projects: runs discovery (evidence: `scripts/discovery/find_projects.py`)
- Find Projects → Repository Access: uses repository helpers (evidence: `scripts/discovery/find_projects.py`)
- Catalog Maintainer → Bundle Fetch: refreshes bundles (evidence: `scripts/fetch.py`)
- Bundle Fetch → Bundle Parser: runs parser (evidence: `scripts/fetch.py`)
- Bundle Parser → Extraction Cache: uses cache (evidence: `scripts/bundle-parser/src/main/kotlin/me/jman/parser/Main.kt`)
- Bundle Parser → Morphe Parser: selects parser
- Bundle Parser → Legacy Parsers: falls back (evidence: `README.md`)
- Bundle Fetch → Git Hosting: fetches bundles (evidence: `scripts/fetch.py`)
- Update Orchestrator → Catalog Assembly: assembles catalog (evidence: `scripts/update.py`)
- Update Orchestrator → App Metadata: refreshes app data (evidence: `scripts/update.py`)
- Update Orchestrator → What's New: generates updates (evidence: `scripts/update.py`)
- Catalog Assembly → Repository Access: uses repository helpers (evidence: `scripts/updater/local_data.py`)
- Website User → Bundle Catalog: explores bundles (evidence: `README.md`)
- Website User → Test Bundle Preview: previews bundle (evidence: `web/src/features/test-bundle/TestBundleController.tsx`)
- Test Bundle Preview → Git Hosting: fetches repository (evidence: `web/src/features/test-bundle/TestBundleController.tsx`)
- What's New → Telegram Notifications: notifies updates (evidence: `README.md`)
