# no-country-simulation/s10_26_equipo_29 architecture

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

- Interactive diagram: https://gitdiagram.com/no-country-simulation/s10_26_equipo_29
- Repository: https://github.com/no-country-simulation/s10_26_equipo_29

## Overview

OpenBridge helps users discover open-source tools, inspect repository health and integration ideas, and get an AI-generated recommended stack from a business description. Its main user flow runs through the web interface to either the catalog API or the separate AI assistant; ingestion and AI enrichment keep the catalog data available. The README documents the broad cross-part boundaries. Some ingestion, repository, and UI implementation files were not sampled, so their internal connections are shown only where documented or indexed.

Main entry points: [`ai/service/app.py`](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/service/app.py) (Assistant service), [`frontend/src/App.jsx`](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/App.jsx) (Web app), [`ai/assistant.py`](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/assistant.py) (Stack generation), [`backend/app/api/routes/repos.py`](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/backend/app/api/routes/repos.py) (Catalog routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web experience"]
  node_webapp["Web app<br/>[App.jsx]"]
  node_catalogui["Catalog browser"]
  node_detailui["Tool details<br/>[ToolDetail.jsx]"]
  node_assistantui["Assistant flow"]
  node_catalogprovider["Catalog data"]
  node_cataloghttp["Catalog HTTP<br/>[catalogHttp.mjs]"]
  node_assistanthttp["Assistant HTTP<br/>[assistantHttp.mjs]"]
end

subgraph group_api["Catalog API"]
  node_backendapi["Catalog routes<br/>[repos.py]"]
  node_catalogservice["Catalog service<br/>[catalog.py]"]
  node_repository["Repository access<br/>[repos.py]"]
end

subgraph group_ai["AI discovery"]
  node_aiservice["Assistant service<br/>[app.py]"]
  node_assistantcore["Stack generation<br/>[assistant.py]"]
  node_semanticsearch["Semantic search<br/>[search.py]"]
  node_embeddings["Text embeddings<br/>[embeddings.py]"]
  node_llm["LLM provider<br/>[llm.py]"]
  node_enrichment["Catalog enrichment<br/>[enrich.py]"]
end

subgraph group_ingestion["Catalog ingestion"]
  node_extract["GitHub extraction<br/>[extract_github.py]"]
  node_transform["Catalog processing<br/>[transform.py]"]
  node_load["Catalog loading<br/>[load.py]"]
end

subgraph group_contracts["Shared data contracts"]
  node_repocontract["Repo contract<br/>[repo.py]"]
  node_assistantcontract["Assistant contract<br/>[assistant.py]"]
end

node_visitor(("Catalog user"))
node_catalogdb[("PostgreSQL catalog")]
node_github(("GitHub repositories"))

node_visitor -->|"uses"| node_webapp
node_webapp -->|"renders"| node_catalogui
node_webapp -->|"renders"| node_assistantui
node_webapp -->|"opens"| node_detailui
node_catalogui -.->|"reads data"| node_catalogprovider
node_catalogprovider -->|"fetches"| node_cataloghttp
node_cataloghttp -->|"HTTP requests"| node_backendapi
node_detailui -.->|"loads details"| node_backendapi
node_assistantui -->|"submits query"| node_assistanthttp
node_assistanthttp -->|"HTTP request"| node_aiservice
node_backendapi -->|"delegates to"| node_catalogservice
node_catalogservice -.->|"uses"| node_repository
node_repository -->|"reads"| node_catalogdb
node_github -.->|"provides repositories"| node_extract
node_extract -.->|"passes data"| node_transform
node_transform -.->|"passes records"| node_load
node_load -->|"writes"| node_catalogdb
node_catalogdb -->|"catalog data"| node_aiservice
node_aiservice -->|"calls"| node_assistantcore
node_assistantcore -->|"searches candidates"| node_semanticsearch
node_semanticsearch -->|"embeds text"| node_embeddings
node_assistantcore -->|"generates response"| node_llm
node_enrichment -->|"writes results"| node_catalogdb
node_aiservice -->|"reads catalog"| node_catalogdb
node_backendapi -->|"uses schema"| node_repocontract
node_aiservice -->|"validates requests"| node_assistantcontract
node_assistantcore -->|"uses repo data"| node_repocontract

click node_webapp "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/App.jsx"
click node_catalogui "https://github.com/no-country-simulation/s10_26_equipo_29/tree/main/frontend/src/features/catalog"
click node_detailui "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/ToolDetail.jsx"
click node_assistantui "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/features/assistant/useAssistantFlow.js"
click node_catalogprovider "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/data/CatalogProvider.jsx"
click node_cataloghttp "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/data/catalogHttp.mjs"
click node_assistanthttp "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/data/assistantHttp.mjs"
click node_backendapi "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/backend/app/api/routes/repos.py"
click node_catalogservice "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/backend/app/services/catalog.py"
click node_repository "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/backend/app/repositories/repos.py"
click node_aiservice "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/service/app.py"
click node_assistantcore "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/assistant.py"
click node_semanticsearch "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/search.py"
click node_embeddings "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/embeddings.py"
click node_llm "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/llm.py"
click node_enrichment "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/enrich.py"
click node_extract "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ingestion/src/extract_github.py"
click node_transform "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ingestion/src/transform.py"
click node_load "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ingestion/src/load.py"
click node_repocontract "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/shared/contracts/repo.py"
click node_assistantcontract "https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/shared/contracts/assistant.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_webapp,node_catalogui,node_detailui,node_assistantui,node_catalogprovider,node_cataloghttp,node_assistanthttp,node_visitor toneBlue
class node_backendapi,node_catalogservice,node_repository,node_catalogdb toneAmber
class node_aiservice,node_assistantcore,node_semanticsearch,node_embeddings,node_llm,node_enrichment toneMint
class node_extract,node_transform,node_load toneRose
class node_repocontract,node_assistantcontract,node_github toneIndigo
```

## Components

### Web experience

- [Web app](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Catalog browser](https://github.com/no-country-simulation/s10_26_equipo_29/tree/main/frontend/src/features/catalog): `frontend/src/features/catalog`
- [Tool details](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/ToolDetail.jsx): `frontend/src/ToolDetail.jsx`
- [Assistant flow](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/features/assistant/useAssistantFlow.js): `frontend/src/features/assistant/useAssistantFlow.js`
- [Catalog data](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/data/CatalogProvider.jsx): `frontend/src/data/CatalogProvider.jsx`
- [Catalog HTTP](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/data/catalogHttp.mjs): `frontend/src/data/catalogHttp.mjs`
- [Assistant HTTP](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/frontend/src/data/assistantHttp.mjs): `frontend/src/data/assistantHttp.mjs`

### Catalog API

- [Catalog routes](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/backend/app/api/routes/repos.py): `backend/app/api/routes/repos.py`
- [Catalog service](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/backend/app/services/catalog.py): `backend/app/services/catalog.py`
- [Repository access](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/backend/app/repositories/repos.py): `backend/app/repositories/repos.py`

### AI discovery

- [Assistant service](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/service/app.py): `ai/service/app.py`
- [Stack generation](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/assistant.py): `ai/assistant.py`
- [Semantic search](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/search.py): `ai/search.py`
- [Text embeddings](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/embeddings.py): `ai/embeddings.py`
- [LLM provider](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/llm.py): `ai/llm.py`
- [Catalog enrichment](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ai/enrich.py): `ai/enrich.py`

### Catalog ingestion

- [GitHub extraction](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ingestion/src/extract_github.py): `ingestion/src/extract_github.py`
- [Catalog processing](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ingestion/src/transform.py): `ingestion/src/transform.py`
- [Catalog loading](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/ingestion/src/load.py): `ingestion/src/load.py`

### Shared data contracts

- [Repo contract](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/shared/contracts/repo.py): `shared/contracts/repo.py`
- [Assistant contract](https://github.com/no-country-simulation/s10_26_equipo_29/blob/main/shared/contracts/assistant.py): `shared/contracts/assistant.py`

### Other components

- **Catalog user**
- **PostgreSQL catalog**
- **GitHub repositories**

## Connections

- Catalog user → Web app: uses
- Web app → Catalog browser: renders (evidence: `frontend/src/App.jsx`)
- Web app → Assistant flow: renders (evidence: `frontend/src/App.jsx`)
- Web app → Tool details: opens (evidence: `frontend/src/App.jsx`)
- Catalog browser → Catalog data: reads data (evidence: `frontend/src/features/catalog/useCatalogFilters.js`)
- Catalog data → Catalog HTTP: fetches (evidence: `frontend/src/data/CatalogProvider.jsx`)
- Catalog HTTP → Catalog routes: HTTP requests
- Tool details → Catalog routes: loads details
- Assistant flow → Assistant HTTP: submits query (evidence: `frontend/src/features/assistant/useAssistantFlow.js`)
- Assistant HTTP → Assistant service: HTTP request
- Catalog routes → Catalog service: delegates to (evidence: `backend/app/api/routes/repos.py`)
- Catalog service → Repository access: uses
- Repository access → PostgreSQL catalog: reads
- GitHub repositories → GitHub extraction: provides repositories
- GitHub extraction → Catalog processing: passes data
- Catalog processing → Catalog loading: passes records
- Catalog loading → PostgreSQL catalog: writes
- PostgreSQL catalog → Assistant service: catalog data
- Assistant service → Stack generation: calls (evidence: `ai/service/app.py`)
- Stack generation → Semantic search: searches candidates (evidence: `ai/assistant.py`)
- Semantic search → Text embeddings: embeds text (evidence: `ai/search.py`)
- Stack generation → LLM provider: generates response (evidence: `ai/assistant.py`)
- Catalog enrichment → PostgreSQL catalog: writes results
- Assistant service → PostgreSQL catalog: reads catalog (evidence: `ai/service/app.py`)
- Catalog routes → Repo contract: uses schema
- Assistant service → Assistant contract: validates requests (evidence: `ai/service/app.py`)
- Stack generation → Repo contract: uses repo data
