iOS app for storing, organizing, and composing harmonica tabs with musical note support. Useful for learning play on harmonica.
- Song Library — Create, browse, and manage harmonica songs with title, key, and metadata
- Tab Editor — Compose melodies using hole numbers and bend notations (blow/draw/bend)
- Music Theory Integration — Note-aware input powered by the MusicTheory (cemolcay) library
- Harmonica Layout Visualizer — Interactive layout grid showing notes per hole, respecting key and tuning
- Configurable Layout — Lets users adjust harmonica type, key, and display preferences
- Persistent Storage — All songs and tabs saved locally via SwiftData
- Tab Navigation — Isolated per-tab navigation stacks with scoped routers
![]() |
![]() |
![]() |
![]() |
![]() |
| Layer | Technology |
|---|---|
| UI | SwiftUI (iOS 26+) |
| State Management | @Observable, @Environment, @Query |
| Persistence | SwiftData |
| Music Theory | MusicTheory by cemolcay |
| Navigation | Custom Scope + NavigationStack |
| Language | Swift 6 |
HarmonicaNotepad/
├── App/
│ ├── HarmonicaNotepadApp.swift # Entry point, SwiftData container setup
│ └── AppNavigationModel.swift # Central navigation coordinator
├── Navigation/
│ ├── AppRouterImpl.swift # Generic scoped router
│ ├── TabRouters.swift # Type aliases per tab scope
│ └── Destinations/ # NavigationDestination modifiers per tab
├── Models/
│ ├── Song.swift # @Model — song metadata
│ ├── Melody.swift # @Model — tab/note sequence
│ └── HarmonicaLayoutConfiguration.swift # @Observable layout config
├── Views/
│ ├── SongListView.swift
│ ├── SongDetailView.swift
│ ├── MelodyEditorView.swift
│ └── HarmonicaLayoutView.swift
└── Components/
└── Shared reusable SwiftUI components
- MusicTheory — Swift music theory library for note, scale, and chord representation
All other functionality uses native Apple frameworks only.
MIT License — see LICENSE for details.




