# ryxan/toolstack-android architecture

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

## Overview

Industrial Utility is an Android collection of practical workshop and trade tools. Users enter through the activity’s navigation and choose a tool, then work in its screen; the repository tree shows distinct calculator, lookup, and conversion capabilities. The sampled code confirms bearing lookup from bundled catalogs, persistent preferences, shortcut routing, and purchase verification. Most tool ViewModels and navigation destinations were not sampled, so uncertain links between those layers are omitted.

Main entry points: [`app/src/main/java/com/toolstack/io/MainActivity.kt`](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/MainActivity.kt) (Main activity), [`app/src/main/java/com/toolstack/io/data/billing/BillingRepository.kt`](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/billing/BillingRepository.kt) (Billing repository), [`app/src/main/java/com/toolstack/io/ui/bearings/BearingsScreen.kt`](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/bearings/BearingsScreen.kt) (Bearing lookup), [`app/src/main/java/com/toolstack/io/data/api/BillingVerificationApi.kt`](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/api/BillingVerificationApi.kt) (Verification API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and navigation"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_home["Tool home<br/>[HomeScreen.kt]"]
end

subgraph group_tools["Trade tools"]
  node_calculator["Calculator"]
  node_calcengine["Calculator engine"]
  node_bearings["Bearing lookup<br/>[BearingsScreen.kt]"]
  node_conduit["Conduit bends"]
  node_conduitcalc["Bend calculator"]
  node_recipe["Recipe scaler"]
  node_recipecalc["Scaling logic"]
  node_ratiomix["Ratio mix<br/>[RatioMixScreen.kt]"]
  node_sae["SAE metric<br/>[SaeMetricScreen.kt]"]
  node_saedata["SAE metric data"]
  node_taps["Taps and drills"]
  node_units["Unit converter"]
  node_unitdata["Conversion data"]
  node_wrench["Wrench fastener"]
  node_sprayer["Sprayer<br/>[SprayerScreen.kt]"]
end

subgraph group_data["Data and preferences"]
  node_bearingrepo["Bearing catalog"]
  node_preferences[("User preferences")]
end

subgraph group_access["Shortcuts and billing"]
  node_shortcuts["Shortcut handling"]
  node_paywall["Shortcut paywall"]
  node_billing["Billing repository"]
  node_verifyapi["Verification API"]
end

node_user(("User"))
node_play["Google Play"]
node_backend["Verification backend"]

node_user -->|"launches"| node_activity
node_activity -->|"navigates"| node_home
node_activity -->|"dispatches routes"| node_shortcuts
node_user -->|"uses"| node_calculator
node_user -->|"uses"| node_bearings
node_bearings -->|"searches"| node_bearingrepo
node_user -->|"uses"| node_conduit
node_user -->|"uses"| node_recipe
node_user -->|"uses"| node_ratiomix
node_user -->|"uses"| node_sae
node_user -->|"uses"| node_taps
node_user -->|"uses"| node_units
node_user -->|"uses"| node_wrench
node_user -->|"uses"| node_sprayer
node_user -->|"views"| node_paywall
node_billing -->|"queries purchases"| node_play
node_billing -->|"requests verification"| node_verifyapi
node_verifyapi -->|"verifies purchase"| node_backend

click node_activity "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/MainActivity.kt"
click node_home "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/home/HomeScreen.kt"
click node_calculator "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/calculator/CalculatorScreen.kt"
click node_calcengine "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/CalculatorEngine.kt"
click node_bearings "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/bearings/BearingsScreen.kt"
click node_bearingrepo "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/repository/BearingRepository.kt"
click node_conduit "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/conduitbends/ConduitBendsScreen.kt"
click node_conduitcalc "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/ConduitBendCalculator.kt"
click node_recipe "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/recipescaler/RecipeScalerScreen.kt"
click node_recipecalc "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/RecipeScalerCalculator.kt"
click node_ratiomix "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/ratiomix/RatioMixScreen.kt"
click node_sae "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/saemetric/SaeMetricScreen.kt"
click node_saedata "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/SaeMetricCalculator.kt"
click node_taps "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/tapsanddrills/TapsAndDrillsScreen.kt"
click node_units "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/unitconverter/UnitConverterScreen.kt"
click node_unitdata "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/UnitConverterData.kt"
click node_wrench "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/wrenchfastener/WrenchFastenerScreen.kt"
click node_sprayer "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/sprayer/SprayerScreen.kt"
click node_preferences "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/repository/UserPreferencesRepository.kt"
click node_shortcuts "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/shortcuts/ShortcutViewModel.kt"
click node_paywall "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/shortcuts/ShortcutPaywallDialog.kt"
click node_billing "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/billing/BillingRepository.kt"
click node_verifyapi "https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/api/BillingVerificationApi.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_home,node_user toneBlue
class node_calculator,node_calcengine,node_bearings,node_conduit,node_conduitcalc,node_recipe,node_recipecalc,node_ratiomix,node_sae,node_saedata,node_taps,node_units,node_unitdata,node_wrench,node_sprayer toneAmber
class node_bearingrepo,node_preferences toneMint
class node_shortcuts,node_paywall,node_billing,node_verifyapi toneRose
class node_play,node_backend toneIndigo
```

## Components

### App and navigation

- [Main activity](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/MainActivity.kt): `app/src/main/java/com/toolstack/io/MainActivity.kt`
- [Tool home](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/home/HomeScreen.kt): `app/src/main/java/com/toolstack/io/ui/home/HomeScreen.kt`

### Trade tools

- [Calculator](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/calculator/CalculatorScreen.kt): `app/src/main/java/com/toolstack/io/ui/calculator/CalculatorScreen.kt`
- [Calculator engine](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/CalculatorEngine.kt): `app/src/main/java/com/toolstack/io/domain/calculator/CalculatorEngine.kt`
- [Bearing lookup](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/bearings/BearingsScreen.kt): `app/src/main/java/com/toolstack/io/ui/bearings/BearingsScreen.kt`
- [Conduit bends](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/conduitbends/ConduitBendsScreen.kt): `app/src/main/java/com/toolstack/io/ui/conduitbends/ConduitBendsScreen.kt`
- [Bend calculator](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/ConduitBendCalculator.kt): `app/src/main/java/com/toolstack/io/domain/calculator/ConduitBendCalculator.kt`
- [Recipe scaler](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/recipescaler/RecipeScalerScreen.kt): `app/src/main/java/com/toolstack/io/ui/recipescaler/RecipeScalerScreen.kt`
- [Scaling logic](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/RecipeScalerCalculator.kt): `app/src/main/java/com/toolstack/io/domain/calculator/RecipeScalerCalculator.kt`
- [Ratio mix](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/ratiomix/RatioMixScreen.kt): `app/src/main/java/com/toolstack/io/ui/ratiomix/RatioMixScreen.kt`
- [SAE metric](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/saemetric/SaeMetricScreen.kt): `app/src/main/java/com/toolstack/io/ui/saemetric/SaeMetricScreen.kt`
- [SAE metric data](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/SaeMetricCalculator.kt): `app/src/main/java/com/toolstack/io/domain/calculator/SaeMetricCalculator.kt`
- [Taps and drills](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/tapsanddrills/TapsAndDrillsScreen.kt): `app/src/main/java/com/toolstack/io/ui/tapsanddrills/TapsAndDrillsScreen.kt`
- [Unit converter](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/unitconverter/UnitConverterScreen.kt): `app/src/main/java/com/toolstack/io/ui/unitconverter/UnitConverterScreen.kt`
- [Conversion data](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/domain/calculator/UnitConverterData.kt): `app/src/main/java/com/toolstack/io/domain/calculator/UnitConverterData.kt`
- [Wrench fastener](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/wrenchfastener/WrenchFastenerScreen.kt): `app/src/main/java/com/toolstack/io/ui/wrenchfastener/WrenchFastenerScreen.kt`
- [Sprayer](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/sprayer/SprayerScreen.kt): `app/src/main/java/com/toolstack/io/ui/sprayer/SprayerScreen.kt`

### Data and preferences

- [Bearing catalog](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/repository/BearingRepository.kt): `app/src/main/java/com/toolstack/io/data/repository/BearingRepository.kt`
- [User preferences](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/repository/UserPreferencesRepository.kt): `app/src/main/java/com/toolstack/io/data/repository/UserPreferencesRepository.kt`

### Shortcuts and billing

- [Shortcut handling](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/shortcuts/ShortcutViewModel.kt): `app/src/main/java/com/toolstack/io/ui/shortcuts/ShortcutViewModel.kt`
- [Shortcut paywall](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/ui/shortcuts/ShortcutPaywallDialog.kt): `app/src/main/java/com/toolstack/io/ui/shortcuts/ShortcutPaywallDialog.kt`
- [Billing repository](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/billing/BillingRepository.kt): `app/src/main/java/com/toolstack/io/data/billing/BillingRepository.kt`
- [Verification API](https://github.com/ryxan/toolstack-android/blob/main/app/src/main/java/com/toolstack/io/data/api/BillingVerificationApi.kt): `app/src/main/java/com/toolstack/io/data/api/BillingVerificationApi.kt`

### Other components

- **User**
- **Google Play**
- **Verification backend**

## Connections

- User → Main activity: launches
- Main activity → Tool home: navigates
- Main activity → Shortcut handling: dispatches routes
- User → Calculator: uses
- User → Bearing lookup: uses
- Bearing lookup → Bearing catalog: searches
- User → Conduit bends: uses
- User → Recipe scaler: uses
- User → Ratio mix: uses
- User → SAE metric: uses
- User → Taps and drills: uses
- User → Unit converter: uses
- User → Wrench fastener: uses
- User → Sprayer: uses
- User → Shortcut paywall: views
- Billing repository → Google Play: queries purchases
- Billing repository → Verification API: requests verification
- Verification API → Verification backend: verifies purchase
