# haripriya24071/apiradar architecture

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

## Overview

ApiRadar monitors third-party API and SDK updates, turns detected changes into structured events, and presents impact and migration information to developers through a web dashboard and daily email digests. The principal workflow is source polling or OpenAPI comparison, change-event creation and notification, then stack-aware consumption. The graph includes the documented LLM analysis capability; its exact call wiring is not shown in the sampled source. Other unsampled subsystems are represented only where the README or file tree supports them.

Main entry points: [`backend/database.py`](https://github.com/haripriya24071/apiradar/blob/main/backend/database.py) (PostgreSQL), [`backend/tasks/scraper_tasks.py`](https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/scraper_tasks.py) (Scraper tasks), [`backend/main.py`](https://github.com/haripriya24071/apiradar/blob/main/backend/main.py) (FastAPI server), [`frontend/src/App.tsx`](https://github.com/haripriya24071/apiradar/blob/main/frontend/src/App.tsx) (Web app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_webapp["Web app<br/>[App.tsx]"]
  node_dashboard["Dashboard and feed"]
  node_stackui["Stack management<br/>[MyStack.tsx]"]
  node_browseui["API catalog<br/>[BrowseAPIs.tsx]"]
  node_hooks["Data hooks"]
  node_apiclient["API client<br/>[api.ts]"]
end

subgraph group_api["API and accounts"]
  node_backend["FastAPI server<br/>[main.py]"]
  node_auth["Authentication<br/>[auth.py]"]
  node_authservice["Token and password service<br/>[auth_service.py]"]
  node_stackroutes["Stack and package routes<br/>[stacks.py]"]
  node_catalogroutes["Catalog routes<br/>[apis.py]"]
  node_changeroutes["Change routes<br/>[changes.py]"]
end

subgraph group_monitor["Change monitoring"]
  node_rss["RSS scraper<br/>[rss_scraper.py]"]
  node_github["GitHub scraper<br/>[github_scraper.py]"]
  node_openapidiff["OpenAPI differ<br/>[openapi_differ.py]"]
  node_scrapertasks["Scraper tasks<br/>[scraper_tasks.py]"]
  node_difftasks["OpenAPI diff tasks<br/>[diff_tasks.py]"]
  node_llm["Change analysis<br/>[summarizer.py]"]
end

subgraph group_notify["Notifications and digests"]
  node_notifyservice["Notification service"]
  node_notifyroutes["Notification routes<br/>[notifications.py]"]
  node_emailtasks["Email digest task<br/>[email_tasks.py]"]
end

subgraph group_infra["Data and workers"]
  node_celery["Celery workers<br/>[celery_app.py]"]
  node_queue["Redis task queue"]
  node_db[("PostgreSQL<br/>[database.py]")]
end

node_developer(("Developer"))
node_sources["API update sources"]
node_resend["Resend email service"]
node_openai["OpenAI"]

node_developer -->|"uses"| node_webapp
node_webapp -->|"routes to"| node_dashboard
node_webapp -->|"routes to"| node_stackui
node_webapp -->|"routes to"| node_browseui
node_dashboard -->|"loads changes"| node_hooks
node_stackui -->|"manages stack"| node_hooks
node_browseui -->|"loads catalog"| node_hooks
node_hooks -->|"requests"| node_apiclient
node_apiclient -->|"calls REST API"| node_backend
node_backend -->|"dispatches"| node_auth
node_backend -->|"dispatches"| node_stackroutes
node_backend -->|"dispatches"| node_catalogroutes
node_backend -->|"dispatches"| node_changeroutes
node_auth -->|"hashes and signs"| node_authservice
node_auth -->|"reads and writes users"| node_db
node_stackroutes -->|"reads and writes stacks"| node_db
node_catalogroutes -->|"reads catalog"| node_db
node_changeroutes -->|"reads changes"| node_db
node_backend -->|"queues scrape task"| node_scrapertasks
node_scrapertasks -->|"dispatches tasks"| node_queue
node_queue -->|"delivers tasks"| node_celery
node_scrapertasks -->|"runs"| node_rss
node_scrapertasks -->|"runs"| node_github
node_rss -->|"fetches feeds"| node_sources
node_github -->|"fetches releases"| node_sources
node_scrapertasks -->|"reads catalog; writes events"| node_db
node_scrapertasks -->|"creates notifications"| node_notifyservice
node_difftasks -->|"compares specs"| node_openapidiff
node_openapidiff -->|"fetches specifications"| node_sources
node_difftasks -->|"reads catalog; writes events"| node_db
node_difftasks -->|"creates notifications"| node_notifyservice
node_notifyservice -->|"reads watches; writes notifications"| node_db
node_notifyroutes -->|"reads notifications"| node_db
node_emailtasks -->|"reads users, watches, changes"| node_db
node_emailtasks -->|"sends digest"| node_resend
node_scrapertasks -.->|"analyzes changes"| node_llm
node_llm -.->|"requests analysis"| node_openai

click node_webapp "https://github.com/haripriya24071/apiradar/blob/main/frontend/src/App.tsx"
click node_dashboard "https://github.com/haripriya24071/apiradar/tree/main/frontend/src/pages"
click node_stackui "https://github.com/haripriya24071/apiradar/blob/main/frontend/src/pages/MyStack.tsx"
click node_browseui "https://github.com/haripriya24071/apiradar/blob/main/frontend/src/pages/BrowseAPIs.tsx"
click node_hooks "https://github.com/haripriya24071/apiradar/tree/main/frontend/src/hooks"
click node_apiclient "https://github.com/haripriya24071/apiradar/blob/main/frontend/src/lib/api.ts"
click node_backend "https://github.com/haripriya24071/apiradar/blob/main/backend/main.py"
click node_auth "https://github.com/haripriya24071/apiradar/blob/main/backend/routers/auth.py"
click node_authservice "https://github.com/haripriya24071/apiradar/blob/main/backend/services/auth_service.py"
click node_stackroutes "https://github.com/haripriya24071/apiradar/blob/main/backend/routers/stacks.py"
click node_catalogroutes "https://github.com/haripriya24071/apiradar/blob/main/backend/routers/apis.py"
click node_changeroutes "https://github.com/haripriya24071/apiradar/blob/main/backend/routers/changes.py"
click node_rss "https://github.com/haripriya24071/apiradar/blob/main/backend/scrapers/rss_scraper.py"
click node_github "https://github.com/haripriya24071/apiradar/blob/main/backend/scrapers/github_scraper.py"
click node_openapidiff "https://github.com/haripriya24071/apiradar/blob/main/backend/diff/openapi_differ.py"
click node_scrapertasks "https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/scraper_tasks.py"
click node_difftasks "https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/diff_tasks.py"
click node_llm "https://github.com/haripriya24071/apiradar/blob/main/backend/llm/summarizer.py"
click node_notifyservice "https://github.com/haripriya24071/apiradar/blob/main/backend/services/notification_service.py"
click node_notifyroutes "https://github.com/haripriya24071/apiradar/blob/main/backend/routers/notifications.py"
click node_emailtasks "https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/email_tasks.py"
click node_celery "https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/celery_app.py"
click node_db "https://github.com/haripriya24071/apiradar/blob/main/backend/database.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_dashboard,node_stackui,node_browseui,node_hooks,node_apiclient toneBlue
class node_backend,node_auth,node_authservice,node_stackroutes,node_catalogroutes,node_changeroutes toneAmber
class node_rss,node_github,node_openapidiff,node_scrapertasks,node_difftasks,node_llm,node_sources toneMint
class node_notifyservice,node_notifyroutes,node_emailtasks toneRose
class node_celery,node_queue,node_db,node_developer,node_resend,node_openai toneIndigo
```

## Components

### Web application

- [Web app](https://github.com/haripriya24071/apiradar/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Dashboard and feed](https://github.com/haripriya24071/apiradar/tree/main/frontend/src/pages): `frontend/src/pages`
- [Stack management](https://github.com/haripriya24071/apiradar/blob/main/frontend/src/pages/MyStack.tsx): `frontend/src/pages/MyStack.tsx`
- [API catalog](https://github.com/haripriya24071/apiradar/blob/main/frontend/src/pages/BrowseAPIs.tsx): `frontend/src/pages/BrowseAPIs.tsx`
- [Data hooks](https://github.com/haripriya24071/apiradar/tree/main/frontend/src/hooks): `frontend/src/hooks`
- [API client](https://github.com/haripriya24071/apiradar/blob/main/frontend/src/lib/api.ts): `frontend/src/lib/api.ts`

### API and accounts

- [FastAPI server](https://github.com/haripriya24071/apiradar/blob/main/backend/main.py): `backend/main.py`
- [Authentication](https://github.com/haripriya24071/apiradar/blob/main/backend/routers/auth.py): `backend/routers/auth.py`
- [Token and password service](https://github.com/haripriya24071/apiradar/blob/main/backend/services/auth_service.py): `backend/services/auth_service.py`
- [Stack and package routes](https://github.com/haripriya24071/apiradar/blob/main/backend/routers/stacks.py): `backend/routers/stacks.py`
- [Catalog routes](https://github.com/haripriya24071/apiradar/blob/main/backend/routers/apis.py): `backend/routers/apis.py`
- [Change routes](https://github.com/haripriya24071/apiradar/blob/main/backend/routers/changes.py): `backend/routers/changes.py`

### Change monitoring

- [RSS scraper](https://github.com/haripriya24071/apiradar/blob/main/backend/scrapers/rss_scraper.py): `backend/scrapers/rss_scraper.py`
- [GitHub scraper](https://github.com/haripriya24071/apiradar/blob/main/backend/scrapers/github_scraper.py): `backend/scrapers/github_scraper.py`
- [OpenAPI differ](https://github.com/haripriya24071/apiradar/blob/main/backend/diff/openapi_differ.py): `backend/diff/openapi_differ.py`
- [Scraper tasks](https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/scraper_tasks.py): `backend/tasks/scraper_tasks.py`
- [OpenAPI diff tasks](https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/diff_tasks.py): `backend/tasks/diff_tasks.py`
- [Change analysis](https://github.com/haripriya24071/apiradar/blob/main/backend/llm/summarizer.py): `backend/llm/summarizer.py`

### Notifications and digests

- [Notification service](https://github.com/haripriya24071/apiradar/blob/main/backend/services/notification_service.py): `backend/services/notification_service.py`
- [Notification routes](https://github.com/haripriya24071/apiradar/blob/main/backend/routers/notifications.py): `backend/routers/notifications.py`
- [Email digest task](https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/email_tasks.py): `backend/tasks/email_tasks.py`

### Data and workers

- [Celery workers](https://github.com/haripriya24071/apiradar/blob/main/backend/tasks/celery_app.py): `backend/tasks/celery_app.py`
- **Redis task queue**
- [PostgreSQL](https://github.com/haripriya24071/apiradar/blob/main/backend/database.py): `backend/database.py`

### Other components

- **Developer**
- **API update sources**
- **Resend email service**
- **OpenAI**

## Connections

- Developer → Web app: uses
- Web app → Dashboard and feed: routes to
- Web app → Stack management: routes to
- Web app → API catalog: routes to
- Dashboard and feed → Data hooks: loads changes
- Stack management → Data hooks: manages stack
- API catalog → Data hooks: loads catalog
- Data hooks → API client: requests
- API client → FastAPI server: calls REST API
- FastAPI server → Authentication: dispatches
- FastAPI server → Stack and package routes: dispatches
- FastAPI server → Catalog routes: dispatches
- FastAPI server → Change routes: dispatches
- Authentication → Token and password service: hashes and signs
- Authentication → PostgreSQL: reads and writes users
- Stack and package routes → PostgreSQL: reads and writes stacks
- Catalog routes → PostgreSQL: reads catalog
- Change routes → PostgreSQL: reads changes
- FastAPI server → Scraper tasks: queues scrape task
- Scraper tasks → Redis task queue: dispatches tasks
- Redis task queue → Celery workers: delivers tasks
- Scraper tasks → RSS scraper: runs
- Scraper tasks → GitHub scraper: runs
- RSS scraper → API update sources: fetches feeds
- GitHub scraper → API update sources: fetches releases
- Scraper tasks → PostgreSQL: reads catalog; writes events
- Scraper tasks → Notification service: creates notifications
- OpenAPI diff tasks → OpenAPI differ: compares specs
- OpenAPI differ → API update sources: fetches specifications
- OpenAPI diff tasks → PostgreSQL: reads catalog; writes events
- OpenAPI diff tasks → Notification service: creates notifications
- Notification service → PostgreSQL: reads watches; writes notifications
- Notification routes → PostgreSQL: reads notifications
- Email digest task → PostgreSQL: reads users, watches, changes
- Email digest task → Resend email service: sends digest
- Scraper tasks → Change analysis: analyzes changes
- Change analysis → OpenAI: requests analysis
