# usn-library/urge architecture

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

## Overview

URGE is a browser-based research-dataset README generator. Researchers import existing documentation or repository metadata, complete a guided form, optionally check grammar, then download structured exports or send a README to a repository draft. The graph reflects the README’s documented capabilities and the sampled route, client, and statistics code; unsampled endpoint wiring is represented only where the README explicitly documents it.

Main entry points: [`static/dvurge.js`](https://github.com/usn-library/urge/blob/main/static/dvurge.js) (Form workflow), [`app.py`](https://github.com/usn-library/urge/blob/main/app.py) (Web routes), [`button_stats.py`](https://github.com/usn-library/urge/blob/main/button_stats.py) (Usage counters), [`templates/dataverse.html`](https://github.com/usn-library/urge/blob/main/templates/dataverse.html) (Guided form)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["README workflow"]
  node_guided_form["Guided form<br/>[dataverse.html]"]
  node_browser_workflow["Form workflow<br/>[dvurge.js]"]
  node_readme_content["README content<br/>[dvurge.js]"]
  node_grammar_check["Grammar check<br/>[dvurge.js]"]
  node_app_routes["Web routes<br/>[app.py]"]
end

subgraph group_imports["Metadata imports"]
  node_dmp_import["DMP import<br/>[dvurge.js]"]
  node_readme_json_import["README and JSON import<br/>[dvurge.js]"]
  node_dataverse_import["Dataverse import<br/>[app.py]"]
  node_figshare_import["Figshare import<br/>[app.py]"]
  node_zenodo_import["Zenodo import<br/>[app.py]"]
  node_orcid_lookup["ORCID lookup<br/>[app.py]"]
end

subgraph group_delivery["Exports and delivery"]
  node_readme_exports["README and JSON exports<br/>[dvurge.js]"]
  node_dataverse_send["Dataverse draft send<br/>[dvurge.js]"]
  node_figshare_send["Figshare draft send<br/>[app.py]"]
  node_qr_codes["QR codes<br/>[dvurge.js]"]
end

subgraph group_integrations["External services"]
  node_dataverse_service{{"Dataverse"}}
  node_figshare_service{{"Figshare"}}
  node_zenodo_service{{"Zenodo"}}
  node_orcid_service{{"ORCID"}}
  node_languagetool{{"LanguageTool"}}
end

subgraph group_analytics["Anonymous statistics"]
  node_anonymous_stats["Usage counters<br/>[button_stats.py]"]
  node_page_counter["Page counter<br/>[view_counter.py]"]
  node_stats_database[("Statistics database<br/>[view_counter.py]")]
end

node_researcher(("Researcher"))

node_researcher -->|"uses"| node_guided_form
node_guided_form -->|"submits fields"| node_browser_workflow
node_browser_workflow -->|"imports plan"| node_dmp_import
node_browser_workflow -->|"loads documentation"| node_readme_json_import
node_browser_workflow -->|"requests metadata"| node_dataverse_import
node_browser_workflow -->|"requests metadata"| node_figshare_import
node_browser_workflow -->|"requests metadata"| node_zenodo_import
node_browser_workflow -->|"requests lookup"| node_orcid_lookup
node_dataverse_import -->|"calls routes"| node_app_routes
node_figshare_import -->|"calls routes"| node_app_routes
node_zenodo_import -->|"calls routes"| node_app_routes
node_orcid_lookup -->|"calls route"| node_app_routes
node_app_routes -->|"fetches records"| node_dataverse_service
node_app_routes -->|"fetches articles"| node_figshare_service
node_app_routes -->|"fetches depositions"| node_zenodo_service
node_app_routes -->|"searches"| node_orcid_service
node_dataverse_import -->|"returns metadata"| node_browser_workflow
node_figshare_import -->|"returns metadata"| node_browser_workflow
node_zenodo_import -->|"returns metadata"| node_browser_workflow
node_browser_workflow -->|"builds content"| node_readme_content
node_readme_content -.->|"checks description"| node_grammar_check
node_grammar_check -.->|"checks grammar"| node_languagetool
node_browser_workflow -->|"generates files"| node_readme_exports
node_readme_content -->|"formats fields"| node_readme_exports
node_readme_content -->|"sends README"| node_dataverse_send
node_dataverse_send -->|"uploads draft file"| node_dataverse_service
node_browser_workflow -->|"requests upload"| node_figshare_send
node_figshare_send -->|"calls route"| node_app_routes
node_app_routes -->|"uploads draft file"| node_figshare_service
node_readme_content -->|"renders codes"| node_qr_codes
node_app_routes -->|"records button click"| node_anonymous_stats
node_app_routes -->|"increments page view"| node_page_counter
node_anonymous_stats -->|"writes counts"| node_stats_database
node_page_counter -->|"updates count"| node_stats_database
node_researcher -->|"clicks export"| node_anonymous_stats

click node_guided_form "https://github.com/usn-library/urge/blob/main/templates/dataverse.html"
click node_browser_workflow "https://github.com/usn-library/urge/blob/main/static/dvurge.js"
click node_readme_content "https://github.com/usn-library/urge/blob/main/static/dvurge.js"
click node_grammar_check "https://github.com/usn-library/urge/blob/main/static/dvurge.js"
click node_app_routes "https://github.com/usn-library/urge/blob/main/app.py"
click node_dmp_import "https://github.com/usn-library/urge/blob/main/static/dvurge.js"
click node_readme_json_import "https://github.com/usn-library/urge/blob/main/static/dvurge.js"
click node_dataverse_import "https://github.com/usn-library/urge/blob/main/app.py"
click node_figshare_import "https://github.com/usn-library/urge/blob/main/app.py"
click node_zenodo_import "https://github.com/usn-library/urge/blob/main/app.py"
click node_orcid_lookup "https://github.com/usn-library/urge/blob/main/app.py"
click node_readme_exports "https://github.com/usn-library/urge/blob/main/static/dvurge.js"
click node_dataverse_send "https://github.com/usn-library/urge/blob/main/static/dvurge.js"
click node_figshare_send "https://github.com/usn-library/urge/blob/main/app.py"
click node_qr_codes "https://github.com/usn-library/urge/blob/main/static/dvurge.js"
click node_anonymous_stats "https://github.com/usn-library/urge/blob/main/button_stats.py"
click node_page_counter "https://github.com/usn-library/urge/blob/main/view_counter.py"
click node_stats_database "https://github.com/usn-library/urge/blob/main/view_counter.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_guided_form,node_browser_workflow,node_readme_content,node_grammar_check,node_app_routes toneBlue
class node_dmp_import,node_readme_json_import,node_dataverse_import,node_figshare_import,node_zenodo_import,node_orcid_lookup toneAmber
class node_readme_exports,node_dataverse_send,node_figshare_send,node_qr_codes toneMint
class node_dataverse_service,node_figshare_service,node_zenodo_service,node_orcid_service,node_languagetool toneRose
class node_anonymous_stats,node_page_counter,node_stats_database,node_researcher toneIndigo
```

## Components

### README workflow

- [Guided form](https://github.com/usn-library/urge/blob/main/templates/dataverse.html): `templates/dataverse.html`
- [Form workflow](https://github.com/usn-library/urge/blob/main/static/dvurge.js): `static/dvurge.js`
- [README content](https://github.com/usn-library/urge/blob/main/static/dvurge.js): `static/dvurge.js`
- [Grammar check](https://github.com/usn-library/urge/blob/main/static/dvurge.js): `static/dvurge.js`
- [Web routes](https://github.com/usn-library/urge/blob/main/app.py): `app.py`

### Metadata imports

- [DMP import](https://github.com/usn-library/urge/blob/main/static/dvurge.js): `static/dvurge.js`
- [README and JSON import](https://github.com/usn-library/urge/blob/main/static/dvurge.js): `static/dvurge.js`
- [Dataverse import](https://github.com/usn-library/urge/blob/main/app.py): `app.py`
- [Figshare import](https://github.com/usn-library/urge/blob/main/app.py): `app.py`
- [Zenodo import](https://github.com/usn-library/urge/blob/main/app.py): `app.py`
- [ORCID lookup](https://github.com/usn-library/urge/blob/main/app.py): `app.py`

### Exports and delivery

- [README and JSON exports](https://github.com/usn-library/urge/blob/main/static/dvurge.js): `static/dvurge.js`
- [Dataverse draft send](https://github.com/usn-library/urge/blob/main/static/dvurge.js): `static/dvurge.js`
- [Figshare draft send](https://github.com/usn-library/urge/blob/main/app.py): `app.py`
- [QR codes](https://github.com/usn-library/urge/blob/main/static/dvurge.js): `static/dvurge.js`

### External services

- **Dataverse**
- **Figshare**
- **Zenodo**
- **ORCID**
- **LanguageTool**

### Anonymous statistics

- [Usage counters](https://github.com/usn-library/urge/blob/main/button_stats.py): `button_stats.py`
- [Page counter](https://github.com/usn-library/urge/blob/main/view_counter.py): `view_counter.py`
- [Statistics database](https://github.com/usn-library/urge/blob/main/view_counter.py): `view_counter.py`

### Other components

- **Researcher**

## Connections

- Researcher → Guided form: uses
- Guided form → Form workflow: submits fields
- Form workflow → DMP import: imports plan
- Form workflow → README and JSON import: loads documentation
- Form workflow → Dataverse import: requests metadata
- Form workflow → Figshare import: requests metadata
- Form workflow → Zenodo import: requests metadata
- Form workflow → ORCID lookup: requests lookup
- Dataverse import → Web routes: calls routes
- Figshare import → Web routes: calls routes
- Zenodo import → Web routes: calls routes
- ORCID lookup → Web routes: calls route
- Web routes → Dataverse: fetches records
- Web routes → Figshare: fetches articles
- Web routes → Zenodo: fetches depositions
- Web routes → ORCID: searches
- Dataverse import → Form workflow: returns metadata
- Figshare import → Form workflow: returns metadata
- Zenodo import → Form workflow: returns metadata
- Form workflow → README content: builds content
- README content → Grammar check: checks description
- Grammar check → LanguageTool: checks grammar
- Form workflow → README and JSON exports: generates files
- README content → README and JSON exports: formats fields
- README content → Dataverse draft send: sends README
- Dataverse draft send → Dataverse: uploads draft file
- Form workflow → Figshare draft send: requests upload
- Figshare draft send → Web routes: calls route
- Web routes → Figshare: uploads draft file
- README content → QR codes: renders codes
- Web routes → Usage counters: records button click
- Web routes → Page counter: increments page view
- Usage counters → Statistics database: writes counts
- Page counter → Statistics database: updates count
- Researcher → Usage counters: clicks export
