You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SkyTwin's desktop app (#13) initially targets macOS. For HN launch and broad adoption, it needs to run on Windows and Linux too. Mobile access (#15) starts as a responsive web dashboard over local network — but native iOS and Android apps provide a better experience for approvals on the go.
No platform-specific native code (pure TypeScript + Electron)
electron-builder supports macOS, Windows, Linux from same codebase
Proposed Change
1. Windows build
MSI/NSIS installer via electron-builder. System tray, native notifications, auto-launch all handled by Electron cross-platform APIs. First-launch detects CockroachDB, guides install via Chocolatey or Scoop.
2. Linux build
AppImage (universal) + .deb (Debian/Ubuntu) + .rpm (Fedora/RHEL). Desktop entry file for app menu. Notifications via libnotify (Electron handles). Auto-launch via XDG autostart.
3. Native iOS app
React Native (recommended) or Swift. Connects to desktop via mDNS (Bonjour native on iOS). Same session token auth as #15 web mobile. Push notifications bridged from SSE. Swipe-to-approve UX. Background refresh for new approvals.
4. Native Android app
React Native (shared with iOS) or Kotlin. mDNS via Android NSD. Material Design approval cards. Notification channels per urgency level.
Framework recommendation: React Native with Expo
~80% code sharing, one codebase, ~3d total vs ~5d for native. Adequate for an approval-focused app.
Acceptance Criteria
Windows: MSI installer downloads → double-click → install wizard completes → SkyTwin appears in Start menu → launches to onboarding wizard
During implementation, maintain two sources of truth to survive context compaction:
Local context file: Write progress, decisions, and blockers to .context/issue-16-cross-platform.md (gitignored). Update this file after each meaningful step. On compaction, re-read this file to restore state.
GitHub issue: Post progress comments on #16 at key milestones (subtask complete, blocker hit, design decision made). Reference the issue URL in your conversation so it persists across compaction: Cross-platform builds: Windows, Linux, native mobile apps #16
This ensures no quality loss across compaction events — the local file has granular state, the GitHub issue has durable history.
Context
SkyTwin's desktop app (#13) initially targets macOS. For HN launch and broad adoption, it needs to run on Windows and Linux too. Mobile access (#15) starts as a responsive web dashboard over local network — but native iOS and Android apps provide a better experience for approvals on the go.
Claude Code estimate: ~5-8h
Current State (verified 2026-04-04)
Proposed Change
1. Windows build
MSI/NSIS installer via electron-builder. System tray, native notifications, auto-launch all handled by Electron cross-platform APIs. First-launch detects CockroachDB, guides install via Chocolatey or Scoop.
2. Linux build
AppImage (universal) + .deb (Debian/Ubuntu) + .rpm (Fedora/RHEL). Desktop entry file for app menu. Notifications via libnotify (Electron handles). Auto-launch via XDG autostart.
3. Native iOS app
React Native (recommended) or Swift. Connects to desktop via mDNS (Bonjour native on iOS). Same session token auth as #15 web mobile. Push notifications bridged from SSE. Swipe-to-approve UX. Background refresh for new approvals.
4. Native Android app
React Native (shared with iOS) or Kotlin. mDNS via Android NSD. Material Design approval cards. Notification channels per urgency level.
Framework recommendation: React Native with Expo
~80% code sharing, one codebase, ~3d total vs ~5d for native. Adequate for an approval-focused app.
Acceptance Criteria
Testing Plan
Effort Estimate
Total: ~5-8h Claude Code time
Files Reference
Out of Scope
Related
Working Context Protocol
During implementation, maintain two sources of truth to survive context compaction:
.context/issue-16-cross-platform.md(gitignored). Update this file after each meaningful step. On compaction, re-read this file to restore state.This ensures no quality loss across compaction events — the local file has granular state, the GitHub issue has durable history.