Files
bookstax/CHANGELOG.md
T
2026-03-21 09:49:01 +01:00

50 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BookStax Development Changelog
## Session 1
### Architecture & Foundation
- Full app architecture planned and implemented from scratch
- Target: iOS 26.2, Xcode 26, Swift 6, `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor`
- Models: `BookStackError`, all API DTOs (`ShelfDTO`, `BookDTO`, `ChapterDTO`, `PageDTO`, etc.), SwiftData cache models
- Services: `KeychainService` (actor), `ConnectivityMonitor` (@Observable), `BookStackAPI` (actor), `SyncService`
- ViewModels: `OnboardingViewModel`, `LibraryViewModel`, `SearchViewModel`, `PageEditorViewModel`
- Views: Full onboarding flow, library hierarchy, page reader (WebPage/WebView iOS 26), editor, search, settings, main tab view
- Localisation: English, German, Spanish (`Localizable.strings`)
- SwiftData model container, onboarding gate, Keychain credential loading wired in `bookstaxApp.swift`
---
## Session 2
### Bug Fixes
- **BookStackAPI filter syntax**: Fixed `book_id=X``filter[book_id]=X` for chapters and pages endpoints (BookStack API requirement)
- **Color picker in Settings not responding**: Added `.buttonStyle(.plain)` to swatch buttons inside `Form` (SwiftUI list button style conflict)
### Localisation
- **Search section fully translated**: Replaced all hardcoded English strings in `SearchView.swift` with `L()` keys
- **`ContentType.displayName`**: Changed from hardcoded English to `NSLocalizedString` (required because `nonisolated` structs can't call `@MainActor`-isolated `L()`)
- New localisation keys added to en/de/es: `search.loading`, `search.empty.title`, `search.empty.message`, `search.filter.all`, `search.type.page/book/chapter/shelf`
### Breadcrumb Navigation (Library)
- Added `BookInShelf` wrapper struct (Hashable) to carry shelf context through `NavigationStack`
- Added `Crumb` struct and `BreadcrumbBar` view (scrollable, tappable ancestor crumbs)
- Breadcrumbs embedded as first `Section` in `List` (prevents large title collapse that occurred with `.safeAreaInset`)
- `BooksInShelfView`: shows Library → Shelf crumbs, dismiss action on Library crumb
- `BookDetailView`: shows Library → Shelf → Book crumbs, new `shelfName: String?` parameter
- New `navigationDestination(for: BookInShelf.self)` in `LibraryView`
---
## Session 3
### App Icon
- Created three 1024×1024 app icon variants (light, dark, tinted) using provided artwork
- **Light** (`AppIcon.png`): isometric purple BookStax books on white background
- **Dark** (`AppIcon-dark.png`): same books on dark navy background (user-provided AI-generated image)
- **Tinted** (`AppIcon-tinted.png`): greyscale version of dark icon for iOS tinted icon mode
- `Contents.json` references all three variants with correct `luminosity` appearance entries
- Icon files also saved as standalone copies in `bookstax/bookstax/`
### Build Fix
- Fixed stray `t` character at top of `PageEditorView.swift` causing compile errors (`timport SwiftUI``import SwiftUI`)