Files
jarvis/CLAUDE.md
Robin Kutesa 27d0e22767 Initial commit: Jarvis iOS app
SwiftUI client for a self-hosted RSS news-correlation platform: signal feed,
story detail, article reader, feed manager, and LAN⇄Tailscale connectivity.
Project generated from project.yml via XcodeGen.

Includes CI build matrix (macOS 14/15 × Debug/Release), issue templates,
backlog, and API/backend handoff docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 18:04:59 +03:00

2.3 KiB

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

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)