# hoosammr/convertx architecture

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

- Interactive diagram: https://gitdiagram.com/hoosammr/convertx
- Repository: https://github.com/hoosammr/convertx

## Overview

ConvertX is an Android chat-style unit-conversion app: users enter natural-language conversion text, which is parsed into a structured command and executed with deterministic Kotlin conversion logic. The documented runtime flow and sampled executor/repository code support the main conversion path; UI state and rendering details are inferred only from the README and file tree. Add/update commands are recognized as command types, but currently return explanatory messages rather than modifying stored units.

Main entry points: [`app/src/main/java/com/meray/convertx/presentation/viewmodel/ConvertViewModel.kt`](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/viewmodel/ConvertViewModel.kt) (Convert viewmodel), [`app/src/main/java/com/meray/convertx/domain/command/CommandExecutor.kt`](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/command/CommandExecutor.kt) (Command executor), [`app/src/main/java/com/meray/convertx/presentation/ConvertScreen.kt`](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/ConvertScreen.kt) (Convert screen), [`app/src/main/java/com/meray/convertx/presentation/ConversationList.kt`](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/ConversationList.kt) (Conversation UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Chat interface"]
  node_activity["Android activity<br/>[MainActivity.kt]"]
  node_screen["Convert screen<br/>[ConvertScreen.kt]"]
  node_input["Text input<br/>[inpose.kt]"]
  node_conversation["Conversation UI"]
  node_viewmodel["Convert viewmodel"]
end

subgraph group_interpret["Intent and commands"]
  node_intent["Intent engine<br/>[IntentEngine.kt]"]
  node_regex["Regex parser"]
  node_command["Structured command<br/>[Command.kt]"]
end

subgraph group_execution["Conversion execution"]
  node_executor["Command executor<br/>[CommandExecutor.kt]"]
  node_result["Execution result"]
  node_conversion["Unit converter<br/>[UnitConverter.kt]"]
  node_conversion_result["Conversion result"]
end

subgraph group_units["Unit catalog"]
  node_repository["Unit repository"]
  node_catalog["Unit catalog<br/>[UnitCatalog.kt]"]
  node_unit_model["Unit definitions<br/>[UnitValue.kt]"]
end

node_user(("User"))

node_user -->|"enters text"| node_input
node_activity -->|"launches"| node_screen
node_screen -->|"shows"| node_input
node_screen -->|"uses"| node_viewmodel
node_viewmodel -->|"parses with"| node_intent
node_intent -.->|"implemented by"| node_regex
node_regex -->|"returns"| node_command
node_viewmodel -->|"executes command"| node_executor
node_executor -->|"looks up units"| node_repository
node_repository -->|"reads"| node_catalog
node_catalog -->|"provides"| node_unit_model
node_executor -->|"converts units"| node_conversion
node_conversion -->|"returns"| node_conversion_result
node_executor -->|"builds message"| node_result
node_viewmodel -->|"updates conversation"| node_conversation
node_conversation -->|"shows result"| node_user

click node_activity "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/MainActivity.kt"
click node_screen "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/ConvertScreen.kt"
click node_input "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/inpose.kt"
click node_conversation "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/ConversationList.kt"
click node_viewmodel "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/viewmodel/ConvertViewModel.kt"
click node_intent "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/intent/IntentEngine.kt"
click node_regex "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/intent/RegexIntentEngine.kt"
click node_command "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/command/Command.kt"
click node_executor "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/command/CommandExecutor.kt"
click node_result "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/command/CommandExecutionResult.kt"
click node_conversion "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/conversion/UnitConverter.kt"
click node_conversion_result "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/model/ConversionResult.kt"
click node_repository "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/data/repository/InMemoryUnitRepository.kt"
click node_catalog "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/conversion/UnitCatalog.kt"
click node_unit_model "https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/model/UnitValue.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_screen,node_input,node_conversation,node_viewmodel,node_user toneBlue
class node_intent,node_regex,node_command toneAmber
class node_executor,node_result,node_conversion,node_conversion_result toneMint
class node_repository,node_catalog,node_unit_model toneRose
```

## Components

### Chat interface

- [Android activity](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/MainActivity.kt): `app/src/main/java/com/meray/convertx/MainActivity.kt`
- [Convert screen](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/ConvertScreen.kt): `app/src/main/java/com/meray/convertx/presentation/ConvertScreen.kt`
- [Text input](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/inpose.kt): `app/src/main/java/com/meray/convertx/presentation/inpose.kt`
- [Conversation UI](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/ConversationList.kt): `app/src/main/java/com/meray/convertx/presentation/ConversationList.kt`
- [Convert viewmodel](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/presentation/viewmodel/ConvertViewModel.kt): `app/src/main/java/com/meray/convertx/presentation/viewmodel/ConvertViewModel.kt`

### Intent and commands

- [Intent engine](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/intent/IntentEngine.kt): `app/src/main/java/com/meray/convertx/domain/intent/IntentEngine.kt`
- [Regex parser](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/intent/RegexIntentEngine.kt): `app/src/main/java/com/meray/convertx/domain/intent/RegexIntentEngine.kt`
- [Structured command](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/command/Command.kt): `app/src/main/java/com/meray/convertx/domain/command/Command.kt`

### Conversion execution

- [Command executor](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/command/CommandExecutor.kt): `app/src/main/java/com/meray/convertx/domain/command/CommandExecutor.kt`
- [Execution result](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/command/CommandExecutionResult.kt): `app/src/main/java/com/meray/convertx/domain/command/CommandExecutionResult.kt`
- [Unit converter](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/conversion/UnitConverter.kt): `app/src/main/java/com/meray/convertx/domain/conversion/UnitConverter.kt`
- [Conversion result](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/model/ConversionResult.kt): `app/src/main/java/com/meray/convertx/domain/model/ConversionResult.kt`

### Unit catalog

- [Unit repository](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/data/repository/InMemoryUnitRepository.kt): `app/src/main/java/com/meray/convertx/data/repository/InMemoryUnitRepository.kt`
- [Unit catalog](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/conversion/UnitCatalog.kt): `app/src/main/java/com/meray/convertx/domain/conversion/UnitCatalog.kt`
- [Unit definitions](https://github.com/hoosammr/convertx/blob/main/app/src/main/java/com/meray/convertx/domain/model/UnitValue.kt): `app/src/main/java/com/meray/convertx/domain/model/UnitValue.kt`

### Other components

- **User**

## Connections

- User → Text input: enters text
- Android activity → Convert screen: launches
- Convert screen → Text input: shows
- Convert screen → Convert viewmodel: uses
- Convert viewmodel → Intent engine: parses with
- Intent engine → Regex parser: implemented by
- Regex parser → Structured command: returns
- Convert viewmodel → Command executor: executes command
- Command executor → Unit repository: looks up units
- Unit repository → Unit catalog: reads
- Unit catalog → Unit definitions: provides
- Command executor → Unit converter: converts units
- Unit converter → Conversion result: returns
- Command executor → Execution result: builds message
- Convert viewmodel → Conversation UI: updates conversation
- Conversation UI → User: shows result
