# akhyarulf/nyasar architecture

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

## Overview

Nyasar is an Android outdoor navigation app centered on importing or drawing a route, following it with GPS (including offline maps), and recording activities for local history or optional community sharing. The graph also captures waypoint/map tools, community browsing and publishing, and account backup. The README establishes these product capabilities; sampled source confirms key navigation, recording, offline-map and backup responsibilities, but not every screen-to-repository call, so uncertain links are omitted.

Main entry points: [`app/src/main/java/com/nyasar/app/ui/routepicker/RoutePickerScreen.kt`](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/routepicker/RoutePickerScreen.kt) (Route library), [`app/src/main/java/com/nyasar/app/backup/BackupManager.kt`](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/backup/BackupManager.kt) (Cloud backup), [`app/src/main/java/com/nyasar/app/recording/RecordingService.kt`](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/recording/RecordingService.kt) (Recording service), [`app/src/main/java/com/nyasar/app/ui/navigation/NavigationScreen.kt`](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/navigation/NavigationScreen.kt) (Navigation screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_routes["Routes and navigation"]
  node_route_ui["Route library"]
  node_gpx_parser["GPX parser<br/>[GpxParser.kt]"]
  node_route_repo["Route repository<br/>[RouteRepository.kt]"]
  node_route_store[("Local route data<br/>[RouteDao.kt]")]
  node_route_preview["Route preview"]
  node_nav_ui["Navigation screen"]
  node_nav_engine["Track navigation"]
  node_location["GPS location"]
  node_draw_route["Draw route"]
end

subgraph group_activities["Activity tracking"]
  node_record_ui["Recording screen<br/>[RecordingScreen.kt]"]
  node_record_service["Recording service"]
  node_record_engine["Recording engine<br/>[RecordingEngine.kt]"]
  node_activity_store[("Activity data<br/>[ActivityDao.kt]")]
  node_history["Activity history"]
end

subgraph group_maps["Maps and waypoints"]
  node_map_ui["Map display<br/>[NyasarMapView.kt]"]
  node_offline_ui["Offline maps"]
  node_offline_manager["Offline map manager"]
  node_waypoint_ui["Waypoint tools"]
  node_waypoint_store[("Waypoint data<br/>[WaypointDao.kt]")]
end

subgraph group_community["Community sharing"]
  node_browse_ui["Browse routes<br/>[BrowseScreen.kt]"]
  node_browse_repo["Browse repository"]
  node_publish_ui["Publish routes"]
  node_publish_repo["Publish repository"]
  node_social_repo["Social actions"]
end

subgraph group_account["Accounts and backup"]
  node_auth_ui["Account screens<br/>[AuthScreens.kt]"]
  node_auth_repo["Authentication<br/>[AuthRepository.kt]"]
  node_backup["Cloud backup<br/>[BackupManager.kt]"]
end

node_hiker(("Hiker"))
node_supabase[("Supabase")]
node_map_tiles["Map tile services"]

node_hiker -->|"choose route"| node_route_ui
node_route_ui -->|"import GPX"| node_gpx_parser
node_route_ui -->|"manage routes"| node_route_repo
node_gpx_parser -->|"parsed track"| node_route_repo
node_route_repo -->|"store locally"| node_route_store
node_route_ui -->|"draw route"| node_draw_route
node_route_ui -->|"preview route"| node_route_preview
node_route_preview -->|"download area"| node_offline_ui
node_offline_ui -->|"manage regions"| node_offline_manager
node_offline_manager -->|"download tiles"| node_map_tiles
node_hiker -->|"follow route"| node_nav_ui
node_nav_ui -->|"track progress"| node_nav_engine
node_nav_ui -->|"observe GPS"| node_location
node_nav_engine -->|"consume fixes"| node_location
node_map_ui -->|"render tiles"| node_map_tiles
node_hiker -->|"start recording"| node_record_ui
node_record_ui -->|"control session"| node_record_service
node_record_service -->|"collect fixes"| node_location
node_record_service -->|"process fixes"| node_record_engine
node_record_service -->|"save activity"| node_activity_store
node_hiker -->|"review activity"| node_history
node_history -->|"read history"| node_activity_store
node_hiker -->|"mark places"| node_waypoint_ui
node_waypoint_ui -->|"save waypoints"| node_waypoint_store
node_hiker -->|"discover routes"| node_browse_ui
node_browse_ui -->|"search routes"| node_browse_repo
node_browse_repo -->|"fetch routes"| node_supabase
node_hiker -->|"share route"| node_publish_ui
node_publish_ui -->|"publish details"| node_publish_repo
node_publish_repo -->|"upload route"| node_supabase
node_browse_ui -->|"like or save"| node_social_repo
node_social_repo -->|"update social data"| node_supabase
node_hiker -->|"sign in"| node_auth_ui
node_auth_ui -->|"authenticate"| node_auth_repo
node_auth_repo -->|"manage session"| node_supabase
node_backup -->|"read routes"| node_route_store
node_backup -->|"read activities"| node_activity_store
node_backup -->|"read waypoints"| node_waypoint_store
node_backup -->|"sync account data"| node_supabase

click node_route_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/routepicker/RoutePickerScreen.kt"
click node_gpx_parser "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/gpx/GpxParser.kt"
click node_route_repo "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/repository/RouteRepository.kt"
click node_route_store "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/db/RouteDao.kt"
click node_route_preview "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/preview/RoutePreviewScreen.kt"
click node_nav_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/navigation/NavigationScreen.kt"
click node_nav_engine "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/navigation/NavigationEngine.kt"
click node_location "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/location/LocationRepository.kt"
click node_draw_route "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/drawroute/DrawRouteViewModel.kt"
click node_record_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/recording/RecordingScreen.kt"
click node_record_service "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/recording/RecordingService.kt"
click node_record_engine "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/recording/RecordingEngine.kt"
click node_activity_store "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/db/ActivityDao.kt"
click node_history "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/history/ActivityHistoryScreen.kt"
click node_map_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/components/NyasarMapView.kt"
click node_offline_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/offline/OfflineMapsScreen.kt"
click node_offline_manager "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/map/OfflineMapManager.kt"
click node_waypoint_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/waypoint/WaypointViewModel.kt"
click node_waypoint_store "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/db/WaypointDao.kt"
click node_browse_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/browse/BrowseScreen.kt"
click node_browse_repo "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/supabase/BrowseRepository.kt"
click node_publish_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/publish/PublishRouteSheet.kt"
click node_publish_repo "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/supabase/PublishRepository.kt"
click node_social_repo "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/supabase/SocialRepository.kt"
click node_auth_ui "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/auth/AuthScreens.kt"
click node_auth_repo "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/supabase/AuthRepository.kt"
click node_backup "https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/backup/BackupManager.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_route_ui,node_gpx_parser,node_route_repo,node_route_store,node_route_preview,node_nav_ui,node_nav_engine,node_location,node_draw_route toneBlue
class node_record_ui,node_record_service,node_record_engine,node_activity_store,node_history,node_supabase toneAmber
class node_map_ui,node_offline_ui,node_offline_manager,node_waypoint_ui,node_waypoint_store toneMint
class node_browse_ui,node_browse_repo,node_publish_ui,node_publish_repo,node_social_repo toneRose
class node_auth_ui,node_auth_repo,node_backup,node_hiker,node_map_tiles toneIndigo
```

## Components

### Routes and navigation

- [Route library](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/routepicker/RoutePickerScreen.kt): `app/src/main/java/com/nyasar/app/ui/routepicker/RoutePickerScreen.kt`
- [GPX parser](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/gpx/GpxParser.kt): `app/src/main/java/com/nyasar/app/gpx/GpxParser.kt`
- [Route repository](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/repository/RouteRepository.kt): `app/src/main/java/com/nyasar/app/data/repository/RouteRepository.kt`
- [Local route data](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/db/RouteDao.kt): `app/src/main/java/com/nyasar/app/data/db/RouteDao.kt`
- [Route preview](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/preview/RoutePreviewScreen.kt): `app/src/main/java/com/nyasar/app/ui/preview/RoutePreviewScreen.kt`
- [Navigation screen](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/navigation/NavigationScreen.kt): `app/src/main/java/com/nyasar/app/ui/navigation/NavigationScreen.kt`
- [Track navigation](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/navigation/NavigationEngine.kt): `app/src/main/java/com/nyasar/app/navigation/NavigationEngine.kt`
- [GPS location](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/location/LocationRepository.kt): `app/src/main/java/com/nyasar/app/location/LocationRepository.kt`
- [Draw route](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/drawroute/DrawRouteViewModel.kt): `app/src/main/java/com/nyasar/app/ui/drawroute/DrawRouteViewModel.kt`

### Activity tracking

- [Recording screen](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/recording/RecordingScreen.kt): `app/src/main/java/com/nyasar/app/ui/recording/RecordingScreen.kt`
- [Recording service](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/recording/RecordingService.kt): `app/src/main/java/com/nyasar/app/recording/RecordingService.kt`
- [Recording engine](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/recording/RecordingEngine.kt): `app/src/main/java/com/nyasar/app/recording/RecordingEngine.kt`
- [Activity data](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/db/ActivityDao.kt): `app/src/main/java/com/nyasar/app/data/db/ActivityDao.kt`
- [Activity history](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/history/ActivityHistoryScreen.kt): `app/src/main/java/com/nyasar/app/ui/history/ActivityHistoryScreen.kt`

### Maps and waypoints

- [Map display](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/components/NyasarMapView.kt): `app/src/main/java/com/nyasar/app/ui/components/NyasarMapView.kt`
- [Offline maps](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/offline/OfflineMapsScreen.kt): `app/src/main/java/com/nyasar/app/ui/offline/OfflineMapsScreen.kt`
- [Offline map manager](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/map/OfflineMapManager.kt): `app/src/main/java/com/nyasar/app/map/OfflineMapManager.kt`
- [Waypoint tools](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/waypoint/WaypointViewModel.kt): `app/src/main/java/com/nyasar/app/ui/waypoint/WaypointViewModel.kt`
- [Waypoint data](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/db/WaypointDao.kt): `app/src/main/java/com/nyasar/app/data/db/WaypointDao.kt`

### Community sharing

- [Browse routes](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/browse/BrowseScreen.kt): `app/src/main/java/com/nyasar/app/ui/browse/BrowseScreen.kt`
- [Browse repository](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/supabase/BrowseRepository.kt): `app/src/main/java/com/nyasar/app/data/supabase/BrowseRepository.kt`
- [Publish routes](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/publish/PublishRouteSheet.kt): `app/src/main/java/com/nyasar/app/ui/publish/PublishRouteSheet.kt`
- [Publish repository](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/supabase/PublishRepository.kt): `app/src/main/java/com/nyasar/app/data/supabase/PublishRepository.kt`
- [Social actions](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/supabase/SocialRepository.kt): `app/src/main/java/com/nyasar/app/data/supabase/SocialRepository.kt`

### Accounts and backup

- [Account screens](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/ui/auth/AuthScreens.kt): `app/src/main/java/com/nyasar/app/ui/auth/AuthScreens.kt`
- [Authentication](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/data/supabase/AuthRepository.kt): `app/src/main/java/com/nyasar/app/data/supabase/AuthRepository.kt`
- [Cloud backup](https://github.com/akhyarulf/nyasar/blob/main/app/src/main/java/com/nyasar/app/backup/BackupManager.kt): `app/src/main/java/com/nyasar/app/backup/BackupManager.kt`

### Other components

- **Hiker**
- **Supabase**
- **Map tile services**

## Connections

- Hiker → Route library: choose route
- Route library → GPX parser: import GPX
- Route library → Route repository: manage routes
- GPX parser → Route repository: parsed track
- Route repository → Local route data: store locally
- Route library → Draw route: draw route
- Route library → Route preview: preview route
- Route preview → Offline maps: download area
- Offline maps → Offline map manager: manage regions
- Offline map manager → Map tile services: download tiles
- Hiker → Navigation screen: follow route
- Navigation screen → Track navigation: track progress
- Navigation screen → GPS location: observe GPS
- Track navigation → GPS location: consume fixes
- Map display → Map tile services: render tiles
- Hiker → Recording screen: start recording
- Recording screen → Recording service: control session
- Recording service → GPS location: collect fixes
- Recording service → Recording engine: process fixes
- Recording service → Activity data: save activity
- Hiker → Activity history: review activity
- Activity history → Activity data: read history
- Hiker → Waypoint tools: mark places
- Waypoint tools → Waypoint data: save waypoints
- Hiker → Browse routes: discover routes
- Browse routes → Browse repository: search routes
- Browse repository → Supabase: fetch routes
- Hiker → Publish routes: share route
- Publish routes → Publish repository: publish details
- Publish repository → Supabase: upload route
- Browse routes → Social actions: like or save
- Social actions → Supabase: update social data
- Hiker → Account screens: sign in
- Account screens → Authentication: authenticate
- Authentication → Supabase: manage session
- Cloud backup → Local route data: read routes
- Cloud backup → Activity data: read activities
- Cloud backup → Waypoint data: read waypoints
- Cloud backup → Supabase: sync account data
