# sanjeevkumar94/heart-rate-module architecture

> Architecture diagram of the GitHub repository sanjeevkumar94/heart-rate-module, 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/sanjeevkumar94/heart-rate-module
- Repository: https://github.com/sanjeevkumar94/heart-rate-module

## Overview

This Android app lets users record heart-rate readings, then review the latest value, zone, notes, and a time-filtered chart. The add flow validates date, time, BPM, and notes before saving through a repository to Room; elevated readings can trigger a local notification. The dashboard observes stored readings and groups them for display. The README documents range bucketing, responsive layouts, and notification behavior; some corresponding ViewModel implementations were not sampled, so their internal links are limited to documented responsibilities.

Main entry points: [`app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateScreen.kt`](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateScreen.kt) (Heart-rate screen), [`app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateViewModel.kt`](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateViewModel.kt) (Dashboard ViewModel), [`app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateViewModel.kt`](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateViewModel.kt) (Add-reading ViewModel), [`app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateScreen.kt`](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateScreen.kt) (Add-reading screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App entry and navigation"]
  node_activity["Main activity<br/>[MainActivity.kt]"]
  node_navigation["Navigation graph"]
end

subgraph group_features["Heart-rate screens"]
  node_dashboard["Heart-rate screen<br/>[HeartRateScreen.kt]"]
  node_dashboard_vm["Dashboard ViewModel"]
  node_add_screen["Add-reading screen"]
  node_add_vm["Add-reading ViewModel"]
  node_chart["Heart-rate chart<br/>[HeartRateChart.kt]"]
  node_zone_indicator["Zone indicator"]
  node_health_tip["Health tip card<br/>[HealthTipCard.kt]"]
end

subgraph group_domain["Validation and domain"]
  node_validator["Input validation<br/>[InputValidation.kt]"]
  node_zone["Heart-rate zones<br/>[HeartRateZone.kt]"]
  node_time_range["Timeline ranges<br/>[TimeRange.kt]"]
  node_device["Device options<br/>[HeartRateDevice.kt]"]
end

subgraph group_storage["Local persistence"]
  node_repository["Reading repository"]
  node_repository_impl["Repository implementation"]
  node_dao["Heart-rate DAO<br/>[HeartRateDao.kt]"]
  node_entity["Reading entity<br/>[HeartRateEntity.kt]"]
  node_database[("Room database<br/>[AppDatabase.kt]")]
end

subgraph group_alerts["Notifications"]
  node_app_start["App startup<br/>[HeartRateApp.kt]"]
  node_notification_helper["Notification helper"]
end

node_user(("User"))
node_android_notifications(("Android notifications"))

node_user -->|"opens app"| node_activity
node_activity -->|"shows after splash"| node_navigation
node_user -->|"views readings"| node_dashboard
node_navigation -->|"routes to"| node_dashboard
node_navigation -->|"routes to"| node_add_screen
node_dashboard -->|"collects state; sends events"| node_dashboard_vm
node_dashboard_vm -->|"observes readings"| node_repository
node_dashboard_vm -->|"uses selected range"| node_time_range
node_dashboard_vm -->|"classifies BPM"| node_zone
node_dashboard_vm -.->|"uses device selection"| node_device
node_dashboard -->|"renders chart"| node_chart
node_dashboard -->|"renders zone band"| node_zone_indicator
node_dashboard -->|"renders tip and share action"| node_health_tip
node_user -->|"enters reading"| node_add_screen
node_add_screen -->|"sends edits and save"| node_add_vm
node_add_vm -->|"validates fields"| node_validator
node_add_vm -->|"saves reading"| node_repository
node_repository -->|"bound by Hilt"| node_repository_impl
node_repository_impl -->|"queries and inserts"| node_dao
node_dao -->|"uses Room"| node_database
node_dao -->|"reads and writes"| node_entity
node_app_start -->|"creates channel"| node_notification_helper
node_add_screen -->|"requests notification permission"| node_add_vm
node_add_vm -->|"posts elevated alert"| node_notification_helper
node_notification_helper -->|"posts local notification"| node_android_notifications

click node_activity "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/MainActivity.kt"
click node_navigation "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/navigation/HeartRateNavGraph.kt"
click node_dashboard "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateScreen.kt"
click node_dashboard_vm "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateViewModel.kt"
click node_add_screen "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateScreen.kt"
click node_add_vm "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateViewModel.kt"
click node_chart "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/components/HeartRateChart.kt"
click node_zone_indicator "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/components/HeartRateZoneIndicator.kt"
click node_health_tip "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/components/HealthTipCard.kt"
click node_validator "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/util/InputValidation.kt"
click node_zone "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/domain/HeartRateZone.kt"
click node_time_range "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/domain/TimeRange.kt"
click node_device "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/domain/HeartRateDevice.kt"
click node_repository "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/repository/HeartRateRepository.kt"
click node_repository_impl "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/repository/HeartRateRepositoryImpl.kt"
click node_dao "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/local/HeartRateDao.kt"
click node_entity "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/local/HeartRateEntity.kt"
click node_database "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/local/AppDatabase.kt"
click node_app_start "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/HeartRateApp.kt"
click node_notification_helper "https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/notification/NotificationHelper.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_user toneBlue
class node_dashboard,node_dashboard_vm,node_add_screen,node_add_vm,node_chart,node_zone_indicator,node_health_tip toneAmber
class node_validator,node_zone,node_time_range,node_device toneMint
class node_repository,node_repository_impl,node_dao,node_entity,node_database toneRose
class node_app_start,node_notification_helper,node_android_notifications toneIndigo
```

## Components

### App entry and navigation

- [Main activity](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/MainActivity.kt): `app/src/main/java/com/assignment/heartrate/MainActivity.kt`
- [Navigation graph](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/navigation/HeartRateNavGraph.kt): `app/src/main/java/com/assignment/heartrate/ui/navigation/HeartRateNavGraph.kt`

### Heart-rate screens

- [Heart-rate screen](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateScreen.kt): `app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateScreen.kt`
- [Dashboard ViewModel](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateViewModel.kt): `app/src/main/java/com/assignment/heartrate/ui/heartrate/HeartRateViewModel.kt`
- [Add-reading screen](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateScreen.kt): `app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateScreen.kt`
- [Add-reading ViewModel](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateViewModel.kt): `app/src/main/java/com/assignment/heartrate/ui/addheartrate/AddHeartRateViewModel.kt`
- [Heart-rate chart](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/components/HeartRateChart.kt): `app/src/main/java/com/assignment/heartrate/ui/components/HeartRateChart.kt`
- [Zone indicator](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/components/HeartRateZoneIndicator.kt): `app/src/main/java/com/assignment/heartrate/ui/components/HeartRateZoneIndicator.kt`
- [Health tip card](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/ui/components/HealthTipCard.kt): `app/src/main/java/com/assignment/heartrate/ui/components/HealthTipCard.kt`

### Validation and domain

- [Input validation](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/util/InputValidation.kt): `app/src/main/java/com/assignment/heartrate/util/InputValidation.kt`
- [Heart-rate zones](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/domain/HeartRateZone.kt): `app/src/main/java/com/assignment/heartrate/domain/HeartRateZone.kt`
- [Timeline ranges](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/domain/TimeRange.kt): `app/src/main/java/com/assignment/heartrate/domain/TimeRange.kt`
- [Device options](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/domain/HeartRateDevice.kt): `app/src/main/java/com/assignment/heartrate/domain/HeartRateDevice.kt`

### Local persistence

- [Reading repository](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/repository/HeartRateRepository.kt): `app/src/main/java/com/assignment/heartrate/data/repository/HeartRateRepository.kt`
- [Repository implementation](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/repository/HeartRateRepositoryImpl.kt): `app/src/main/java/com/assignment/heartrate/data/repository/HeartRateRepositoryImpl.kt`
- [Heart-rate DAO](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/local/HeartRateDao.kt): `app/src/main/java/com/assignment/heartrate/data/local/HeartRateDao.kt`
- [Reading entity](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/local/HeartRateEntity.kt): `app/src/main/java/com/assignment/heartrate/data/local/HeartRateEntity.kt`
- [Room database](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/data/local/AppDatabase.kt): `app/src/main/java/com/assignment/heartrate/data/local/AppDatabase.kt`

### Notifications

- [App startup](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/HeartRateApp.kt): `app/src/main/java/com/assignment/heartrate/HeartRateApp.kt`
- [Notification helper](https://github.com/sanjeevkumar94/heart-rate-module/blob/master/app/src/main/java/com/assignment/heartrate/notification/NotificationHelper.kt): `app/src/main/java/com/assignment/heartrate/notification/NotificationHelper.kt`

### Other components

- **User**
- **Android notifications**

## Connections

- User → Main activity: opens app
- Main activity → Navigation graph: shows after splash
- User → Heart-rate screen: views readings
- Navigation graph → Heart-rate screen: routes to
- Navigation graph → Add-reading screen: routes to
- Heart-rate screen → Dashboard ViewModel: collects state; sends events
- Dashboard ViewModel → Reading repository: observes readings
- Dashboard ViewModel → Timeline ranges: uses selected range
- Dashboard ViewModel → Heart-rate zones: classifies BPM
- Dashboard ViewModel → Device options: uses device selection
- Heart-rate screen → Heart-rate chart: renders chart
- Heart-rate screen → Zone indicator: renders zone band
- Heart-rate screen → Health tip card: renders tip and share action
- User → Add-reading screen: enters reading
- Add-reading screen → Add-reading ViewModel: sends edits and save
- Add-reading ViewModel → Input validation: validates fields
- Add-reading ViewModel → Reading repository: saves reading
- Reading repository → Repository implementation: bound by Hilt
- Repository implementation → Heart-rate DAO: queries and inserts
- Heart-rate DAO → Room database: uses Room
- Heart-rate DAO → Reading entity: reads and writes
- App startup → Notification helper: creates channel
- Add-reading screen → Add-reading ViewModel: requests notification permission
- Add-reading ViewModel → Notification helper: posts elevated alert
- Notification helper → Android notifications: posts local notification
