# albert-weasker/niubigeo architecture

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

- Interactive diagram: https://gitdiagram.com/albert-weasker/niubigeo
- Repository: https://github.com/albert-weasker/niubigeo

## Overview

NiubiGEO is a self-hosted AI-visibility research product: users configure a domain and models, run repeatable recognition or keyword measurements, and inspect answers, citations, and reports. Its product workflow is distinct from the legacy audit and monitoring services, which add scheduled baseline runs and change notifications. The graph preserves those branches and the provider/configuration layers. Some subsystem links are documented only at product level in the README; unsampled implementation details are not inferred.

Main entry points: [`src/product/recognition/recognition-service.ts`](https://github.com/albert-weasker/niubigeo/blob/main/src/product/recognition/recognition-service.ts) (AI Recognition), [`src/projects/project-service.ts`](https://github.com/albert-weasker/niubigeo/blob/main/src/projects/project-service.ts) (Audit Projects), [`src/monitoring/monitoring-service.ts`](https://github.com/albert-weasker/niubigeo/blob/main/src/monitoring/monitoring-service.ts) (Run Orchestration), [`src/product/measurements/measurement-service.ts`](https://github.com/albert-weasker/niubigeo/blob/main/src/product/measurements/measurement-service.ts) (Keyword Measurements)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_product["Project Setup"]
  node_workbench["Workbench UI"]
  node_projects["Product Projects<br/>[project-service.ts]"]
  node_configuration["Models and Baselines"]
end

subgraph group_research["Research Runs"]
  node_recognition["AI Recognition"]
  node_measurements["Keyword Measurements"]
end

subgraph group_analysis["Evidence and Reports"]
  node_reports["Research Reports<br/>[report-service.ts]"]
  node_observations["Run Observations"]
end

subgraph group_monitoring["Keyword Monitoring"]
  node_keyword_monitor["Keyword Monitoring"]
  node_keyword_history["Keyword History<br/>[keyword-history.ts]"]
  node_scheduling["Measurement Schedules"]
  node_legacy_projects["Audit Projects<br/>[project-service.ts]"]
  node_baselines["Monitoring Baselines"]
  node_monitoring_service["Run Orchestration"]
  node_notifications["Change Notifications"]
end

subgraph group_platform["Runtime Platform"]
  node_connections["Provider Connections"]
  node_providers["Model Providers<br/>[catalog.ts]"]
  node_legacy_store[("Project File Store<br/>[project-store.ts]")]
  node_product_server["Product Server<br/>[product-server.ts]"]
  node_server["Audit Server<br/>[server.ts]"]
end

node_user(("Researcher"))
node_external_models["Model APIs"]

node_user -->|"configures research"| node_workbench
node_workbench -.->|"sets up project"| node_projects
node_projects -.->|"configures models"| node_configuration
node_configuration -.->|"selects connections"| node_connections
node_recognition -->|"dispatches requests"| node_providers
node_recognition -->|"resolves custom models"| node_connections
node_providers -->|"queries models"| node_external_models
node_user -.->|"tests domain"| node_recognition
node_user -->|"tests keywords"| node_measurements
node_measurements -->|"uses recognition"| node_recognition
node_measurements -->|"uses baselines"| node_configuration
node_user -->|"inspects results"| node_reports
node_reports -->|"reads baselines"| node_configuration
node_reports -->|"reads answers"| node_recognition
node_user -->|"monitors keywords"| node_keyword_monitor
node_keyword_monitor -->|"records history"| node_keyword_history
node_keyword_monitor -->|"runs recognition"| node_recognition
node_user -->|"sets cadence"| node_scheduling
node_scheduling -->|"runs measurements"| node_measurements
node_user -.->|"manages audit project"| node_legacy_projects
node_legacy_projects -->|"builds baselines"| node_baselines
node_legacy_projects -->|"builds observations"| node_observations
node_legacy_projects -->|"persists project data"| node_legacy_store
node_monitoring_service -->|"loads and saves tasks"| node_legacy_store
node_monitoring_service -->|"runs baseline"| node_baselines
node_monitoring_service -->|"processes events"| node_notifications
node_server -->|"routes monitoring"| node_monitoring_service
node_product_server -.->|"serves project actions"| node_projects

click node_workbench "https://github.com/albert-weasker/niubigeo/blob/main/src/ui/product-project-app.ts"
click node_projects "https://github.com/albert-weasker/niubigeo/blob/main/src/product/projects/project-service.ts"
click node_configuration "https://github.com/albert-weasker/niubigeo/blob/main/src/product/configuration/baseline-service.ts"
click node_connections "https://github.com/albert-weasker/niubigeo/blob/main/src/product/connections/provider-connections.ts"
click node_recognition "https://github.com/albert-weasker/niubigeo/blob/main/src/product/recognition/recognition-service.ts"
click node_providers "https://github.com/albert-weasker/niubigeo/blob/main/src/providers/catalog.ts"
click node_measurements "https://github.com/albert-weasker/niubigeo/blob/main/src/product/measurements/measurement-service.ts"
click node_reports "https://github.com/albert-weasker/niubigeo/blob/main/src/product/reports/report-service.ts"
click node_keyword_monitor "https://github.com/albert-weasker/niubigeo/blob/main/src/product/keyword-monitor-service.ts"
click node_keyword_history "https://github.com/albert-weasker/niubigeo/blob/main/src/product/keyword-history.ts"
click node_scheduling "https://github.com/albert-weasker/niubigeo/blob/main/src/product/scheduling/schedule-service.ts"
click node_legacy_projects "https://github.com/albert-weasker/niubigeo/blob/main/src/projects/project-service.ts"
click node_baselines "https://github.com/albert-weasker/niubigeo/blob/main/src/baselines/baseline-builder.ts"
click node_monitoring_service "https://github.com/albert-weasker/niubigeo/blob/main/src/monitoring/monitoring-service.ts"
click node_notifications "https://github.com/albert-weasker/niubigeo/blob/main/src/monitoring/notification-service.ts"
click node_observations "https://github.com/albert-weasker/niubigeo/blob/main/src/observations/observation-builder.ts"
click node_legacy_store "https://github.com/albert-weasker/niubigeo/blob/main/src/projects/project-store.ts"
click node_product_server "https://github.com/albert-weasker/niubigeo/blob/main/src/product/product-server.ts"
click node_server "https://github.com/albert-weasker/niubigeo/blob/main/src/server.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_workbench,node_projects,node_configuration toneBlue
class node_recognition,node_measurements toneAmber
class node_reports,node_observations,node_external_models toneMint
class node_keyword_monitor,node_keyword_history,node_scheduling,node_legacy_projects,node_baselines,node_monitoring_service,node_notifications toneRose
class node_connections,node_providers,node_legacy_store,node_product_server,node_server,node_user toneIndigo
```

## Components

### Project Setup

- [Workbench UI](https://github.com/albert-weasker/niubigeo/blob/main/src/ui/product-project-app.ts): `src/ui/product-project-app.ts`
- [Product Projects](https://github.com/albert-weasker/niubigeo/blob/main/src/product/projects/project-service.ts): `src/product/projects/project-service.ts`
- [Models and Baselines](https://github.com/albert-weasker/niubigeo/blob/main/src/product/configuration/baseline-service.ts): `src/product/configuration/baseline-service.ts`

### Research Runs

- [AI Recognition](https://github.com/albert-weasker/niubigeo/blob/main/src/product/recognition/recognition-service.ts): `src/product/recognition/recognition-service.ts`
- [Keyword Measurements](https://github.com/albert-weasker/niubigeo/blob/main/src/product/measurements/measurement-service.ts): `src/product/measurements/measurement-service.ts`

### Evidence and Reports

- [Research Reports](https://github.com/albert-weasker/niubigeo/blob/main/src/product/reports/report-service.ts): `src/product/reports/report-service.ts`
- [Run Observations](https://github.com/albert-weasker/niubigeo/blob/main/src/observations/observation-builder.ts): `src/observations/observation-builder.ts`

### Keyword Monitoring

- [Keyword Monitoring](https://github.com/albert-weasker/niubigeo/blob/main/src/product/keyword-monitor-service.ts): `src/product/keyword-monitor-service.ts`
- [Keyword History](https://github.com/albert-weasker/niubigeo/blob/main/src/product/keyword-history.ts): `src/product/keyword-history.ts`
- [Measurement Schedules](https://github.com/albert-weasker/niubigeo/blob/main/src/product/scheduling/schedule-service.ts): `src/product/scheduling/schedule-service.ts`
- [Audit Projects](https://github.com/albert-weasker/niubigeo/blob/main/src/projects/project-service.ts): `src/projects/project-service.ts`
- [Monitoring Baselines](https://github.com/albert-weasker/niubigeo/blob/main/src/baselines/baseline-builder.ts): `src/baselines/baseline-builder.ts`
- [Run Orchestration](https://github.com/albert-weasker/niubigeo/blob/main/src/monitoring/monitoring-service.ts): `src/monitoring/monitoring-service.ts`
- [Change Notifications](https://github.com/albert-weasker/niubigeo/blob/main/src/monitoring/notification-service.ts): `src/monitoring/notification-service.ts`

### Runtime Platform

- [Provider Connections](https://github.com/albert-weasker/niubigeo/blob/main/src/product/connections/provider-connections.ts): `src/product/connections/provider-connections.ts`
- [Model Providers](https://github.com/albert-weasker/niubigeo/blob/main/src/providers/catalog.ts): `src/providers/catalog.ts`
- [Project File Store](https://github.com/albert-weasker/niubigeo/blob/main/src/projects/project-store.ts): `src/projects/project-store.ts`
- [Product Server](https://github.com/albert-weasker/niubigeo/blob/main/src/product/product-server.ts): `src/product/product-server.ts`
- [Audit Server](https://github.com/albert-weasker/niubigeo/blob/main/src/server.ts): `src/server.ts`

### Other components

- **Researcher**
- **Model APIs**

## Connections

- Researcher → Workbench UI: configures research (evidence: `README.md`)
- Workbench UI → Product Projects: sets up project
- Product Projects → Models and Baselines: configures models (evidence: `src/product/configuration/baseline-service.ts`)
- Models and Baselines → Provider Connections: selects connections
- AI Recognition → Model Providers: dispatches requests (evidence: `src/product/recognition/recognition-service.ts`)
- AI Recognition → Provider Connections: resolves custom models (evidence: `src/product/recognition/recognition-service.ts`)
- Model Providers → Model APIs: queries models (evidence: `README.md`)
- Researcher → AI Recognition: tests domain
- Researcher → Keyword Measurements: tests keywords (evidence: `README.md`)
- Keyword Measurements → AI Recognition: uses recognition (evidence: `src/product/measurements/measurement-service.ts`)
- Keyword Measurements → Models and Baselines: uses baselines (evidence: `src/product/measurements/measurement-service.ts`)
- Researcher → Research Reports: inspects results (evidence: `README.md`)
- Research Reports → Models and Baselines: reads baselines (evidence: `src/product/reports/report-service.ts`)
- Research Reports → AI Recognition: reads answers (evidence: `src/product/reports/report-service.ts`)
- Researcher → Keyword Monitoring: monitors keywords (evidence: `README.md`)
- Keyword Monitoring → Keyword History: records history (evidence: `src/product/keyword-monitor-service.ts`)
- Keyword Monitoring → AI Recognition: runs recognition (evidence: `src/product/keyword-monitor-service.ts`)
- Researcher → Measurement Schedules: sets cadence (evidence: `README.md`)
- Measurement Schedules → Keyword Measurements: runs measurements (evidence: `src/product/scheduling/schedule-service.ts`)
- Researcher → Audit Projects: manages audit project
- Audit Projects → Monitoring Baselines: builds baselines (evidence: `src/projects/project-service.ts`)
- Audit Projects → Run Observations: builds observations (evidence: `src/projects/project-service.ts`)
- Audit Projects → Project File Store: persists project data (evidence: `src/projects/project-store.ts`)
- Run Orchestration → Project File Store: loads and saves tasks (evidence: `src/monitoring/monitoring-service.ts`)
- Run Orchestration → Monitoring Baselines: runs baseline (evidence: `src/monitoring/monitoring-service.ts`)
- Run Orchestration → Change Notifications: processes events (evidence: `src/monitoring/monitoring-service.ts`)
- Audit Server → Run Orchestration: routes monitoring (evidence: `src/server.ts`)
- Product Server → Product Projects: serves project actions
