# quirky0name/csd-g4t1 architecture

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

- Interactive diagram: https://gitdiagram.com/quirky0name/csd-g4t1
- Repository: https://github.com/quirky0name/csd-g4t1

## Overview

This is a research-paper tracking and change-review system: researchers track papers, Updating polls scholarly sources and detects changes, Research Evaluation investigates and assesses them, and Storage Management persists the resulting snapshots, alerts, reports, and documents for researcher review. The frontend exposes folders, citation sources, and alerts. The README describes REST communication among services; the supplied source excerpts establish selected storage and client behavior, but not every route or orchestration call, so uncertain links are omitted.

Main entry points: [`storage/src/main/java/com/g4t1/storage/StorageApplication.java`](https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/StorageApplication.java) (Storage API), [`backend/src/research_evaluation/storage.py`](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/storage.py) (Storage client), [`frontend/csd-frontend-vite/src/App.tsx`](https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/App.tsx) (React application), [`backend/src/research_evaluation/evaluate.py`](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/evaluate.py) (Change evaluation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Researcher interface"]
  node_frontend["React application<br/>[App.tsx]"]
  node_folders["Paper folders<br/>[Folders.tsx]"]
  node_citations["Citation sources"]
  node_alerts_ui["Alert review<br/>[Alerts.tsx]"]
end

subgraph group_storage["Storage management"]
  node_storage_app["Storage API"]
  node_paper_service["Tracked papers<br/>[PaperService.java]"]
  node_research_papers["Research papers"]
  node_snapshots["Snapshot history"]
  node_alerts["Alerts<br/>[AlertService.java]"]
  node_reports["Reports<br/>[ReportService.java]"]
  node_documents["Report documents"]
  node_storage_db[("Persistent records")]
end

subgraph group_updating["Change detection"]
  node_updating_main["Polling service<br/>[main.py]"]
  node_poll["Poll and compare<br/>[poll.py]"]
  node_sources["Metadata sources<br/>[sources.py]"]
  node_updating_client["Storage client<br/>[storage.py]"]
end

subgraph group_evaluation["Evaluation workflow"]
  node_evaluation_main["Evaluation API<br/>[main.py]"]
  node_evaluate["Change evaluation<br/>[evaluate.py]"]
  node_investigate["Change investigation<br/>[investigate.py]"]
  node_impact["Impact assessment<br/>[assess.py]"]
  node_evaluation_client["Storage client<br/>[storage.py]"]
end

subgraph group_integrations["External services"]
  node_crossref["Crossref"]
  node_europepmc["Europe PMC"]
  node_gemini["Gemini model"]
end

node_researcher(("Researcher"))

node_researcher -->|"uses"| node_frontend
node_frontend -->|"routes"| node_folders
node_frontend -->|"routes"| node_citations
node_frontend -->|"routes"| node_alerts_ui
node_frontend -->|"REST requests"| node_storage_app
node_storage_app -->|"dispatches"| node_paper_service
node_storage_app -->|"dispatches"| node_research_papers
node_storage_app -->|"dispatches"| node_snapshots
node_storage_app -->|"dispatches"| node_alerts
node_storage_app -->|"dispatches"| node_reports
node_storage_app -->|"dispatches"| node_documents
node_paper_service -->|"persists"| node_storage_db
node_research_papers -->|"persists"| node_storage_db
node_snapshots -->|"reads and writes"| node_storage_db
node_alerts -->|"reads and writes"| node_storage_db
node_reports -->|"reads and writes"| node_storage_db
node_documents -->|"reads and writes"| node_storage_db
node_updating_main -->|"runs polls"| node_poll
node_poll -->|"fetches metadata"| node_sources
node_poll -->|"reads and writes"| node_updating_client
node_updating_client -->|"REST requests"| node_storage_app
node_sources -->|"queries"| node_crossref
node_evaluation_main -->|"dispatches"| node_evaluate
node_evaluate -->|"reads snapshots"| node_evaluation_client
node_evaluate -->|"stores alerts"| node_evaluation_client
node_evaluate -->|"investigates reports"| node_investigate
node_investigate -->|"reads and stores documents"| node_evaluation_client
node_investigate -->|"retrieves records"| node_crossref
node_investigate -->|"retrieves notices"| node_europepmc
node_evaluate -->|"assesses reports"| node_impact
node_impact -->|"reads report inputs"| node_evaluation_client
node_impact -->|"stores assessment"| node_evaluation_client
node_evaluation_client -->|"REST requests"| node_storage_app
node_impact -->|"requests assessment"| node_gemini

click node_frontend "https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/App.tsx"
click node_folders "https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/pages/Folders.tsx"
click node_citations "https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/pages/CitationSources.tsx"
click node_alerts_ui "https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/pages/Alerts.tsx"
click node_storage_app "https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/StorageApplication.java"
click node_paper_service "https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/paper/PaperService.java"
click node_research_papers "https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/research/ResearchPaperService.java"
click node_snapshots "https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/snapshot/SnapshotService.java"
click node_alerts "https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/alert/AlertService.java"
click node_reports "https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/report/ReportService.java"
click node_documents "https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/report/ReportDocumentService.java"
click node_updating_main "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/updating/main.py"
click node_poll "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/updating/poll.py"
click node_sources "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/updating/sources.py"
click node_updating_client "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/updating/storage.py"
click node_evaluation_main "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/main.py"
click node_evaluate "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/evaluate.py"
click node_investigate "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/investigation/investigate.py"
click node_impact "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/impact/assess.py"
click node_evaluation_client "https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/storage.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_frontend,node_folders,node_citations,node_alerts_ui toneBlue
class node_storage_app,node_paper_service,node_research_papers,node_snapshots,node_alerts,node_reports,node_documents,node_storage_db toneAmber
class node_updating_main,node_poll,node_sources,node_updating_client toneMint
class node_evaluation_main,node_evaluate,node_investigate,node_impact,node_evaluation_client toneRose
class node_crossref,node_europepmc,node_gemini,node_researcher toneIndigo
```

## Components

### Researcher interface

- [React application](https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/App.tsx): `frontend/csd-frontend-vite/src/App.tsx`
- [Paper folders](https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/pages/Folders.tsx): `frontend/csd-frontend-vite/src/pages/Folders.tsx`
- [Citation sources](https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/pages/CitationSources.tsx): `frontend/csd-frontend-vite/src/pages/CitationSources.tsx`
- [Alert review](https://github.com/quirky0name/csd-g4t1/blob/main/frontend/csd-frontend-vite/src/pages/Alerts.tsx): `frontend/csd-frontend-vite/src/pages/Alerts.tsx`

### Storage management

- [Storage API](https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/StorageApplication.java): `storage/src/main/java/com/g4t1/storage/StorageApplication.java`
- [Tracked papers](https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/paper/PaperService.java): `storage/src/main/java/com/g4t1/storage/paper/PaperService.java`
- [Research papers](https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/research/ResearchPaperService.java): `storage/src/main/java/com/g4t1/storage/research/ResearchPaperService.java`
- [Snapshot history](https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/snapshot/SnapshotService.java): `storage/src/main/java/com/g4t1/storage/snapshot/SnapshotService.java`
- [Alerts](https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/alert/AlertService.java): `storage/src/main/java/com/g4t1/storage/alert/AlertService.java`
- [Reports](https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/report/ReportService.java): `storage/src/main/java/com/g4t1/storage/report/ReportService.java`
- [Report documents](https://github.com/quirky0name/csd-g4t1/blob/main/storage/src/main/java/com/g4t1/storage/report/ReportDocumentService.java): `storage/src/main/java/com/g4t1/storage/report/ReportDocumentService.java`
- **Persistent records**

### Change detection

- [Polling service](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/updating/main.py): `backend/src/updating/main.py`
- [Poll and compare](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/updating/poll.py): `backend/src/updating/poll.py`
- [Metadata sources](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/updating/sources.py): `backend/src/updating/sources.py`
- [Storage client](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/updating/storage.py): `backend/src/updating/storage.py`

### Evaluation workflow

- [Evaluation API](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/main.py): `backend/src/research_evaluation/main.py`
- [Change evaluation](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/evaluate.py): `backend/src/research_evaluation/evaluate.py`
- [Change investigation](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/investigation/investigate.py): `backend/src/research_evaluation/investigation/investigate.py`
- [Impact assessment](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/impact/assess.py): `backend/src/research_evaluation/impact/assess.py`
- [Storage client](https://github.com/quirky0name/csd-g4t1/blob/main/backend/src/research_evaluation/storage.py): `backend/src/research_evaluation/storage.py`

### External services

- **Crossref**
- **Europe PMC**
- **Gemini model**

### Other components

- **Researcher**

## Connections

- Researcher → React application: uses
- React application → Paper folders: routes
- React application → Citation sources: routes
- React application → Alert review: routes
- React application → Storage API: REST requests
- Storage API → Tracked papers: dispatches
- Storage API → Research papers: dispatches
- Storage API → Snapshot history: dispatches
- Storage API → Alerts: dispatches
- Storage API → Reports: dispatches
- Storage API → Report documents: dispatches
- Tracked papers → Persistent records: persists
- Research papers → Persistent records: persists
- Snapshot history → Persistent records: reads and writes
- Alerts → Persistent records: reads and writes
- Reports → Persistent records: reads and writes
- Report documents → Persistent records: reads and writes
- Polling service → Poll and compare: runs polls
- Poll and compare → Metadata sources: fetches metadata
- Poll and compare → Storage client: reads and writes
- Storage client → Storage API: REST requests
- Metadata sources → Crossref: queries
- Evaluation API → Change evaluation: dispatches
- Change evaluation → Storage client: reads snapshots
- Change evaluation → Storage client: stores alerts
- Change evaluation → Change investigation: investigates reports
- Change investigation → Storage client: reads and stores documents
- Change investigation → Crossref: retrieves records
- Change investigation → Europe PMC: retrieves notices
- Change evaluation → Impact assessment: assesses reports
- Impact assessment → Storage client: reads report inputs
- Impact assessment → Storage client: stores assessment
- Storage client → Storage API: REST requests
- Impact assessment → Gemini model: requests assessment
