# Jarvis — Claude Code Handoff ## What this is Jarvis is an iOS app (SwiftUI + SwiftData) that connects to a self-hosted RSS correlation platform. It displays news stories ranked by signal score, caches full article content for offline reading, and receives live updates over WebSocket. ## Architecture - REST on launch → WebSocket for live updates - Server computes signal scores — app only renders them - Full offline support via SwiftData cache - No auth — local network / self-hosted only ## Files produced so far - `API/contract.md` — full REST + WebSocket API spec - `Jarvis/Models/Models.swift` — all Codable structs + SwiftData models - `Jarvis/Networking/APIClient.swift` — REST layer (actor-based) - `Jarvis/Networking/WebSocketManager.swift` — WS connection + reconnect backoff - `Jarvis/Store/StoryStore.swift` — central ObservableObject, drives all views - `Jarvis/Store/ServerSettings.swift` — persists server host to UserDefaults - `Jarvis/JarvisApp.swift` — app entry point, SwiftData container - `Jarvis/Views/RootTabView.swift` — tab navigation - `Jarvis/Views/Onboarding/OnboardingView.swift` — server setup screen ## Views still needed - `SignalFeedView` — home screen, story list sorted by signal score - `StoryDetailView` — cluster detail, timeline, consensus/conflict - `ArticleReaderView` — full article, cached badge, more from cluster - `FeedManagerView` — feed list, health states, add/delete - `LatestView`, `SavedView`, `SearchView` — secondary tabs ## Design tokens - Primary accent: `KisaniOrange` = #FF5C00 (add to Assets.xcassets) - Background: pure black #000000 - Surface: #111111, #1A1A1A - All views: `.preferredColorScheme(.dark)` ## Key decisions already made - Story = user-facing product object (never expose Cluster to UI) - Pipeline: Article → Cluster → Story - Signal score is server-computed, breakdown exposed as `scoreBreakdown` - WebSocket pushes lightweight events (storyId + score only), app refetches full object via REST - WS reconnect: exponential backoff 1s → 2s → 4s → max 60s - Pagination: cursor-based via `nextCursor` ## To start in Claude Code ```bash cd jarvis # Create new Xcode project named Jarvis, iOS target # Drag all .swift files into the project # Add KisaniOrange (#FF5C00) to Assets.xcassets as a Color Set # Set minimum deployment target to iOS 17 (SwiftData requirement) ```