# nenneas/atwd architecture

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

- Interactive diagram: https://gitdiagram.com/nenneas/atwd
- Repository: https://github.com/nenneas/atwd

## Overview

Downhill is a private, local-first Android fitness journal with separate therapy and training records. The user enters through the app shell, passes consent and optional PIN gates, then navigates to logging, overview, training, history, and options; records can be reviewed, reported, shared, or backed up. The graph includes documented features whose implementation files were not sampled, but omits uncertain wiring for those features. SQLCipher is documented as deferred, not active.

Main entry points: [`app/src/main/java/at/nenneas/atwd/MainActivity.kt`](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/MainActivity.kt) (App entry), [`app/src/main/java/at/nenneas/atwd/data/repository/AtwdRepository.kt`](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/repository/AtwdRepository.kt) (Repository), [`app/src/main/java/at/nenneas/atwd/domain/TrainingStats.kt`](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/domain/TrainingStats.kt) (Journal calculations), [`app/src/main/java/at/nenneas/atwd/ui/navigation/AtwdNavHost.kt`](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/navigation/AtwdNavHost.kt) (Navigation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App shell"]
  node_activity["App entry<br/>[MainActivity.kt]"]
  node_navigation["Navigation<br/>[AtwdNavHost.kt]"]
  node_routes["Route definitions<br/>[Routes.kt]"]
end

subgraph group_journal["Journal workflows"]
  node_entry["Therapy logging<br/>[EntryScreen.kt]"]
  node_home["Overview<br/>[HomeScreen.kt]"]
  node_training["Training log<br/>[TrainingScreen.kt]"]
  node_history["History and charts<br/>[HistoryScreen.kt]"]
  node_options["Settings and backup<br/>[OptionsScreens.kt]"]
  node_domain["Journal calculations<br/>[TrainingStats.kt]"]
end

subgraph group_data["Local data"]
  node_repository["Repository<br/>[AtwdRepository.kt]"]
  node_database[("Room database<br/>[AtwdDatabase.kt]")]
  node_therapydata["Therapy records<br/>[LogEntryEntity.kt]"]
  node_trainingdata["Training sessions"]
  node_trainingdao["Session queries"]
end

subgraph group_support["Reports and reminders"]
  node_report["Doctor and share reports<br/>[DoctorReport.kt]"]
  node_sharepng["Share images<br/>[SharePng.kt]"]
  node_backup["JSON and CSV backup<br/>[JsonBackup.kt]"]
  node_notifications["Reminders"]
  node_widget["Home widget"]
end

subgraph group_protection["Privacy and access"]
  node_pin["PIN session<br/>[PinSession.kt]"]
  node_consent["Consent gate<br/>[ConsentScreen.kt]"]
end

node_user(("User"))

node_user -->|"opens"| node_activity
node_activity -->|"observes preferences"| node_repository
node_activity -->|"checks unlock"| node_pin
node_activity -->|"opens app shell"| node_navigation
node_activity -->|"requires consent"| node_consent
node_navigation -->|"resolves destinations"| node_routes
node_repository -->|"reads and writes"| node_database
node_database -->|"provides queries"| node_trainingdao
node_trainingdao -->|"reads and writes"| node_trainingdata
node_repository -->|"manages records"| node_therapydata
node_repository -->|"manages records"| node_trainingdata
node_user -->|"records therapy"| node_entry
node_user -->|"records workouts"| node_training
node_user -->|"reviews history"| node_history
node_user -->|"manages settings"| node_options
node_home -->|"presents overview metrics"| node_domain
node_training -->|"presents training statistics"| node_domain
node_history -->|"presents history analysis"| node_domain
node_user -->|"requests doctor report"| node_report
node_user -->|"shares journal image"| node_sharepng
node_user -->|"exports or imports"| node_backup
node_user -->|"receives reminders"| node_notifications
node_user -->|"views home widget"| node_widget

click node_activity "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/MainActivity.kt"
click node_navigation "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/navigation/AtwdNavHost.kt"
click node_routes "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/navigation/Routes.kt"
click node_entry "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/entry/EntryScreen.kt"
click node_home "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/home/HomeScreen.kt"
click node_training "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/training/TrainingScreen.kt"
click node_history "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/history/HistoryScreen.kt"
click node_options "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/options/OptionsScreens.kt"
click node_repository "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/repository/AtwdRepository.kt"
click node_database "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/AtwdDatabase.kt"
click node_therapydata "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/entity/LogEntryEntity.kt"
click node_trainingdata "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/entity/TrainingSessionEntity.kt"
click node_trainingdao "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/dao/TrainingSessionDao.kt"
click node_domain "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/domain/TrainingStats.kt"
click node_report "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/report/DoctorReport.kt"
click node_sharepng "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/report/SharePng.kt"
click node_backup "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/backup/JsonBackup.kt"
click node_notifications "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/notify/AtwdNotifications.kt"
click node_widget "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/widget/AtwdGlanceWidget.kt"
click node_pin "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/security/PinSession.kt"
click node_consent "https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/consent/ConsentScreen.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_routes,node_user toneBlue
class node_entry,node_home,node_training,node_history,node_options,node_domain toneAmber
class node_repository,node_database,node_therapydata,node_trainingdata,node_trainingdao toneMint
class node_report,node_sharepng,node_backup,node_notifications,node_widget toneRose
class node_pin,node_consent toneIndigo
```

## Components

### App shell

- [App entry](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/MainActivity.kt): `app/src/main/java/at/nenneas/atwd/MainActivity.kt`
- [Navigation](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/navigation/AtwdNavHost.kt): `app/src/main/java/at/nenneas/atwd/ui/navigation/AtwdNavHost.kt`
- [Route definitions](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/navigation/Routes.kt): `app/src/main/java/at/nenneas/atwd/ui/navigation/Routes.kt`

### Journal workflows

- [Therapy logging](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/entry/EntryScreen.kt): `app/src/main/java/at/nenneas/atwd/ui/screens/entry/EntryScreen.kt`
- [Overview](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/home/HomeScreen.kt): `app/src/main/java/at/nenneas/atwd/ui/screens/home/HomeScreen.kt`
- [Training log](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/training/TrainingScreen.kt): `app/src/main/java/at/nenneas/atwd/ui/screens/training/TrainingScreen.kt`
- [History and charts](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/history/HistoryScreen.kt): `app/src/main/java/at/nenneas/atwd/ui/screens/history/HistoryScreen.kt`
- [Settings and backup](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/options/OptionsScreens.kt): `app/src/main/java/at/nenneas/atwd/ui/screens/options/OptionsScreens.kt`
- [Journal calculations](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/domain/TrainingStats.kt): `app/src/main/java/at/nenneas/atwd/domain/TrainingStats.kt`

### Local data

- [Repository](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/repository/AtwdRepository.kt): `app/src/main/java/at/nenneas/atwd/data/repository/AtwdRepository.kt`
- [Room database](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/AtwdDatabase.kt): `app/src/main/java/at/nenneas/atwd/data/AtwdDatabase.kt`
- [Therapy records](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/entity/LogEntryEntity.kt): `app/src/main/java/at/nenneas/atwd/data/entity/LogEntryEntity.kt`
- [Training sessions](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/entity/TrainingSessionEntity.kt): `app/src/main/java/at/nenneas/atwd/data/entity/TrainingSessionEntity.kt`
- [Session queries](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/data/dao/TrainingSessionDao.kt): `app/src/main/java/at/nenneas/atwd/data/dao/TrainingSessionDao.kt`

### Reports and reminders

- [Doctor and share reports](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/report/DoctorReport.kt): `app/src/main/java/at/nenneas/atwd/report/DoctorReport.kt`
- [Share images](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/report/SharePng.kt): `app/src/main/java/at/nenneas/atwd/report/SharePng.kt`
- [JSON and CSV backup](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/backup/JsonBackup.kt): `app/src/main/java/at/nenneas/atwd/backup/JsonBackup.kt`
- [Reminders](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/notify/AtwdNotifications.kt): `app/src/main/java/at/nenneas/atwd/notify/AtwdNotifications.kt`
- [Home widget](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/widget/AtwdGlanceWidget.kt): `app/src/main/java/at/nenneas/atwd/widget/AtwdGlanceWidget.kt`

### Privacy and access

- [PIN session](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/security/PinSession.kt): `app/src/main/java/at/nenneas/atwd/security/PinSession.kt`
- [Consent gate](https://github.com/nenneas/atwd/blob/main/app/src/main/java/at/nenneas/atwd/ui/screens/consent/ConsentScreen.kt): `app/src/main/java/at/nenneas/atwd/ui/screens/consent/ConsentScreen.kt`

### Other components

- **User**

## Connections

- User → App entry: opens
- App entry → Repository: observes preferences
- App entry → PIN session: checks unlock
- App entry → Navigation: opens app shell
- App entry → Consent gate: requires consent
- Navigation → Route definitions: resolves destinations
- Repository → Room database: reads and writes
- Room database → Session queries: provides queries
- Session queries → Training sessions: reads and writes
- Repository → Therapy records: manages records
- Repository → Training sessions: manages records
- User → Therapy logging: records therapy
- User → Training log: records workouts
- User → History and charts: reviews history
- User → Settings and backup: manages settings
- Overview → Journal calculations: presents overview metrics
- Training log → Journal calculations: presents training statistics
- History and charts → Journal calculations: presents history analysis
- User → Doctor and share reports: requests doctor report
- User → Share images: shares journal image
- User → JSON and CSV backup: exports or imports
- User → Reminders: receives reminders
- User → Home widget: views home widget
