# pgoutham47/taar architecture

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

- Interactive diagram: https://gitdiagram.com/pgoutham47/taar
- Repository: https://github.com/pgoutham47/taar

## Overview

Taar is an offline Android triage app for inspecting electrical distribution boards without touching conductors. A user selects a circuit and captures sensor readings; the capture coordinator gathers magnetic, acoustic, and motion data, DSP and the arc model extract signals, and domain rules fuse those signals into an explainable result. Users can manage installations and references, inspect live views, scan cables, and ask for spoken or on-device assistant explanations. The README documents the product scope; source excerpts are partial, so uncertain subsystem wiring is omitted.

Main entry points: [`spike/android/app/src/main/java/com/taar/sensor/CaptureCoordinator.kt`](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/CaptureCoordinator.kt) (Capture coordinator), [`spike/android/app/src/main/java/com/taar/ui/TaarViewModel.kt`](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/TaarViewModel.kt) (App state), [`spike/android/app/src/main/java/com/taar/ui/MeasureScreen.kt`](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/MeasureScreen.kt) (App screens), [`spike/android/app/src/main/java/com/taar/ui/MainActivity.kt`](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/MainActivity.kt) (App entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and capture"]
  node_activity["App entry<br/>[MainActivity.kt]"]
  node_screens["App screens<br/>[MeasureScreen.kt]"]
  node_vm["App state<br/>[TaarViewModel.kt]"]
end

subgraph group_signals["Sensing and analysis"]
  node_coordinator["Capture coordinator"]
  node_mag["Magnetometer capture<br/>[MagCapture.kt]"]
  node_audio["Audio capture<br/>[AudioCapture.kt]"]
  node_motion["Motion capture<br/>[MotionCapture.kt]"]
  node_dsp["Signal processing"]
  node_features["Arc features<br/>[ArcFeatures.kt]"]
  node_arcmodel["Arc model<br/>[ArcModel.kt]"]
  node_analysis["Signal metrics<br/>[Metrics.kt]"]
  node_live["Live signal view"]
end

subgraph group_install["Boards and records"]
  node_installation["Board and circuits<br/>[HouseView.kt]"]
  node_store[("Local records<br/>[Store.kt]")]
  node_cablescan["Cable scan<br/>[CableScanScreen.kt]"]
  node_boardmap["Board map<br/>[BoardMapScreen.kt]"]
end

subgraph group_guidance["Results and guidance"]
  node_fusion["Diagnostic fusion<br/>[Fusion.kt]"]
  node_spoken["Spoken result<br/>[SpokenResult.kt]"]
  node_voice["Voice interaction<br/>[VoiceAgent.kt]"]
  node_assistant["On-device assistant<br/>[TaarAssistant.kt]"]
  node_prompt["Assistant prompt<br/>[AssistantPrompt.kt]"]
end

node_user(("Technician"))
node_androidsensors["Phone sensors"]

node_user -->|"uses"| node_screens
node_activity -->|"creates"| node_vm
node_activity -->|"shows"| node_screens
node_vm -->|"requests capture"| node_coordinator
node_coordinator -->|"captures field"| node_mag
node_coordinator -->|"captures sound"| node_audio
node_coordinator -->|"captures motion"| node_motion
node_mag -->|"reads"| node_androidsensors
node_motion -->|"reads"| node_androidsensors
node_coordinator -->|"processes signals"| node_dsp
node_coordinator -->|"extracts features"| node_features
node_coordinator -->|"scores audio"| node_arcmodel
node_coordinator -->|"produces metrics"| node_analysis
node_vm -->|"analyses reading"| node_fusion
node_vm -->|"loads and saves"| node_store
node_vm -->|"manages circuits"| node_installation
node_screens -->|"opens scan"| node_cablescan
node_screens -->|"opens map"| node_boardmap
node_screens -->|"opens live view"| node_live
node_fusion -->|"supplies result"| node_spoken
node_vm -->|"handles voice"| node_voice
node_vm -->|"requests explanation"| node_assistant
node_assistant -->|"uses prompt"| node_prompt

click node_activity "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/MainActivity.kt"
click node_screens "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/MeasureScreen.kt"
click node_vm "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/TaarViewModel.kt"
click node_coordinator "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/CaptureCoordinator.kt"
click node_mag "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/MagCapture.kt"
click node_audio "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/AudioCapture.kt"
click node_motion "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/MotionCapture.kt"
click node_dsp "https://github.com/pgoutham47/taar/tree/main/spike/android/app/src/main/java/com/taar/dsp"
click node_features "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/dsp/ArcFeatures.kt"
click node_arcmodel "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ml/ArcModel.kt"
click node_analysis "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/Metrics.kt"
click node_fusion "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/Fusion.kt"
click node_spoken "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/SpokenResult.kt"
click node_voice "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/VoiceAgent.kt"
click node_assistant "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ml/TaarAssistant.kt"
click node_prompt "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/AssistantPrompt.kt"
click node_installation "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/HouseView.kt"
click node_store "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/Store.kt"
click node_cablescan "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/CableScanScreen.kt"
click node_boardmap "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/BoardMapScreen.kt"
click node_live "https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/LivePhysicsScreen.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_screens,node_vm toneBlue
class node_coordinator,node_mag,node_audio,node_motion,node_dsp,node_features,node_arcmodel,node_analysis,node_live toneAmber
class node_installation,node_store,node_cablescan,node_boardmap toneMint
class node_fusion,node_spoken,node_voice,node_assistant,node_prompt toneRose
class node_user,node_androidsensors toneIndigo
```

## Components

### App and capture

- [App entry](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/MainActivity.kt): `spike/android/app/src/main/java/com/taar/ui/MainActivity.kt`
- [App screens](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/MeasureScreen.kt): `spike/android/app/src/main/java/com/taar/ui/MeasureScreen.kt`
- [App state](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/TaarViewModel.kt): `spike/android/app/src/main/java/com/taar/ui/TaarViewModel.kt`

### Sensing and analysis

- [Capture coordinator](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/CaptureCoordinator.kt): `spike/android/app/src/main/java/com/taar/sensor/CaptureCoordinator.kt`
- [Magnetometer capture](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/MagCapture.kt): `spike/android/app/src/main/java/com/taar/sensor/MagCapture.kt`
- [Audio capture](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/AudioCapture.kt): `spike/android/app/src/main/java/com/taar/sensor/AudioCapture.kt`
- [Motion capture](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/sensor/MotionCapture.kt): `spike/android/app/src/main/java/com/taar/sensor/MotionCapture.kt`
- [Signal processing](https://github.com/pgoutham47/taar/tree/main/spike/android/app/src/main/java/com/taar/dsp): `spike/android/app/src/main/java/com/taar/dsp`
- [Arc features](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/dsp/ArcFeatures.kt): `spike/android/app/src/main/java/com/taar/dsp/ArcFeatures.kt`
- [Arc model](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ml/ArcModel.kt): `spike/android/app/src/main/java/com/taar/ml/ArcModel.kt`
- [Signal metrics](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/Metrics.kt): `spike/android/app/src/main/java/com/taar/domain/Metrics.kt`
- [Live signal view](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/LivePhysicsScreen.kt): `spike/android/app/src/main/java/com/taar/ui/LivePhysicsScreen.kt`

### Boards and records

- [Board and circuits](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/HouseView.kt): `spike/android/app/src/main/java/com/taar/domain/HouseView.kt`
- [Local records](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/Store.kt): `spike/android/app/src/main/java/com/taar/domain/Store.kt`
- [Cable scan](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/CableScanScreen.kt): `spike/android/app/src/main/java/com/taar/ui/CableScanScreen.kt`
- [Board map](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/BoardMapScreen.kt): `spike/android/app/src/main/java/com/taar/ui/BoardMapScreen.kt`

### Results and guidance

- [Diagnostic fusion](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/Fusion.kt): `spike/android/app/src/main/java/com/taar/domain/Fusion.kt`
- [Spoken result](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/SpokenResult.kt): `spike/android/app/src/main/java/com/taar/domain/SpokenResult.kt`
- [Voice interaction](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ui/VoiceAgent.kt): `spike/android/app/src/main/java/com/taar/ui/VoiceAgent.kt`
- [On-device assistant](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/ml/TaarAssistant.kt): `spike/android/app/src/main/java/com/taar/ml/TaarAssistant.kt`
- [Assistant prompt](https://github.com/pgoutham47/taar/blob/main/spike/android/app/src/main/java/com/taar/domain/AssistantPrompt.kt): `spike/android/app/src/main/java/com/taar/domain/AssistantPrompt.kt`

### Other components

- **Technician**
- **Phone sensors**

## Connections

- Technician → App screens: uses
- App entry → App state: creates
- App entry → App screens: shows
- App state → Capture coordinator: requests capture
- Capture coordinator → Magnetometer capture: captures field
- Capture coordinator → Audio capture: captures sound
- Capture coordinator → Motion capture: captures motion
- Magnetometer capture → Phone sensors: reads
- Motion capture → Phone sensors: reads
- Capture coordinator → Signal processing: processes signals
- Capture coordinator → Arc features: extracts features
- Capture coordinator → Arc model: scores audio
- Capture coordinator → Signal metrics: produces metrics
- App state → Diagnostic fusion: analyses reading
- App state → Local records: loads and saves
- App state → Board and circuits: manages circuits
- App screens → Cable scan: opens scan
- App screens → Board map: opens map
- App screens → Live signal view: opens live view
- Diagnostic fusion → Spoken result: supplies result
- App state → Voice interaction: handles voice
- App state → On-device assistant: requests explanation
- On-device assistant → Assistant prompt: uses prompt
