Skip to content

Repository files navigation

InterlinedList

InterlinedList for macOS

A native macOS client for InterlinedList — built with Swift 6, SwiftUI, and SwiftData.

CI statusCI status (dev)Swift 6.0macOS 15+Xcode 16.2

Last commitOpen issuesOpen pull requestsTop languageCode sizeRepo size


About

InterlinedList for macOS mirrors every capability of the InterlinedList web app, organized as native macOS features: a timeline, a composer window, structured lists with a schema DSL, an offline-capable Markdown document store, social and organization features, notifications, and Settings — all backed by the documented InterlinedList API.

The project is greenfield. Scope, architecture, milestones, and branding are pinned in PLAN.md; orchestration rules live in ORCHESTRATION.md. Progress is recorded in docs/progress.md and endpoint coverage in docs/api-coverage.md.

Status

MilestoneScopeStatus
M0 — FoundationXcode project, three SPM packages, CI, auth, Keychain, brand assetsShipped
M1 — Read-only coreTimeline (all/mine/tag), threads, public list browsing, profile headerShipped
M2 — PostingComposer (⌘N), replies, digs, reposts, edit/delete own messagesShipped
M3 — ListsCRUD, schema DSL editor, rows table, nesting, connections graph, watchers, GitHub refreshShipped
M4 — DocumentsFolder tree, Markdown editor/preview, image upload, delta sync engineShipped
M5 — Social & notificationsFollow/unfollow, requests, mutuals, notifications tray, dock badgeShipped
M6 — Subscriber & orgsMedia attachments, scheduled posts, cross-posting, OAuth linking, organizationsShipped
M7 — ShipCSV exports, Settings polish, sandbox + notarization, Sparkle, accessibility, brand QAPending

Endpoint coverage today: 97 / 98 implemented, 66 / 98 fully tested, 25 / 98 partial. See docs/api-coverage.md for the row-by-row matrix.

Architecture

InterlinedList.xcodeproj
App/ # App target (UI only)
Composition/ # AppEnvironment composition root
Features/ # Timeline, Compose, Lists, Documents, Social, Orgs, Notifications, Settings, Onboarding
MenuCommands/ # ⌘N etc.
Navigation/ # Sidebar, deep-link routing
Resources/ # Asset catalog, fonts, Info.plist, entitlements
Packages/
InterlinedKit/ # API layer: APIClient, Endpoints, DTOs, Auth, Pagination, Errors
InterlinedDomain/ # Business logic: Models + Services on top of InterlinedKit protocols
InterlinedPersistence/ # SwiftData schemas, cache policy, document sync engine
AppTests/ # App-target XCTest (BDD-named)
docs/ # progress, api-coverage, decisions, spikes, user guides

See PLAN.md §3 for the rules at each boundary — in particular the kit-import policy from Decision 0003: the App target imports InterlinedKit only from the composition root.

Building

Requirements:

  • macOS 15 (Sequoia) or later (see Decision 0004)
  • Xcode 16.2 / Swift 6.0.3

Build and test:

# All three SPM packages
swift test --package-path Packages/InterlinedKit
swift test --package-path Packages/InterlinedDomain
swift test --package-path Packages/InterlinedPersistence
# App target (incl. AppTests)
xcodebuild test \
-project InterlinedList.xcodeproj \
-scheme InterlinedList \
-destination 'platform=macOS'

CI runs the same steps on every push and pull request (.github/workflows/ci.yml) and uploads the unsigned .app bundle as a workflow artifact.

Live contract tests

The env-gated contract suite in InterlinedKitTests hits the real API. To run it locally, export credentials before invoking swift test:

export INTERLINEDLIST_EMAIL="you@example.com"export INTERLINEDLIST_PASSWORD="..."
swift test --package-path Packages/InterlinedKit

The CI workflow does not run contract tests. Credentials must never be committed.

Documentation

Branding

All visual identity follows the official InterlinedList branding standards. The product name is InterlinedList — capital I, capital L, no spaces or hyphens. See PLAN.md §9 for the palette, typography, and asset rules used throughout the app.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages