# utkarshtiwari777/demo_verification_app architecture

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

## Overview

This is an Android tanker-verification client paired with a FastAPI backend. The intended workflow is to receive a server-issued hand/target challenge, guide and analyze the user's camera interaction, submit the observed result, record and upload session evidence, and separately sample frames for server-authoritative tractor verification. The graph preserves those distinct stages and backend services. The README is empty and Android implementation excerpts were not supplied, so Android wiring is shown cautiously; backend wiring follows the sampled startup and API code.

Main entry points: [`backend/main.py`](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/main.py) (FastAPI app), [`backend/sessions.py`](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/sessions.py) (Session service), [`app/src/main/java/com/example/myapplication/camera/CameraPreview.kt`](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/CameraPreview.kt) (Camera preview), [`backend/evidence.py`](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/evidence.py) (Evidence service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android client"]
  node_main_activity["App entry<br/>[MainActivity.kt]"]
  node_verification_screen["Verification UI"]
  node_challenge_flow["Challenge flow<br/>[ChallengeFlow.kt]"]
  node_camera_preview["Camera preview<br/>[CameraPreview.kt]"]
  node_hand_analysis["Hand analysis"]
  node_alignment_analysis["Phone alignment"]
  node_frame_router["Frame router"]
  node_evidence_recorder["Evidence recorder"]
  node_evidence_segments["Segment queue<br/>[SegmentQueue.kt]"]
  node_tractor_sampler["Tractor sampler"]
  node_repositories["Data repositories"]
  node_api_client["API client<br/>[ApiClient.kt]"]
  node_session_api["Session API<br/>[TractorApi.kt]"]
  node_evidence_api_client["Evidence API<br/>[EvidenceApi.kt]"]
end

subgraph group_backend["Backend API"]
  node_fastapi_app["FastAPI app<br/>[main.py]"]
  node_verification_routes["Verification routes"]
end

subgraph group_session["Session verification"]
  node_challenge_generator["Challenge generator<br/>[challenge.py]"]
  node_verification_service["Session service<br/>[sessions.py]"]
  node_session_store[("Session store<br/>[sessions.py]")]
end

subgraph group_evidence_tractor["Evidence and tractor"]
  node_evidence_routes["Evidence routes<br/>[evidence_api.py]"]
  node_evidence_service["Evidence service<br/>[evidence.py]"]
  node_evidence_store[("Evidence files<br/>[evidence.py]")]
  node_tractor_routes["Tractor routes<br/>[tractor_api.py]"]
  node_tractor_service["Tractor verifier<br/>[tractor.py]"]
  node_detector["Tractor detector<br/>[detector.py]"]
  node_model_weights["Model weights"]
end

node_user(("User"))

node_user -->|"opens app"| node_main_activity
node_main_activity -->|"shows UI"| node_verification_screen
node_verification_screen -->|"runs challenge"| node_challenge_flow
node_verification_screen -->|"starts camera"| node_camera_preview
node_camera_preview -->|"frames"| node_hand_analysis
node_camera_preview -->|"frames"| node_alignment_analysis
node_camera_preview -->|"routes frames"| node_frame_router
node_frame_router -->|"records"| node_evidence_recorder
node_frame_router -->|"samples"| node_tractor_sampler
node_challenge_flow -.->|"requests session"| node_repositories
node_evidence_recorder -->|"queues segments"| node_evidence_segments
node_repositories -.->|"uses"| node_api_client
node_api_client -.->|"calls"| node_session_api
node_api_client -.->|"calls"| node_evidence_api_client
node_session_api -.->|"HTTP"| node_fastapi_app
node_evidence_api_client -.->|"HTTP"| node_fastapi_app
node_fastapi_app -->|"mounts"| node_verification_routes
node_fastapi_app -->|"mounts"| node_evidence_routes
node_fastapi_app -->|"mounts"| node_tractor_routes
node_verification_routes -->|"handles requests"| node_verification_service
node_verification_service -->|"generates challenge"| node_challenge_generator
node_verification_service -->|"reads and writes"| node_session_store
node_fastapi_app -->|"configures"| node_verification_service
node_fastapi_app -->|"configures"| node_evidence_service
node_fastapi_app -->|"configures"| node_tractor_service
node_evidence_routes -->|"handles requests"| node_evidence_service
node_evidence_service -->|"validates session"| node_verification_service
node_evidence_service -->|"stores segments"| node_evidence_store
node_tractor_routes -->|"handles requests"| node_tractor_service
node_tractor_service -->|"validates session"| node_verification_service
node_tractor_routes -->|"runs inference"| node_detector
node_detector -->|"loads weights"| node_model_weights

click node_main_activity "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/MainActivity.kt"
click node_verification_screen "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/verification/VerificationScreen.kt"
click node_challenge_flow "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/verification/ChallengeFlow.kt"
click node_camera_preview "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/CameraPreview.kt"
click node_hand_analysis "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/HandLandmarkAnalyzer.kt"
click node_alignment_analysis "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/PhoneAlignmentAnalyzer.kt"
click node_frame_router "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/VerificationFrameRouter.kt"
click node_evidence_recorder "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/evidence/EvidenceRecorder.kt"
click node_evidence_segments "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/evidence/SegmentQueue.kt"
click node_tractor_sampler "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/tractor/TractorSamplerCore.kt"
click node_repositories "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/data/BackendRepository.kt"
click node_api_client "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/data/remote/ApiClient.kt"
click node_session_api "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/data/remote/TractorApi.kt"
click node_evidence_api_client "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/data/remote/EvidenceApi.kt"
click node_fastapi_app "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/main.py"
click node_verification_routes "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/verification_api.py"
click node_challenge_generator "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/challenge.py"
click node_verification_service "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/sessions.py"
click node_session_store "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/sessions.py"
click node_evidence_routes "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/evidence_api.py"
click node_evidence_service "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/evidence.py"
click node_evidence_store "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/evidence.py"
click node_tractor_routes "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/tractor_api.py"
click node_tractor_service "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/tractor.py"
click node_detector "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/detector.py"
click node_model_weights "https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/models/tractor_detector.pt"

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_main_activity,node_verification_screen,node_challenge_flow,node_camera_preview,node_hand_analysis,node_alignment_analysis,node_frame_router,node_evidence_recorder,node_evidence_segments,node_tractor_sampler,node_repositories,node_api_client,node_session_api,node_evidence_api_client,node_user toneBlue
class node_fastapi_app,node_verification_routes toneAmber
class node_challenge_generator,node_verification_service,node_session_store toneMint
class node_evidence_routes,node_evidence_service,node_evidence_store,node_tractor_routes,node_tractor_service,node_detector,node_model_weights toneRose
```

## Components

### Android client

- [App entry](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/MainActivity.kt): `app/src/main/java/com/example/myapplication/MainActivity.kt`
- [Verification UI](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/verification/VerificationScreen.kt): `app/src/main/java/com/example/myapplication/verification/VerificationScreen.kt`
- [Challenge flow](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/verification/ChallengeFlow.kt): `app/src/main/java/com/example/myapplication/verification/ChallengeFlow.kt`
- [Camera preview](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/CameraPreview.kt): `app/src/main/java/com/example/myapplication/camera/CameraPreview.kt`
- [Hand analysis](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/HandLandmarkAnalyzer.kt): `app/src/main/java/com/example/myapplication/camera/HandLandmarkAnalyzer.kt`
- [Phone alignment](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/PhoneAlignmentAnalyzer.kt): `app/src/main/java/com/example/myapplication/camera/PhoneAlignmentAnalyzer.kt`
- [Frame router](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/camera/VerificationFrameRouter.kt): `app/src/main/java/com/example/myapplication/camera/VerificationFrameRouter.kt`
- [Evidence recorder](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/evidence/EvidenceRecorder.kt): `app/src/main/java/com/example/myapplication/evidence/EvidenceRecorder.kt`
- [Segment queue](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/evidence/SegmentQueue.kt): `app/src/main/java/com/example/myapplication/evidence/SegmentQueue.kt`
- [Tractor sampler](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/tractor/TractorSamplerCore.kt): `app/src/main/java/com/example/myapplication/tractor/TractorSamplerCore.kt`
- [Data repositories](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/data/BackendRepository.kt): `app/src/main/java/com/example/myapplication/data/BackendRepository.kt`
- [API client](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/data/remote/ApiClient.kt): `app/src/main/java/com/example/myapplication/data/remote/ApiClient.kt`
- [Session API](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/data/remote/TractorApi.kt): `app/src/main/java/com/example/myapplication/data/remote/TractorApi.kt`
- [Evidence API](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/app/src/main/java/com/example/myapplication/data/remote/EvidenceApi.kt): `app/src/main/java/com/example/myapplication/data/remote/EvidenceApi.kt`

### Backend API

- [FastAPI app](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/main.py): `backend/main.py`
- [Verification routes](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/verification_api.py): `backend/verification_api.py`

### Session verification

- [Challenge generator](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/challenge.py): `backend/challenge.py`
- [Session service](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/sessions.py): `backend/sessions.py`
- [Session store](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/sessions.py): `backend/sessions.py`

### Evidence and tractor

- [Evidence routes](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/evidence_api.py): `backend/evidence_api.py`
- [Evidence service](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/evidence.py): `backend/evidence.py`
- [Evidence files](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/evidence.py): `backend/evidence.py`
- [Tractor routes](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/tractor_api.py): `backend/tractor_api.py`
- [Tractor verifier](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/tractor.py): `backend/tractor.py`
- [Tractor detector](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/detector.py): `backend/detector.py`
- [Model weights](https://github.com/utkarshtiwari777/demo_verification_app/blob/main/backend/models/tractor_detector.pt): `backend/models/tractor_detector.pt`

### Other components

- **User**

## Connections

- User → App entry: opens app
- App entry → Verification UI: shows UI
- Verification UI → Challenge flow: runs challenge
- Verification UI → Camera preview: starts camera
- Camera preview → Hand analysis: frames
- Camera preview → Phone alignment: frames
- Camera preview → Frame router: routes frames
- Frame router → Evidence recorder: records
- Frame router → Tractor sampler: samples
- Challenge flow → Data repositories: requests session
- Evidence recorder → Segment queue: queues segments
- Data repositories → API client: uses
- API client → Session API: calls
- API client → Evidence API: calls
- Session API → FastAPI app: HTTP
- Evidence API → FastAPI app: HTTP
- FastAPI app → Verification routes: mounts
- FastAPI app → Evidence routes: mounts
- FastAPI app → Tractor routes: mounts
- Verification routes → Session service: handles requests
- Session service → Challenge generator: generates challenge
- Session service → Session store: reads and writes
- FastAPI app → Session service: configures
- FastAPI app → Evidence service: configures
- FastAPI app → Tractor verifier: configures
- Evidence routes → Evidence service: handles requests
- Evidence service → Session service: validates session
- Evidence service → Evidence files: stores segments
- Tractor routes → Tractor verifier: handles requests
- Tractor verifier → Session service: validates session
- Tractor routes → Tractor detector: runs inference
- Tractor detector → Model weights: loads weights
