Files
jarvis/README.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

64 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Jarvis (iOS)
A SwiftUI iOS client for a self-hosted RSS **news-correlation** platform. It shows
stories ranked by a server-computed **signal score**, caches full articles for offline
reading, and receives live updates over WebSocket.
> This repo is the **iOS app only**. The backend (RSS ingest, clustering, scoring,
> REST + WebSocket) is a separate service — see [`docs/backend/`](docs/backend/) for the
> build/handoff spec and [`API/contract.md`](API/contract.md) for the wire contract.
## Architecture
- **REST on launch → WebSocket for live updates.** The server computes signal scores;
the app only renders them.
- **Offline-first** via SwiftData (`CachedStory`, `CachedArticle`).
- **No auth** — local network / self-hosted (reach it over LAN or Tailscale).
- Data flows through `StoryStore` / dedicated view-models; views never call the API
directly.
```
Jarvis/
Models/ Codable + SwiftData models
Networking/ APIClient (REST), WebSocketManager
Store/ StoryStore, ServerSettings
Connectivity/ ConnectivitySettings, ConnectivityManager (LAN ⇄ Tailscale)
Views/
Home/ Story/ Reader/ Feeds/ Connectivity/ Shared/
```
## Requirements
- Xcode 16+ (developed on Xcode 26), iOS 17.0+ deployment target (SwiftData).
- [`XcodeGen`](https://github.com/yonaskolb/XcodeGen) — the `.xcodeproj` is generated
from [`project.yml`](project.yml) and is **not** committed.
## Build & run
```bash
brew install xcodegen # once
xcodegen generate # produces Jarvis.xcodeproj
open Jarvis.xcodeproj # ⌘R in Xcode, or:
xcodebuild -project Jarvis.xcodeproj -scheme Jarvis \
-sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 17' build
```
## Connecting to a backend
On first launch, enter the server as `host:port` (the app prepends `http://` and
`ws://`), e.g. `10.10.1.70:8098`. Remote access via Tailscale is configured in the
in-app **Connectivity → Remote Access** card; the app auto-selects the LAN address when
it's reachable and the Tailscale address when away.
## CI
GitHub Actions builds a matrix of macOS runners × Debug/Release on every push and PR —
see [`.github/workflows/ci.yml`](.github/workflows/ci.yml).
## Status
Frontend complete and verified against a live backend (signal feed, story detail,
article reader, feed manager, connectivity). Open work is tracked in
[Issues](../../issues) / [`docs/BACKLOG.md`](docs/BACKLOG.md).