# govindaa-sharma/radarr architecture

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

- Interactive diagram: https://gitdiagram.com/govindaa-sharma/radarr
- Repository: https://github.com/govindaa-sharma/radarr

## Overview

Radarr’s main workflow is scheduled competitor-page monitoring: scrape configured sources, compare with prior snapshots, analyze changes into structured signals, then generate and deliver a daily brief. PostgreSQL holds snapshots and analyses; Qdrant supports semantic retrieval for dashboard chat. The dashboard also reads PostgreSQL for charts and signal listings. The graph wiring is based on the sampled pipeline and agent code; scheduler and crawler internals are represented only where the README documents their roles.

Main entry points: [`pipeline/graph.py`](https://github.com/govindaa-sharma/radarr/blob/main/pipeline/graph.py) (LangGraph pipeline), [`memory/postgres.py`](https://github.com/govindaa-sharma/radarr/blob/main/memory/postgres.py) (PostgreSQL memory), [`agents/analyst.py`](https://github.com/govindaa-sharma/radarr/blob/main/agents/analyst.py) (Structured analyst), [`agents/crawler.py`](https://github.com/govindaa-sharma/radarr/blob/main/agents/crawler.py) (Crawler agent)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orchestration["Pipeline orchestration"]
  node_scheduler["Nightly scheduler<br/>[scheduler.py]"]
  node_pipeline["LangGraph pipeline<br/>[graph.py]"]
end

subgraph group_intelligence["Intelligence processing"]
  node_competitors["Tracked URLs<br/>[competitors.yaml]"]
  node_crawler["Crawler agent<br/>[crawler.py]"]
  node_scraper["Hybrid scraper<br/>[scraper.py]"]
  node_diffing["Change detection<br/>[diffing.py]"]
  node_analyst["Structured analyst<br/>[analyst.py]"]
  node_llm_config["LLM selection<br/>[llm.py]"]
end

subgraph group_memory["Memory and retrieval"]
  node_postgres[("PostgreSQL memory<br/>[postgres.py]")]
  node_qdrant[("Qdrant memory<br/>[vector_store.py]")]
end

subgraph group_consumption["Briefs and dashboard"]
  node_summarizer["Brief summarizer<br/>[summarizer.py]"]
  node_delivery["Slack delivery<br/>[delivery.py]"]
  node_dashboard["Intelligence dashboard<br/>[app.py]"]
end

node_sources(("Competitor sources"))
node_slack(("Slack"))
node_local_llm(("Local or hosted LLM"))

node_scheduler -->|"starts"| node_pipeline
node_pipeline -->|"initializes"| node_postgres
node_pipeline -->|"initializes"| node_qdrant
node_pipeline -->|"runs"| node_crawler
node_competitors -->|"configures"| node_crawler
node_sources -->|"serves pages"| node_scraper
node_crawler -->|"requests pages"| node_scraper
node_crawler -->|"passes page text"| node_analyst
node_analyst -->|"reads snapshots"| node_postgres
node_analyst -->|"computes changes"| node_diffing
node_analyst -->|"requests analyst model"| node_llm_config
node_analyst -->|"saves analyses"| node_postgres
node_pipeline -->|"generates brief"| node_summarizer
node_summarizer -->|"reads recent analyses"| node_postgres
node_summarizer -->|"requests brief model"| node_llm_config
node_llm_config -->|"invokes"| node_local_llm
node_pipeline -->|"reads delivery signals"| node_postgres
node_pipeline -->|"sends brief"| node_delivery
node_delivery -.->|"posts webhook"| node_slack
node_dashboard -->|"queries signals"| node_postgres
node_dashboard -->|"searches analyses"| node_qdrant
node_dashboard -->|"requests chat model"| node_llm_config

click node_scheduler "https://github.com/govindaa-sharma/radarr/blob/main/pipeline/scheduler.py"
click node_pipeline "https://github.com/govindaa-sharma/radarr/blob/main/pipeline/graph.py"
click node_competitors "https://github.com/govindaa-sharma/radarr/blob/main/config/competitors.yaml"
click node_crawler "https://github.com/govindaa-sharma/radarr/blob/main/agents/crawler.py"
click node_scraper "https://github.com/govindaa-sharma/radarr/blob/main/tools/scraper.py"
click node_diffing "https://github.com/govindaa-sharma/radarr/blob/main/tools/diffing.py"
click node_analyst "https://github.com/govindaa-sharma/radarr/blob/main/agents/analyst.py"
click node_llm_config "https://github.com/govindaa-sharma/radarr/blob/main/config/llm.py"
click node_postgres "https://github.com/govindaa-sharma/radarr/blob/main/memory/postgres.py"
click node_qdrant "https://github.com/govindaa-sharma/radarr/blob/main/memory/vector_store.py"
click node_summarizer "https://github.com/govindaa-sharma/radarr/blob/main/agents/summarizer.py"
click node_delivery "https://github.com/govindaa-sharma/radarr/blob/main/tools/delivery.py"
click node_dashboard "https://github.com/govindaa-sharma/radarr/blob/main/dashboard/app.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_scheduler,node_pipeline toneBlue
class node_competitors,node_crawler,node_scraper,node_diffing,node_analyst,node_llm_config toneAmber
class node_postgres,node_qdrant toneMint
class node_summarizer,node_delivery,node_dashboard toneRose
class node_sources,node_slack,node_local_llm toneIndigo
```

## Components

### Pipeline orchestration

- [Nightly scheduler](https://github.com/govindaa-sharma/radarr/blob/main/pipeline/scheduler.py): `pipeline/scheduler.py`
- [LangGraph pipeline](https://github.com/govindaa-sharma/radarr/blob/main/pipeline/graph.py): `pipeline/graph.py`

### Intelligence processing

- [Tracked URLs](https://github.com/govindaa-sharma/radarr/blob/main/config/competitors.yaml): `config/competitors.yaml`
- [Crawler agent](https://github.com/govindaa-sharma/radarr/blob/main/agents/crawler.py): `agents/crawler.py`
- [Hybrid scraper](https://github.com/govindaa-sharma/radarr/blob/main/tools/scraper.py): `tools/scraper.py`
- [Change detection](https://github.com/govindaa-sharma/radarr/blob/main/tools/diffing.py): `tools/diffing.py`
- [Structured analyst](https://github.com/govindaa-sharma/radarr/blob/main/agents/analyst.py): `agents/analyst.py`
- [LLM selection](https://github.com/govindaa-sharma/radarr/blob/main/config/llm.py): `config/llm.py`

### Memory and retrieval

- [PostgreSQL memory](https://github.com/govindaa-sharma/radarr/blob/main/memory/postgres.py): `memory/postgres.py`
- [Qdrant memory](https://github.com/govindaa-sharma/radarr/blob/main/memory/vector_store.py): `memory/vector_store.py`

### Briefs and dashboard

- [Brief summarizer](https://github.com/govindaa-sharma/radarr/blob/main/agents/summarizer.py): `agents/summarizer.py`
- [Slack delivery](https://github.com/govindaa-sharma/radarr/blob/main/tools/delivery.py): `tools/delivery.py`
- [Intelligence dashboard](https://github.com/govindaa-sharma/radarr/blob/main/dashboard/app.py): `dashboard/app.py`

### Other components

- **Competitor sources**
- **Slack**
- **Local or hosted LLM**

## Connections

- Nightly scheduler → LangGraph pipeline: starts
- LangGraph pipeline → PostgreSQL memory: initializes
- LangGraph pipeline → Qdrant memory: initializes
- LangGraph pipeline → Crawler agent: runs
- Tracked URLs → Crawler agent: configures
- Competitor sources → Hybrid scraper: serves pages
- Crawler agent → Hybrid scraper: requests pages
- Crawler agent → Structured analyst: passes page text
- Structured analyst → PostgreSQL memory: reads snapshots
- Structured analyst → Change detection: computes changes
- Structured analyst → LLM selection: requests analyst model
- Structured analyst → PostgreSQL memory: saves analyses
- LangGraph pipeline → Brief summarizer: generates brief
- Brief summarizer → PostgreSQL memory: reads recent analyses
- Brief summarizer → LLM selection: requests brief model
- LLM selection → Local or hosted LLM: invokes
- LangGraph pipeline → PostgreSQL memory: reads delivery signals
- LangGraph pipeline → Slack delivery: sends brief
- Slack delivery → Slack: posts webhook
- Intelligence dashboard → PostgreSQL memory: queries signals
- Intelligence dashboard → Qdrant memory: searches analyses
- Intelligence dashboard → LLM selection: requests chat model
