# osscv/cvtoolkit architecture

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

## Overview

CV Toolkit is an Android app that presents a large collection of network diagnostics, developer utilities, device tools, and regional open-data screens. The user opens the app, selects a tool from its main screen, and works with that tool’s results; most utilities are local, while network lookups and tests require connectivity. The graph groups the many individual screens into product capabilities and shows the documented navigation entry points. Sampled code confirms IP lookup’s API calls and speed-test target persistence, but not all screen-to-data wiring, so uncertain links are omitted.

Main entry points: [`app/src/main/java/cv/toolkit/navigation/NavGraph.kt`](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/navigation/NavGraph.kt) (Navigation graph), [`app/src/main/java/cv/toolkit/repository/IpLookupRepository.kt`](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/repository/IpLookupRepository.kt) (IP lookup repository), [`app/src/main/java/cv/toolkit/MainActivity.kt`](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/MainActivity.kt) (Main activity), [`app/src/main/java/cv/toolkit/screens/MainScreen.kt`](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/MainScreen.kt) (Tool catalogue)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App shell"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_navigation["Navigation graph<br/>[NavGraph.kt]"]
  node_home["Tool catalogue<br/>[MainScreen.kt]"]
end

subgraph group_network["Network diagnostics"]
  node_iplookup["IP lookup<br/>[IpLookupScreen.kt]"]
  node_traceroute["Traceroute"]
  node_speedtest["Speed testing<br/>[SpeedTestScreen.kt]"]
  node_networktools["Network tools"]
  node_iprepo["IP lookup repository"]
  node_ipregistry["IP registry API<br/>[IpRegistryApi.kt]"]
  node_cloudflare["Cloudflare IP API<br/>[CloudflareIpApi.kt]"]
  node_iphistory[("IP history store")]
  node_speedtargets["Speed-test targets"]
end

subgraph group_utilities["Developer utilities"]
  node_encoding["Encoding tools<br/>[Base64Screen.kt]"]
  node_filetools["File and media tools<br/>[PdfMergeScreen.kt]"]
  node_texttools["Text and code tools"]
end

subgraph group_data["Open data"]
  node_mydata["Malaysia data"]
  node_sgdata["Singapore data<br/>[SgWeatherScreen.kt]"]
  node_iedata["Ireland data"]
end

subgraph group_device["Device tools"]
  node_devicetools["Device information"]
  node_storage["Storage analysis"]
end

node_user(("App user"))

node_user -->|"opens"| node_activity
node_activity -->|"starts navigation"| node_navigation
node_navigation -->|"dispatches home"| node_home
node_user -->|"chooses tool"| node_home
node_navigation -->|"dispatches route"| node_iplookup
node_navigation -->|"dispatches route"| node_traceroute
node_navigation -->|"dispatches route"| node_speedtest
node_navigation -->|"dispatches routes"| node_networktools
node_navigation -->|"dispatches route"| node_encoding
node_navigation -->|"dispatches route"| node_filetools
node_navigation -->|"dispatches route"| node_texttools
node_navigation -->|"dispatches routes"| node_mydata
node_navigation -->|"dispatches route"| node_sgdata
node_navigation -->|"dispatches route"| node_iedata
node_navigation -->|"dispatches route"| node_devicetools
node_navigation -->|"dispatches route"| node_storage
node_iprepo -->|"requests IP details"| node_ipregistry
node_iprepo -->|"fetches detected IP"| node_cloudflare

