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>
This commit is contained in:
Robin Kutesa
2026-06-18 18:04:59 +03:00
commit 27d0e22767
45 changed files with 4913 additions and 0 deletions

63
README.md Normal file
View File

@@ -0,0 +1,63 @@
# 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).