# heyjunpenn/awesome-jev architecture

> Architecture diagram of the GitHub repository heyjunpenn/awesome-jev, 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/heyjunpenn/awesome-jev
- Repository: https://github.com/heyjunpenn/awesome-jev

## Overview

Awesome Jev is a multilingual catalog website for discovering and evaluating verified Jev-related open-source projects. Visitors browse the catalog by category, language, search terms, and recency; they can also explore curated real-world demos and project history. A separate sponsorship workflow supports checkout, payment confirmation, sponsor listings, and logo assets. The graph reflects documented site capabilities and sampled API behavior; some page-to-library wiring is inferred from route and module responsibilities, since those source files were not sampled.

Main entry points: [`src/pages/[locale]/index.astro`](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/index.astro) (Home and catalog pages), [`src/pages/api/sponsors/webhook.ts`](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/webhook.ts) (Payment webhook), [`src/lib/sponsor-logo.ts`](https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/sponsor-logo.ts) (Logo discovery and storage), [`src/pages/api/showcase/[locale].json.ts`](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/showcase/%5Blocale%5D.json.ts) (Showcase feed API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_discovery["Project discovery"]
  node_home["Home and catalog pages<br/>[index.astro]"]
  node_project_pages["Filtered project pages<br/>[&#91;filter&#93;.astro]"]
  node_catalog_api["Catalog JSON APIs<br/>[&#91;locale&#93;.json.ts]"]
  node_catalog_logic["Catalog data access<br/>[catalog.ts]"]
  node_catalog_data["Catalog navigation data"]
  node_changelog["Changelog pages<br/>[changelog.astro]"]
end

subgraph group_showcase["Showcase"]
  node_showcase_pages["Showcase pages<br/>[showcase.astro]"]
  node_showcase_category["Showcase category pages<br/>[&#91;category&#93;.astro]"]
  node_showcase_api["Showcase feed API<br/>[&#91;locale&#93;.json.ts]"]
  node_showcase_feed["Feed filtering and paging<br/>[showcase-feed.ts]"]
  node_showcase_manifest["Demo manifest<br/>[showcase.json]"]
  node_showcase_filter["Showcase filters<br/>[showcase-filter.ts]"]
end

subgraph group_sponsors["Sponsorship"]
  node_sponsor_pages["Sponsor pages<br/>[sponsors.astro]"]
  node_sponsor_api["Sponsor listing API<br/>[index.ts]"]
  node_checkout_api["Checkout API<br/>[checkout.ts]"]
  node_webhook["Payment webhook<br/>[webhook.ts]"]
  node_click_api["Sponsor click API<br/>[click.ts]"]
  node_sponsor_logic["Sponsor data and ranking<br/>[sponsors.ts]"]
  node_payment_logic["Payment verification<br/>[sponsor-payment.ts]"]
  node_logo_logic["Logo discovery and storage<br/>[sponsor-logo.ts]"]
  node_sponsor_db[("Sponsor database<br/>[0001_sponsors.sql]")]
  node_sponsor_assets[("Logo asset bucket")]
end

subgraph group_shared["Shared site services"]
  node_i18n["Locale messages and config<br/>[index.ts]"]
  node_star_api["Star history image API"]
end

node_visitor(("Visitor"))
node_stripe["Stripe"]
node_sponsor_site["Sponsor websites"]
node_star_service["Star history service"]

node_visitor -->|"browses"| node_home
node_visitor -->|"filters projects"| node_project_pages
node_visitor -->|"requests catalog"| node_catalog_api
node_home -->|"loads catalog"| node_catalog_logic
node_project_pages -->|"loads catalog"| node_catalog_logic
node_catalog_api -->|"loads and sorts"| node_catalog_logic
node_home -->|"reads navigation"| node_catalog_data
node_visitor -->|"reads updates"| node_changelog
node_visitor -->|"explores demos"| node_showcase_pages
node_visitor -->|"filters demos"| node_showcase_category
node_showcase_pages -->|"requests feed"| node_showcase_api
node_showcase_category -->|"requests feed"| node_showcase_api
node_showcase_api -->|"builds page"| node_showcase_feed
node_showcase_api -->|"reads videos"| node_showcase_manifest
node_showcase_feed -->|"filters results"| node_showcase_filter
node_visitor -->|"views sponsors"| node_sponsor_pages
node_sponsor_pages -->|"loads listings"| node_sponsor_api
node_sponsor_api -->|"gets ranked sponsors"| node_sponsor_logic
node_visitor -->|"starts sponsorship"| node_checkout_api
node_checkout_api -->|"creates checkout"| node_stripe
node_stripe -->|"posts payment event"| node_webhook
node_webhook -->|"verifies session"| node_payment_logic
node_webhook -->|"upserts sponsor"| node_sponsor_db
node_webhook -->|"ensures logo"| node_logo_logic
node_logo_logic -->|"reads and updates"| node_sponsor_db
node_logo_logic -->|"fetches icon"| node_sponsor_site
node_logo_logic -->|"stores image"| node_sponsor_assets
node_visitor -->|"clicks sponsor"| node_click_api
node_click_api -->|"records click"| node_sponsor_logic
node_visitor -->|"requests chart"| node_star_api
node_star_api -->|"fetches image"| node_star_service
node_home -->|"localizes interface"| node_i18n
node_showcase_pages -->|"localizes interface"| node_i18n

click node_home "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/index.astro"
click node_project_pages "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/projects/%5Bfilter%5D.astro"
click node_catalog_api "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/catalog/%5Blocale%5D.json.ts"
click node_catalog_logic "https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/catalog.ts"
click node_catalog_data "https://github.com/heyjunpenn/awesome-jev/blob/main/src/data/catalog-navigation.ts"
click node_changelog "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/changelog.astro"
click node_showcase_pages "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/showcase.astro"
click node_showcase_category "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/showcase/%5Bcategory%5D.astro"
click node_showcase_api "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/showcase/%5Blocale%5D.json.ts"
click node_showcase_feed "https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/showcase-feed.ts"
click node_showcase_manifest "https://github.com/heyjunpenn/awesome-jev/blob/main/src/data/showcase.json"
click node_showcase_filter "https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/showcase-filter.ts"
click node_sponsor_pages "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/sponsors.astro"
click node_sponsor_api "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/index.ts"
click node_checkout_api "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/checkout.ts"
click node_webhook "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/webhook.ts"
click node_click_api "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/click.ts"
click node_sponsor_logic "https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/sponsors.ts"
click node_payment_logic "https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/sponsor-payment.ts"
click node_logo_logic "https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/sponsor-logo.ts"
click node_sponsor_db "https://github.com/heyjunpenn/awesome-jev/blob/main/migrations/0001_sponsors.sql"
click node_i18n "https://github.com/heyjunpenn/awesome-jev/blob/main/src/i18n/index.ts"
click node_star_api "https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/star-history.png.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_home,node_project_pages,node_catalog_api,node_catalog_logic,node_catalog_data,node_changelog toneBlue
class node_showcase_pages,node_showcase_category,node_showcase_api,node_showcase_feed,node_showcase_manifest,node_showcase_filter toneAmber
class node_sponsor_pages,node_sponsor_api,node_checkout_api,node_webhook,node_click_api,node_sponsor_logic,node_payment_logic,node_logo_logic,node_sponsor_db,node_sponsor_assets toneMint
class node_i18n,node_star_api toneRose
class node_visitor,node_stripe,node_sponsor_site,node_star_service toneIndigo
```

## Components

### Project discovery

- [Home and catalog pages](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/index.astro): `src/pages/[locale]/index.astro`
- [Filtered project pages](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/projects/%5Bfilter%5D.astro): `src/pages/[locale]/projects/[filter].astro`
- [Catalog JSON APIs](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/catalog/%5Blocale%5D.json.ts): `src/pages/catalog/[locale].json.ts`
- [Catalog data access](https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/catalog.ts): `src/lib/catalog.ts`
- [Catalog navigation data](https://github.com/heyjunpenn/awesome-jev/blob/main/src/data/catalog-navigation.ts): `src/data/catalog-navigation.ts`
- [Changelog pages](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/changelog.astro): `src/pages/[locale]/changelog.astro`

### Showcase

- [Showcase pages](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/showcase.astro): `src/pages/[locale]/showcase.astro`
- [Showcase category pages](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/showcase/%5Bcategory%5D.astro): `src/pages/[locale]/showcase/[category].astro`
- [Showcase feed API](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/showcase/%5Blocale%5D.json.ts): `src/pages/api/showcase/[locale].json.ts`
- [Feed filtering and paging](https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/showcase-feed.ts): `src/lib/showcase-feed.ts`
- [Demo manifest](https://github.com/heyjunpenn/awesome-jev/blob/main/src/data/showcase.json): `src/data/showcase.json`
- [Showcase filters](https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/showcase-filter.ts): `src/lib/showcase-filter.ts`

### Sponsorship

- [Sponsor pages](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/%5Blocale%5D/sponsors.astro): `src/pages/[locale]/sponsors.astro`
- [Sponsor listing API](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/index.ts): `src/pages/api/sponsors/index.ts`
- [Checkout API](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/checkout.ts): `src/pages/api/sponsors/checkout.ts`
- [Payment webhook](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/webhook.ts): `src/pages/api/sponsors/webhook.ts`
- [Sponsor click API](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/sponsors/click.ts): `src/pages/api/sponsors/click.ts`
- [Sponsor data and ranking](https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/sponsors.ts): `src/lib/sponsors.ts`
- [Payment verification](https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/sponsor-payment.ts): `src/lib/sponsor-payment.ts`
- [Logo discovery and storage](https://github.com/heyjunpenn/awesome-jev/blob/main/src/lib/sponsor-logo.ts): `src/lib/sponsor-logo.ts`
- [Sponsor database](https://github.com/heyjunpenn/awesome-jev/blob/main/migrations/0001_sponsors.sql): `migrations/0001_sponsors.sql`
- **Logo asset bucket**

### Shared site services

- [Locale messages and config](https://github.com/heyjunpenn/awesome-jev/blob/main/src/i18n/index.ts): `src/i18n/index.ts`
- [Star history image API](https://github.com/heyjunpenn/awesome-jev/blob/main/src/pages/api/star-history.png.ts): `src/pages/api/star-history.png.ts`

### Other components

- **Visitor**
- **Stripe**
- **Sponsor websites**
- **Star history service**

## Connections

- Visitor → Home and catalog pages: browses
- Visitor → Filtered project pages: filters projects
- Visitor → Catalog JSON APIs: requests catalog
- Home and catalog pages → Catalog data access: loads catalog
- Filtered project pages → Catalog data access: loads catalog
- Catalog JSON APIs → Catalog data access: loads and sorts
- Home and catalog pages → Catalog navigation data: reads navigation
- Visitor → Changelog pages: reads updates
- Visitor → Showcase pages: explores demos
- Visitor → Showcase category pages: filters demos
- Showcase pages → Showcase feed API: requests feed
- Showcase category pages → Showcase feed API: requests feed
- Showcase feed API → Feed filtering and paging: builds page
- Showcase feed API → Demo manifest: reads videos
- Feed filtering and paging → Showcase filters: filters results
- Visitor → Sponsor pages: views sponsors
- Sponsor pages → Sponsor listing API: loads listings
- Sponsor listing API → Sponsor data and ranking: gets ranked sponsors
- Visitor → Checkout API: starts sponsorship
- Checkout API → Stripe: creates checkout
- Stripe → Payment webhook: posts payment event
- Payment webhook → Payment verification: verifies session
- Payment webhook → Sponsor database: upserts sponsor
- Payment webhook → Logo discovery and storage: ensures logo
- Logo discovery and storage → Sponsor database: reads and updates
- Logo discovery and storage → Sponsor websites: fetches icon
- Logo discovery and storage → Logo asset bucket: stores image
- Visitor → Sponsor click API: clicks sponsor
- Sponsor click API → Sponsor data and ranking: records click
- Visitor → Star history image API: requests chart
- Star history image API → Star history service: fetches image
- Home and catalog pages → Locale messages and config: localizes interface
- Showcase pages → Locale messages and config: localizes interface