click node_activity "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/MainActivity.kt"
click node_navigation "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/navigation/NavGraph.kt"
click node_home "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/MainScreen.kt"
click node_iplookup "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/IpLookupScreen.kt"
click node_traceroute "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/TracerouteScreen.kt"
click node_speedtest "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/SpeedTestScreen.kt"
click node_networktools "https://github.com/osscv/cvtoolkit/tree/main/app/src/main/java/cv/toolkit/screens"
click node_iprepo "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/repository/IpLookupRepository.kt"
click node_ipregistry "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/network/IpRegistryApi.kt"
click node_cloudflare "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/network/CloudflareIpApi.kt"
click node_iphistory "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/data/IpHistoryManager.kt"
click node_speedtargets "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/data/SpeedTestTargetsManager.kt"
click node_encoding "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/Base64Screen.kt"
click node_filetools "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/PdfMergeScreen.kt"
click node_texttools "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/MarkdownPreviewScreen.kt"
click node_mydata "https://github.com/osscv/cvtoolkit/tree/main/app/src/main/java/cv/toolkit/screens"
click node_sgdata "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/SgWeatherScreen.kt"
click node_iedata "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/IeDataCatalogueScreen.kt"
click node_devicetools "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/DeviceInfoScreen.kt"
click node_storage "https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/StorageAnalyzerScreen.kt"

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_activity,node_navigation,node_home,node_user toneBlue
class node_iplookup,node_traceroute,node_speedtest,node_networktools,node_iprepo,node_ipregistry,node_cloudflare,node_iphistory,node_speedtargets toneAmber
class node_encoding,node_filetools,node_texttools toneMint
class node_mydata,node_sgdata,node_iedata toneRose
class node_devicetools,node_storage toneIndigo
```

## Components

### App shell

- [Main activity](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/MainActivity.kt): `app/src/main/java/cv/toolkit/MainActivity.kt`
- [Navigation graph](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/navigation/NavGraph.kt): `app/src/main/java/cv/toolkit/navigation/NavGraph.kt`
- [Tool catalogue](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/MainScreen.kt): `app/src/main/java/cv/toolkit/screens/MainScreen.kt`

### Network diagnostics

- [IP lookup](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/IpLookupScreen.kt): `app/src/main/java/cv/toolkit/screens/IpLookupScreen.kt`
- [Traceroute](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/TracerouteScreen.kt): `app/src/main/java/cv/toolkit/screens/TracerouteScreen.kt`
- [Speed testing](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/SpeedTestScreen.kt): `app/src/main/java/cv/toolkit/screens/SpeedTestScreen.kt`
- [Network tools](https://github.com/osscv/cvtoolkit/tree/main/app/src/main/java/cv/toolkit/screens): `app/src/main/java/cv/toolkit/screens`
- [IP lookup repository](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/repository/IpLookupRepository.kt): `app/src/main/java/cv/toolkit/repository/IpLookupRepository.kt`
- [IP registry API](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/network/IpRegistryApi.kt): `app/src/main/java/cv/toolkit/network/IpRegistryApi.kt`
- [Cloudflare IP API](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/network/CloudflareIpApi.kt): `app/src/main/java/cv/toolkit/network/CloudflareIpApi.kt`
- [IP history store](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/data/IpHistoryManager.kt): `app/src/main/java/cv/toolkit/data/IpHistoryManager.kt`
- [Speed-test targets](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/data/SpeedTestTargetsManager.kt): `app/src/main/java/cv/toolkit/data/SpeedTestTargetsManager.kt`

### Developer utilities

- [Encoding tools](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/Base64Screen.kt): `app/src/main/java/cv/toolkit/screens/Base64Screen.kt`
- [File and media tools](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/PdfMergeScreen.kt): `app/src/main/java/cv/toolkit/screens/PdfMergeScreen.kt`
- [Text and code tools](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/MarkdownPreviewScreen.kt): `app/src/main/java/cv/toolkit/screens/MarkdownPreviewScreen.kt`

### Open data

- [Malaysia data](https://github.com/osscv/cvtoolkit/tree/main/app/src/main/java/cv/toolkit/screens): `app/src/main/java/cv/toolkit/screens`
- [Singapore data](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/SgWeatherScreen.kt): `app/src/main/java/cv/toolkit/screens/SgWeatherScreen.kt`
- [Ireland data](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/IeDataCatalogueScreen.kt): `app/src/main/java/cv/toolkit/screens/IeDataCatalogueScreen.kt`

### Device tools

- [Device information](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/DeviceInfoScreen.kt): `app/src/main/java/cv/toolkit/screens/DeviceInfoScreen.kt`
- [Storage analysis](https://github.com/osscv/cvtoolkit/blob/main/app/src/main/java/cv/toolkit/screens/StorageAnalyzerScreen.kt): `app/src/main/java/cv/toolkit/screens/StorageAnalyzerScreen.kt`

### Other components

- **App user**

## Connections

- App user → Main activity: opens
- Main activity → Navigation graph: starts navigation
- Navigation graph → Tool catalogue: dispatches home
- App user → Tool catalogue: chooses tool
- Navigation graph → IP lookup: dispatches route
- Navigation graph → Traceroute: dispatches route
- Navigation graph → Speed testing: dispatches route
- Navigation graph → Network tools: dispatches routes
- Navigation graph → Encoding tools: dispatches route
- Navigation graph → File and media tools: dispatches route
- Navigation graph → Text and code tools: dispatches route
- Navigation graph → Malaysia data: dispatches routes
- Navigation graph → Singapore data: dispatches route
- Navigation graph → Ireland data: dispatches route
- Navigation graph → Device information: dispatches route
- Navigation graph → Storage analysis: dispatches route
- IP lookup repository → IP registry API: requests IP details
- IP lookup repository → Cloudflare IP API: fetches detected IP
