Repository navigation
Add Kodi Reader for iOS (Expo, Expo UI, Liquid Glass) - #1
Conversation
An iOS-first port under Mobile/ built with Expo SDK 57, Expo Router native tabs, @expo/ui SwiftUI components and expo-glass-effect. It hosts the Mac app's reader.js/reader.css engine in a WKWebView, so pagination, positions and highlight anchors match the macOS app. Includes: library with covers and progress, EPUB import (fflate unzip plus OPF/NCX/nav parsing), paginated reading with glass chrome, highlights and Markdown notes, contents and appearance sheets, light/dark/system themes, Notes tab with Markdown export, and saving web pages as reader-mode books (Readability and ArticleEPUBBuilder ported to TypeScript). PDFs open in the native WebKit viewer. Not yet ported: Ask AI, cloud sync, Excalidraw drawings, PDF highlights. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
@Anthonydesinenerd is attempting to deploy a commit to the devolly's projects Team on Vercel. A member of the Team first needs to authorize it. |
Opening a book took 10 to 18 seconds in the simulator. Timing showed the cost was WebKit starting a new content process for every reader web view, plus round trips through the JS thread before a chapter could lay out. - Move the reader out of the route stack into ReaderOverlay, a layer that lives for the whole session. Its web views start at launch, so opening a book is a page navigation and reopening the same book is instant. - Write each chapter's boot data (runtime options, position, highlights) into its <head>; bridge.js boots the page on DOMContentLoaded itself. - Preload the next chapter in a second web view and swap it to the front at a chapter end or a Contents jump. - Always navigate to a fresh file name instead of reloading, and route external links through the origin whitelist instead of a JS handshake. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Record a cover's path whenever the copy succeeds. A File's `exists` read stale right after copying, so first imports had no cover. Books imported before this fix recover their cover path on launch. - Replace the header menu, which did not open, with a More button that shows a native action sheet (Open Web Page, Add Sample Books). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dev-olly
left a comment
There was a problem hiding this comment.
Reviewed af9e201. Please address the five inline findings before merging: destructive identifier handling, EPUB access to private library data, unawaited SDK 57 filesystem operations, book ID collisions, and pending note edits discarded on dismissal.
Validation: TypeScript typecheck, Expo lint, and the iOS JavaScript export passed. Targeted temporary harnesses reproduced the identifier deletion/collision, asynchronous import, and note-dismissal paths. A native macOS WKWebView test using synthetic files confirmed that an EPUB script can read library.json with the configured permissions. Native iOS UI behavior is still unverified because the review machine has no iOS simulator runtime installed.
dev-olly
left a comment
There was a problem hiding this comment.
Addressed the five review findings in 73a2db0: SHA-256 storage IDs and path containment, book-scoped WebKit access with a nonce-based script policy, awaited filesystem operations, and pending note edits committed on dismissal. Added regression coverage and Mobile checks CI; all five review threads are resolved.
Validation: all 10 regression tests, typecheck, lint, and iOS JavaScript export passed in GitHub Actions: https://github.com/dev-olly/kodi-reader/actions/runs/38647575817. The native macOS WKWebView smoke test passed pagination, fragment navigation, position restore, highlight painting, and isolation checks. Native iOS UI testing remains unverified because no simulator runtime is installed on the review machine.
The remaining Vercel failure is contributor deployment authorization, unrelated to the mobile build checks.
Kodi Reader for iOS (Expo + Liquid Glass)
Adds
Mobile/, an iOS-first port of Kodi Reader built with Expo SDK 57, Expo Router native tabs,@expo/uiSwiftUI components, andexpo-glass-effect. It reusesreader.jsandreader.cssfromSources/ReaderUI/Resourcesinside aWKWebView, so pagination, anchors, and highlight painting are the same engine as the Mac app. Reading positions and annotations use the same simplified-CFI locators.What works
Form): light/dark/system, New York/Georgia/Palatino/Charter/Helvetica/San Francisco, size, line spacing, margins, justify, hyphenation. Changes reflow live.ArticleEPUBBuilderported to TypeScript, images inlined).Not in this PR
Ask AI, cloud sync, Excalidraw drawings, PDF highlights.
Layout
Running
Tested on the iPhone 17 Pro simulator (iOS 26.5): import, reading, TOC, highlights, notes, theme switching, web import.
npx tsc --noEmitandnpx expo lintare clean.🤖 Generated with Claude Code