Skip to content

Add iOS app implementation plan and architecture documentation - #67

Open
shellen wants to merge 3 commits into
mainfrom
claude/plan-ios-conversion-opVru
Open

Add iOS app implementation plan and architecture documentation#67
shellen wants to merge 3 commits into
mainfrom
claude/plan-ios-conversion-opVru

Conversation

@shellen

@shellen shellen commented Feb 20, 2026

Copy link
Copy Markdown
Owner

Summary

This adds comprehensive documentation for the PullRead iOS companion app implementation, detailing the complete roadmap from project scaffolding through production release, including a novel on-device sync engine that ports the extraction pipeline to React Native.

Key Changes

  • Phase 1-5 implementation plan: Structured breakdown of iOS app development from Expo project setup through App Store submission

    • Phase 1: Project scaffolding and viewer HTML embedding
    • Phase 2: Fetch bridge and API handler for WebView communication
    • Phase 3: Native Expo module for iOS folder access via UIDocumentPickerViewController
    • Phase 4: Polish, safe area handling, dark mode, and device testing
    • Phase 5: Build configuration and App Store distribution
  • Folder access architecture: Detailed explanation of how users select and persist access to cloud-synced folders (iCloud Drive, Dropbox, Google Drive, Syncthing) using iOS security-scoped bookmarks

  • Phase 6: On-device sync engine: Novel approach to enable phone-only users and offline reading

    • Ports the desktop extraction pipeline (fast-xml-parser, linkedom, @mozilla/readability, turndown) to React Native with zero modifications
    • Replaces Node.js fs with native FolderAccessModule.writeFile()
    • Replaces bun:sqlite with expo-sqlite for URL deduplication
    • Implements WKWebView-based login flow for authenticated feeds (replacing Chrome cookie reading)
    • Enables bidirectional sync through shared cloud folders
  • Architecture rationale: Comparison of Expo + WebView against alternatives (Capacitor, PWA, full React Native rewrite, native Swift), justifying the chosen approach

  • Implementation details:

    • Security-scoped bookmark handling (.minimalBookmark for iOS)
    • Frontmatter YAML parsing with snake_case to camelCase mapping
    • 5-second folder polling for auto-refresh
    • Sequential article processing to respect iOS memory constraints
    • Foreground-only sync design (respecting iOS background task limitations)
  • Future features roadmap: Highlights, notes, share extension, widgets, background refresh, Spotlight search, Shortcuts integration

Notable Details

The plan emphasizes code reuse: the existing self-contained HTML/JS viewer (~400KB) runs unchanged in a WebView, while a native Expo module handles iOS-specific folder access. The sync engine reuses the desktop's pure-JavaScript extraction libraries without modification, making the iOS app capable of full RSS syncing without requiring the desktop app.

https://claude.ai/code/session_01G9YWzKz5uVxSwMf17RFeaU

Lays out a 5-phase roadmap for building the Expo + WebView iOS
companion app based on the existing build spec, covering project
scaffolding, fetch bridge, native folder access, polish, and
App Store distribution.

https://claude.ai/code/session_01G9YWzKz5uVxSwMf17RFeaU
The plan was missing context about how the desktop app is now Tauri
(not Swift) and how articles actually reach the phone. Adds a detailed
"How Articles Get to Your Phone" section explaining iCloud Drive,
Dropbox, Google Drive, and Syncthing workflows, plus a note clarifying
that the iOS Swift module is separate from the desktop Tauri shell.

https://claude.ai/code/session_01G9YWzKz5uVxSwMf17RFeaU
Adds a detailed plan for on-device article fetching in the iOS app.
The extraction pipeline (fast-xml-parser, Readability, linkedom, Turndown)
is pure JS and ports directly. Paywalled content uses WKWebView login
with WKHTTPCookieStore instead of Chrome cookie decryption.

https://claude.ai/code/session_01G9YWzKz5uVxSwMf17RFeaU
@shellen shellen mentioned this pull request Feb 26, 2026
9 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants