# divya-a10/mypod architecture

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

- Interactive diagram: https://gitdiagram.com/divya-a10/mypod
- Repository: https://github.com/divya-a10/mypod

## Overview

myPod combines a local-audio library service and responsive player with a Tauri iOS app for managed imports, cataloging, playlists, Spotify import review, and conservative audio matching. The desktop workflow loads tracks through a platform adapter, then plays them through a shared controller and platform-specific driver; explicit scans index audio in the backend. iOS import and playlist capabilities are documented and represented by their source modules, though their UI-to-command wiring was not shown. Recommendation modules exist, but the README describes recommendation features as future work. Arrows use only relationships shown in excerpts or README; unsampled command wiring is not inferred.

Main entry points: [`backend/app/api/library.py`](https://github.com/divya-a10/mypod/blob/main/backend/app/api/library.py) (Library endpoints), [`apps/desktop/src-tauri/src/ios_catalog.rs`](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_catalog.rs) (On-device catalog), [`apps/desktop/src-tauri/src/ios_spotify_import.rs`](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_spotify_import.rs) (Spotify import), [`backend/app/library/scanner.py`](https://github.com/divya-a10/mypod/blob/main/backend/app/library/scanner.py) (Directory scanner)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Player interface"]
  node_app["App UI<br/>[App.tsx]"]
  node_adapter["Library adapter<br/>[libraryAdapter.ts]"]
  node_contracts["Library contracts<br/>[contracts.ts]"]
end

subgraph group_playback["Playback"]
  node_controller["Playback controller"]
  node_runtime["Playback runtime<br/>[runtime.ts]"]
  node_html_driver["HTML audio driver"]
  node_ios_driver["Native audio driver"]
end

subgraph group_backend["Local library service"]
  node_api["Desktop API<br/>[api.ts]"]
  node_backend_api["Library endpoints<br/>[library.py]"]
  node_scanner["Directory scanner<br/>[scanner.py]"]
  node_metadata["Audio metadata<br/>[metadata.py]"]
  node_database[("Backend SQLite<br/>[database.py]")]
  node_settings["Service settings<br/>[config.py]"]
  node_csv_endpoint["CSV preview endpoint<br/>[spotify_preview.py]"]
  node_csv_parser["CSV validator<br/>[spotify_csv.py]"]
end

subgraph group_ios["iOS catalog and imports"]
  node_ios_catalog[("On-device catalog<br/>[ios_catalog.rs]")]
  node_ios_match["Audio matching"]
  node_ios_playlists["Playlist management<br/>[ios_playlists.rs]"]
  node_ios_import["Spotify import"]
  node_ios_preview["iOS CSV preview"]
  node_ios_backup["Catalog backup<br/>[ios_backup.rs]"]
  node_ios_playback["iOS playback<br/>[ios_playback.rs]"]
end

subgraph group_recommendations["Recommendations"]
  node_recommender["Recommendation API"]
end

node_listener(("Listener"))
node_track_files["Local audio files"]
node_sqlite_file[("Library database file")]
node_spotify_csv["Spotify CSV"]

node_listener -->|"uses"| node_app
node_app -->|"loads library"| node_adapter
node_adapter -->|"selects desktop"| node_api
node_adapter -->|"implements"| node_contracts
node_app -->|"subscribes"| node_controller
node_runtime -.->|"creates"| node_controller
node_runtime -.->|"selects desktop"| node_html_driver
node_runtime -.->|"selects iOS"| node_ios_driver
node_controller -->|"drives"| node_html_driver
node_controller -->|"drives"| node_ios_driver
node_api -->|"requests tracks"| node_backend_api
node_api -->|"posts preview"| node_csv_endpoint
node_backend_api -->|"gets settings"| node_settings
node_backend_api -->|"reads tracks"| node_database
node_backend_api -->|"requests scan"| node_scanner
node_backend_api -->|"reads artwork"| node_metadata
node_scanner -->|"checks roots"| node_settings
node_scanner -->|"updates index"| node_database
node_scanner -->|"reads tags"| node_metadata
node_metadata -->|"reads tags"| node_track_files
node_database -->|"persists"| node_sqlite_file
node_csv_endpoint -->|"validates rows"| node_csv_parser
node_listener -->|"chooses scan folder"| node_track_files
node_listener -->|"submits preview"| node_spotify_csv
node_ios_catalog -->|"runs matching"| node_ios_match
node_ios_playlists -->|"uses catalog"| node_ios_catalog
node_ios_import -->|"imports tracks"| node_ios_catalog
node_ios_import -->|"uses preview"| node_ios_preview
node_ios_import -->|"reviews matches"| node_ios_match
node_ios_import -->|"creates playlists"| node_ios_playlists
node_ios_backup -->|"backs up catalog"| node_ios_catalog
node_ios_backup -->|"backs up playlists"| node_ios_playlists
node_ios_playback -->|"loads local tracks"| node_ios_catalog

click node_app "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/App.tsx"
click node_adapter "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/library/libraryAdapter.ts"
click node_contracts "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/library/contracts.ts"
click node_api "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/api.ts"
click node_controller "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/playback/PlaybackController.ts"
click node_runtime "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/playback/runtime.ts"
click node_html_driver "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/playback/HtmlAudioPlaybackDriver.ts"
click node_ios_driver "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/playback/IosNativePlaybackDriver.ts"
click node_backend_api "https://github.com/divya-a10/mypod/blob/main/backend/app/api/library.py"
click node_scanner "https://github.com/divya-a10/mypod/blob/main/backend/app/library/scanner.py"
click node_metadata "https://github.com/divya-a10/mypod/blob/main/backend/app/library/metadata.py"
click node_database "https://github.com/divya-a10/mypod/blob/main/backend/app/database.py"
click node_settings "https://github.com/divya-a10/mypod/blob/main/backend/app/config.py"
click node_csv_endpoint "https://github.com/divya-a10/mypod/blob/main/backend/app/api/spotify_preview.py"
click node_csv_parser "https://github.com/divya-a10/mypod/blob/main/backend/app/library/spotify_csv.py"
click node_ios_catalog "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_catalog.rs"
click node_ios_match "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_audio_matching.rs"
click node_ios_playlists "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_playlists.rs"
click node_ios_import "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_spotify_import.rs"
click node_ios_preview "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_spotify_preview.rs"
click node_ios_backup "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_backup.rs"
click node_ios_playback "https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_playback.rs"
click node_recommender "https://github.com/divya-a10/mypod/tree/main/backend/app/api/recommender"

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_app,node_adapter,node_contracts toneBlue
class node_controller,node_runtime,node_html_driver,node_ios_driver,node_sqlite_file toneAmber
class node_api,node_backend_api,node_scanner,node_metadata,node_database,node_settings,node_csv_endpoint,node_csv_parser toneMint
class node_ios_catalog,node_ios_match,node_ios_playlists,node_ios_import,node_ios_preview,node_ios_backup,node_ios_playback toneRose
class node_recommender,node_listener,node_track_files,node_spotify_csv toneIndigo
```

## Components

### Player interface

- [App UI](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/App.tsx): `apps/desktop/src/App.tsx`
- [Library adapter](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/library/libraryAdapter.ts): `apps/desktop/src/library/libraryAdapter.ts`
- [Library contracts](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/library/contracts.ts): `apps/desktop/src/library/contracts.ts`

### Playback

- [Playback controller](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/playback/PlaybackController.ts): `apps/desktop/src/playback/PlaybackController.ts`
- [Playback runtime](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/playback/runtime.ts): `apps/desktop/src/playback/runtime.ts`
- [HTML audio driver](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/playback/HtmlAudioPlaybackDriver.ts): `apps/desktop/src/playback/HtmlAudioPlaybackDriver.ts`
- [Native audio driver](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/playback/IosNativePlaybackDriver.ts): `apps/desktop/src/playback/IosNativePlaybackDriver.ts`

### Local library service

- [Desktop API](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src/api.ts): `apps/desktop/src/api.ts`
- [Library endpoints](https://github.com/divya-a10/mypod/blob/main/backend/app/api/library.py): `backend/app/api/library.py`
- [Directory scanner](https://github.com/divya-a10/mypod/blob/main/backend/app/library/scanner.py): `backend/app/library/scanner.py`
- [Audio metadata](https://github.com/divya-a10/mypod/blob/main/backend/app/library/metadata.py): `backend/app/library/metadata.py`
- [Backend SQLite](https://github.com/divya-a10/mypod/blob/main/backend/app/database.py): `backend/app/database.py`
- [Service settings](https://github.com/divya-a10/mypod/blob/main/backend/app/config.py): `backend/app/config.py`
- [CSV preview endpoint](https://github.com/divya-a10/mypod/blob/main/backend/app/api/spotify_preview.py): `backend/app/api/spotify_preview.py`
- [CSV validator](https://github.com/divya-a10/mypod/blob/main/backend/app/library/spotify_csv.py): `backend/app/library/spotify_csv.py`

### iOS catalog and imports

- [On-device catalog](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_catalog.rs): `apps/desktop/src-tauri/src/ios_catalog.rs`
- [Audio matching](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_audio_matching.rs): `apps/desktop/src-tauri/src/ios_audio_matching.rs`
- [Playlist management](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_playlists.rs): `apps/desktop/src-tauri/src/ios_playlists.rs`
- [Spotify import](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_spotify_import.rs): `apps/desktop/src-tauri/src/ios_spotify_import.rs`
- [iOS CSV preview](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_spotify_preview.rs): `apps/desktop/src-tauri/src/ios_spotify_preview.rs`
- [Catalog backup](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_backup.rs): `apps/desktop/src-tauri/src/ios_backup.rs`
- [iOS playback](https://github.com/divya-a10/mypod/blob/main/apps/desktop/src-tauri/src/ios_playback.rs): `apps/desktop/src-tauri/src/ios_playback.rs`

### Recommendations

- [Recommendation API](https://github.com/divya-a10/mypod/tree/main/backend/app/api/recommender): `backend/app/api/recommender`

### Other components

- **Listener**
- **Local audio files**
- **Library database file**
- **Spotify CSV**

## Connections

- Listener → App UI: uses (evidence: `README.md`)
- App UI → Library adapter: loads library (evidence: `apps/desktop/src/App.tsx`)
- Library adapter → Desktop API: selects desktop (evidence: `apps/desktop/src/library/libraryAdapter.ts`)
- Library adapter → Library contracts: implements (evidence: `apps/desktop/src/library/libraryAdapter.ts`)
- App UI → Playback controller: subscribes (evidence: `apps/desktop/src/App.tsx`)
- Playback runtime → Playback controller: creates
- Playback runtime → HTML audio driver: selects desktop
- Playback runtime → Native audio driver: selects iOS
- Playback controller → HTML audio driver: drives (evidence: `apps/desktop/src/playback/HtmlAudioPlaybackDriver.ts`)
- Playback controller → Native audio driver: drives (evidence: `apps/desktop/src/playback/IosNativePlaybackDriver.ts`)
- Desktop API → Library endpoints: requests tracks (evidence: `apps/desktop/src/api.ts`)
- Desktop API → CSV preview endpoint: posts preview (evidence: `apps/desktop/src/api.ts`)
- Library endpoints → Service settings: gets settings (evidence: `backend/app/api/library.py`)
- Library endpoints → Backend SQLite: reads tracks (evidence: `backend/app/api/library.py`)
- Library endpoints → Directory scanner: requests scan (evidence: `backend/app/api/library.py`)
- Library endpoints → Audio metadata: reads artwork (evidence: `backend/app/api/library.py`)
- Directory scanner → Service settings: checks roots (evidence: `backend/app/library/scanner.py`)
- Directory scanner → Backend SQLite: updates index (evidence: `backend/app/library/scanner.py`)
- Directory scanner → Audio metadata: reads tags (evidence: `backend/app/library/scanner.py`)
- Audio metadata → Local audio files: reads tags (evidence: `backend/app/library/metadata.py`)
- Backend SQLite → Library database file: persists (evidence: `backend/app/database.py`)
- CSV preview endpoint → CSV validator: validates rows (evidence: `backend/app/api/spotify_preview.py`)
- Listener → Local audio files: chooses scan folder (evidence: `README.md`)
- Listener → Spotify CSV: submits preview (evidence: `README.md`)
- On-device catalog → Audio matching: runs matching (evidence: `apps/desktop/src-tauri/src/ios_catalog.rs`)
- Playlist management → On-device catalog: uses catalog (evidence: `apps/desktop/src-tauri/src/ios_playlists.rs`)
- Spotify import → On-device catalog: imports tracks (evidence: `apps/desktop/src-tauri/src/ios_spotify_import.rs`)
- Spotify import → iOS CSV preview: uses preview (evidence: `apps/desktop/src-tauri/src/ios_spotify_import.rs`)
- Spotify import → Audio matching: reviews matches (evidence: `apps/desktop/src-tauri/src/ios_spotify_import.rs`)
- Spotify import → Playlist management: creates playlists (evidence: `apps/desktop/src-tauri/src/ios_spotify_import.rs`)
- Catalog backup → On-device catalog: backs up catalog (evidence: `apps/desktop/src-tauri/src/ios_backup.rs`)
- Catalog backup → Playlist management: backs up playlists (evidence: `apps/desktop/src-tauri/src/ios_backup.rs`)
- iOS playback → On-device catalog: loads local tracks (evidence: `apps/desktop/src-tauri/src/ios_playback.rs`)
