# shadowhedgehog76/hedgehop architecture

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

- Interactive diagram: https://gitdiagram.com/shadowhedgehog76/hedgehop
- Repository: https://github.com/shadowhedgehog76/hedgehop

## Overview

Hedgehop is a React Native music-listening app. Users browse and search a catalog, start playback, and manage favorites and playlists; playback also feeds listening statistics. App navigation exposes news, account, support, donation, and developer screens, while party rooms synchronize playback among participants. The sampled source confirms player/statistics and party-sync wiring, plus authentication and playlist sync behavior. Several screen and API implementations were not sampled, so their detailed calls are omitted; the graph retains the major product areas shown in the repository tree.

Main entry points: [`App.js`](https://github.com/shadowhedgehog76/hedgehop/blob/master/App.js) (App shell), [`src/api/player.js`](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/player.js) (Audio player), [`src/services/StatsService.js`](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/services/StatsService.js) (Stats service), [`src/hooks/useCrossPartySync.js`](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/hooks/useCrossPartySync.js) (Playback sync hooks)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App navigation"]
  node_application["App shell<br/>[App.js]"]
  node_home["Home<br/>[HomeStack.js]"]
  node_news["News<br/>[NewsStack.js]"]
  node_support["Support and giving"]
  node_donations["Donations<br/>[DonationScreen.js]"]
  node_developer["Developer tools<br/>[DevScreen.js]"]
end

subgraph group_music["Music listening"]
  node_catalog["Catalog API<br/>[catalog.js]"]
  node_search["Track search"]
  node_player["Audio player<br/>[player.js]"]
  node_playerbar["Playback controls<br/>[PlayerBar.js]"]
  node_player_screen["Player screen<br/>[PlayerScreen.js]"]
  node_albums["Album browsing<br/>[AlbumScreen.js]"]
end

subgraph group_account["Account and library"]
  node_favorites["Favorites<br/>[favorites.js]"]
  node_favorites_screen["Favorites view<br/>[FavoritesScreen.js]"]
  node_playlists["Playlists<br/>[playlists.js]"]
  node_playlist_screens["Playlist views<br/>[PlaylistsScreen.js]"]
  node_account_screen["Account view<br/>[YouStack.js]"]
  node_auth["Authentication<br/>[auth.js]"]
  node_stats_screen["Listening statistics<br/>[StatsScreen.js]"]
  node_stats_hook["Stats state<br/>[useStats.js]"]
  node_stats_service["Stats service<br/>[StatsService.js]"]
end

subgraph group_party["Party sync"]
  node_party_screen["Party room<br/>[PartyRoomScreen.js]"]
  node_party_sync["Playback sync hooks"]
  node_party_service["Room service"]
end

subgraph group_services["Supporting services"]
  node_local_storage[("Local storage")]
  node_firebase[("Firebase<br/>[firebaseConfig.js]")]
  node_update_hook["Update checker"]
  node_update_notice["Update notice"]
end

node_listener(("Listener"))
node_release_service["Release service"]

node_listener -->|"opens"| node_application
node_application -->|"routes to"| node_home
node_application -->|"routes to"| node_news
node_application -->|"routes to"| node_favorites_screen
node_application -->|"routes to"| node_stats_screen
node_application -->|"routes to"| node_player_screen
node_application -->|"renders"| node_playerbar
node_application -->|"activates"| node_party_sync
node_home -->|"opens"| node_albums
node_search -->|"loads catalog"| node_catalog
node_search -->|"starts track"| node_player
node_albums -->|"browses"| node_catalog
node_player_screen -->|"controls"| node_player
node_playerbar -->|"controls"| node_player
node_favorites_screen -->|"loads favorites"| node_favorites
node_playlist_screens -->|"manages playlists"| node_playlists
node_account_screen -->|"authenticates"| node_auth
node_auth -->|"syncs on login"| node_playlists
node_stats_screen -->|"reads stats"| node_stats_hook
node_stats_hook -->|"loads and records"| node_stats_service
node_player -->|"records listening"| node_stats_service
node_stats_service -->|"reads and writes"| node_local_storage
node_stats_service -.->|"saves account stats"| node_auth
node_party_screen -->|"manages room"| node_party_service
node_party_sync -->|"syncs room state"| node_party_service
node_party_sync -->|"reads and controls"| node_player
node_party_service -->|"reads and writes"| node_firebase
node_update_notice -->|"checks updates"| node_update_hook
node_update_hook -->|"checks releases"| node_release_service

click node_application "https://github.com/shadowhedgehog76/hedgehop/blob/master/App.js"
click node_home "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/HomeStack.js"
click node_news "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/NewsStack.js"
click node_support "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/HelpSupportScreen.js"
click node_donations "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/DonationScreen.js"
click node_developer "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/DevScreen.js"
click node_catalog "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/catalog.js"
click node_search "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/SearchTracksScreen.js"
click node_player "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/player.js"
click node_playerbar "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/components/PlayerBar.js"
click node_player_screen "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/PlayerScreen.js"
click node_albums "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/AlbumScreen.js"
click node_favorites "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/favorites.js"
click node_favorites_screen "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/FavoritesScreen.js"
click node_playlists "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/playlists.js"
click node_playlist_screens "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/PlaylistsScreen.js"
click node_account_screen "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/YouStack.js"
click node_auth "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/services/auth.js"
click node_stats_screen "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/StatsScreen.js"
click node_stats_hook "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/hooks/useStats.js"
click node_stats_service "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/services/StatsService.js"
click node_party_screen "https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/PartyRoomScreen.js"
click node_party_sync "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/hooks/useCrossPartySync.js"
click node_party_service "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/services/crossPartyService.js"
click node_firebase "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/config/firebaseConfig.js"
click node_update_hook "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/hooks/useUpdateChecker.js"
click node_update_notice "https://github.com/shadowhedgehog76/hedgehop/blob/master/src/components/UpdateNotification.js"

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_application,node_home,node_news,node_support,node_donations,node_developer toneBlue
class node_catalog,node_search,node_player,node_playerbar,node_player_screen,node_albums toneAmber
class node_favorites,node_favorites_screen,node_playlists,node_playlist_screens,node_account_screen,node_auth,node_stats_screen,node_stats_hook,node_stats_service toneMint
class node_party_screen,node_party_sync,node_party_service toneRose
class node_local_storage,node_firebase,node_update_hook,node_update_notice,node_listener,node_release_service toneIndigo
```

## Components

### App navigation

- [App shell](https://github.com/shadowhedgehog76/hedgehop/blob/master/App.js): `App.js`
- [Home](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/HomeStack.js): `screens/HomeStack.js`
- [News](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/NewsStack.js): `screens/NewsStack.js`
- [Support and giving](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/HelpSupportScreen.js): `screens/HelpSupportScreen.js`
- [Donations](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/DonationScreen.js): `screens/DonationScreen.js`
- [Developer tools](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/DevScreen.js): `screens/DevScreen.js`

### Music listening

- [Catalog API](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/catalog.js): `src/api/catalog.js`
- [Track search](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/SearchTracksScreen.js): `screens/SearchTracksScreen.js`
- [Audio player](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/player.js): `src/api/player.js`
- [Playback controls](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/components/PlayerBar.js): `src/components/PlayerBar.js`
- [Player screen](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/PlayerScreen.js): `screens/PlayerScreen.js`
- [Album browsing](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/AlbumScreen.js): `screens/AlbumScreen.js`

### Account and library

- [Favorites](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/favorites.js): `src/api/favorites.js`
- [Favorites view](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/FavoritesScreen.js): `screens/FavoritesScreen.js`
- [Playlists](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/api/playlists.js): `src/api/playlists.js`
- [Playlist views](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/PlaylistsScreen.js): `screens/PlaylistsScreen.js`
- [Account view](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/YouStack.js): `screens/YouStack.js`
- [Authentication](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/services/auth.js): `src/services/auth.js`
- [Listening statistics](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/StatsScreen.js): `screens/StatsScreen.js`
- [Stats state](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/hooks/useStats.js): `src/hooks/useStats.js`
- [Stats service](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/services/StatsService.js): `src/services/StatsService.js`

### Party sync

- [Party room](https://github.com/shadowhedgehog76/hedgehop/blob/master/screens/PartyRoomScreen.js): `screens/PartyRoomScreen.js`
- [Playback sync hooks](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/hooks/useCrossPartySync.js): `src/hooks/useCrossPartySync.js`
- [Room service](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/services/crossPartyService.js): `src/services/crossPartyService.js`

### Supporting services

- **Local storage**
- [Firebase](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/config/firebaseConfig.js): `src/config/firebaseConfig.js`
- [Update checker](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/hooks/useUpdateChecker.js): `src/hooks/useUpdateChecker.js`
- [Update notice](https://github.com/shadowhedgehog76/hedgehop/blob/master/src/components/UpdateNotification.js): `src/components/UpdateNotification.js`

### Other components

- **Listener**
- **Release service**

## Connections

- Listener → App shell: opens
- App shell → Home: routes to
- App shell → News: routes to
- App shell → Favorites view: routes to
- App shell → Listening statistics: routes to
- App shell → Player screen: routes to
- App shell → Playback controls: renders
- App shell → Playback sync hooks: activates
- Home → Album browsing: opens
- Track search → Catalog API: loads catalog
- Track search → Audio player: starts track
- Album browsing → Catalog API: browses
- Player screen → Audio player: controls
- Playback controls → Audio player: controls
- Favorites view → Favorites: loads favorites
- Playlist views → Playlists: manages playlists
- Account view → Authentication: authenticates
- Authentication → Playlists: syncs on login
- Listening statistics → Stats state: reads stats
- Stats state → Stats service: loads and records
- Audio player → Stats service: records listening
- Stats service → Local storage: reads and writes
- Stats service → Authentication: saves account stats
- Party room → Room service: manages room
- Playback sync hooks → Room service: syncs room state
- Playback sync hooks → Audio player: reads and controls
- Room service → Firebase: reads and writes
- Update notice → Update checker: checks updates
- Update checker → Release service: checks releases
