2c595876f1378c50ba89d61ee1996b3f988e3dfe
- Add Services/YahooFinanceClient.swift: Swift actor wrapping Yahoo Finance unofficial APIs (price history, option chain, expirations, earnings date) with 15-min in-memory cache - Add Services/SignalEngine.swift: on-device IV Rank (rolling HV), SMA-50/200, swing-level pivot support/resistance, Black-Scholes delta/theta, signal strength scoring, and SHA-256 signal hash for change detection - Add Services/RecommendationEngine.swift: strike selection (delta 0.15–0.40 target 0.25), expiration mapping per horizon (0DTE/1DTE/weekly/monthly), rationale builder - Add Services/DataStore.swift: @MainActor ObservableObject persisting all app state as JSON files in the documents directory (UUID-keyed, no server IDs) - Add Services/BackgroundRefreshManager.swift: BGAppRefreshTask registration + foreground 15-min Timer; runs signal check per open position and fires local notifications when hash changes or delta/profit thresholds are crossed - Add Services/NotificationService.swift: UNUserNotificationCenter local notification helper + badge count management - Rewrite all 5 ViewModels to use DataStore + local services (no APIClient) - Update Models to use UUID ids; remove snake_case CodingKeys (no network layer) - Simplify AppDelegate: remove APNs, register BGTaskScheduler, start/stop timer - Simplify NotificationPermissions/Handler: local notifications only, UUID position deep-link - Update Info.plist: replace remote-notification with fetch+processing background modes, add BGTaskSchedulerPermittedIdentifiers - Gut APIClient.swift and Endpoints.swift (no longer used) - Update all Views to match new sync/async patterns and UUID-based models Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Description
No description provided
Languages
Swift
70%
Python
30%