# LibNovel v2 iOS — Feature Tracker Design reference: `ui/src/routes/` (SvelteKit web UI) All new code lives in `ios/LibNovelV2/`. --- ## Status legend - ✅ Done - 🔨 In progress - ⏳ Not started --- ## Features | # | Feature | Files | Status | |---|---------|-------|--------| | 1 | Directory scaffold | `ios/LibNovelV2/` tree | ✅ | | 2 | Models | `Models/Models.swift` | ✅ | | 3 | Networking | `Networking/APIClient.swift` | ✅ | | 4 | Services | `AuthStore`, `AudioPlayerService`, `AudioDownloadService`, `NetworkMonitor`, `BookVoicePreferences` | ✅ | | 4b | App entry + RootTabView + stub views | `App/LibNovelV2App.swift`, `App/ContentView.swift`, `App/RootTabView.swift`, `Extensions/NavDestination.swift` | ✅ | | 5 | Auth / Login | `Views/Auth/AuthView.swift` | ✅ | | 6 | Home screen | `Views/Home/HomeView.swift`, `ViewModels/HomeViewModel.swift`, `Views/Common/CommonViews.swift` | ✅ | | 7 | Library screen | `Views/Library/LibraryView.swift`, `ViewModels/LibraryViewModel.swift` | ✅ | | 8 | Browse / Discover | `Views/Browse/BrowseView.swift`, `Views/Browse/BrowseCategoryView.swift`, `ViewModels/BrowseViewModel.swift` | ✅ | | 9 | Search | `Views/Search/SearchView.swift`, `ViewModels/SearchViewModel.swift` | ✅ | | 10 | Book Detail | `Views/BookDetail/BookDetailView.swift`, `ViewModels/BookDetailViewModel.swift` | ✅ | | 11 | Chapter Reader | `Views/ChapterReader/ChapterReaderView.swift`, `ViewModels/ChapterReaderViewModel.swift` | ✅ | | 12 | Audio mini-player + full player | `Views/Player/PlayerViews.swift` | ✅ | | 13 | Downloads screen | `Views/Downloads/DownloadsView.swift` | ✅ | | 14 | Profile / Account | `Views/Profile/ProfileView.swift`, `Views/Profile/VoiceSelectionView.swift` | ✅ | --- ## Design system recap | Token | Value | |-------|-------| | Main bg | `zinc-900` `#18181b` | | Card bg | `zinc-800` `#27272a` | | Border | `zinc-700` `#3f3f46` | | Primary text | `zinc-100` `#f4f4f5` | | Secondary text | `zinc-400` `#a1a1aa` | | Accent / CTA | `amber-400` `#f59e0b` | ## Key patterns (quick ref) - **Cover images**: always proxy via `/api/cover/{domain}/{slug}` - **Download keys**: `slug::chapterN::voice` (`::` separator — slugs contain `-`) - **Voice fallback**: book override → global default → `"af_bella"` - **Offline**: `NetworkMonitor` env object + `OfflineBanner` at top of every networked view - **Observable**: new types use `@Observable`; existing services use `ObservableObject` - **Navigation**: `NavigationStack` + `NavDestination` enum + `.appNavigationDestination()` - **Haptics**: `.light` for selection, `.medium` for primary actions - **Animations**: `.spring(response:dampingFraction:)` for all interactive transitions