Skip to content

tvOS port: Just Lift and pre-made workouts on Apple TV #1288

Closed

Description

@9thLevelSoftware

Summary

Feature request filed in Discord #feature-requests by tree2369: port the Phoenix app to tvOS (Apple TV) so guided workouts can run on a wall-mounted TV instead of peaking at a phone lying on the floor mid-workout.

Request Details

  • Target platform: tvOS / Apple TV (wall-mounted TV viewed during floor workouts).
  • Requested feature scope for the initial port: Just Lift and pre-made workouts.
  • The reporter has offered to contribute the work ("Happy to submit a PR myself if preferred") — the enhancement pipeline's feasibility/architecture stages should decide the collaboration route (reporter-contributed PR vs. internal implementation) before scoping.

Expected Behavior

Phoenix is available on Apple TV and provides access to Just Lift and pre-made workouts from the TV, so the user does not have to peek at their phone lying on the floor during a workout.

Actual Behavior

No tvOS target exists; the app is not available on Apple TV, so the phone is the only way to see Just Lift / pre-made workouts during a floor workout.

Impact / Notes

  • Repo: 9thlevelsoftware/project-phoenix-mp (Kotlin Multiplatform mobile app). A tvOS port would add a tvOS app target over the shared KMP module rather than a new codebase.
  • tvOS interaction is Siri Remote / remote-driven, not touch — the workout UI flow needs a tvOS interaction model, not just a recompile.
  • Open questions for the enhancement pipeline (feasibility/architecture stages; not blockers for filing): minimum tvOS version, v1 feature parity beyond Just Lift / pre-made workouts (e.g. live set tracking, BLE equipment sync), and App Store distribution.
  • Reporter is willing to submit a PR themselves.

Attachments

No attachments recorded.

Original Discord Request

<@1502654170031849644> 
A tvOS port to have access to things like just lift and pre-made workouts as in my case would be easier to have workouts on a wall mounted tv, rather than trying to peek at my phone laying on the floor 
Happy to submit a PR myself if preferred
  • Reporter: tree2369 (user id 666899089958633502)
  • Discord channel: #feature-requests, thread 1560129311367893023

Discord-Message-ID: 1560129311367893023

Activity

  1. 9thLevelSoftware commented on Oct 15, 2026

    @9thLevelSoftware
    OwnerAuthor

    Feasibility assessment — tvOS port (enhancement pipeline)

    Recommendation: accept — staged scope, gated on a short technical spike before architecture commits to a design.

    Why it is feasible

    The app is Kotlin Multiplatform (shared) hosted by thin native shells, so a tvOS port adds an Apple TV app target over the existing shared module rather than a new codebase. Concretely (verified against the repo):

    1. Compose UI on tvOS is achievable. JetBrains ships no tvOS Compose target, but the maintained dev.sajidali.compose-tvos Gradle plugin (v1.4.2, Sep 2026) injects tvOS variants (tvosArm64, tvosSimulatorArm64) for exactly the groups this repo uses (compose ui/foundation/material3, navigation-compose, lifecycle-viewmodel-compose, Koin compose, Coil 3). Prerequisite: upgrade Compose Multiplatform 1.11.1 → 1.12.x first (the fork's floor), validated against the existing Android/iOS apps.
    2. Bluetooth from Apple TV is possible but constrained. tvOS supports CoreBluetooth in the central role (scan/connect/GATT) — the pattern the machine link uses — but our vendored Kable fork has no tvOS target and tvOS lacks BLE state-restoration APIs and has connection/process limits. A thin tvOS GATT actual behind the existing BLE seam, verified on real Apple TV 4K hardware against the machine, is the make-or-break item.
    3. Missing tvOS APIs are scope-cuttable. No HealthKit, no ASWebAuthenticationSession, no document pickers on tvOS — v1 uses device-code/companion sign-in and excludes health sync, backups, and CSV import (~30 expect declarations need tvOS actuals; most are trivial, a handful become no-ops).

    v1 scope (assumed)

    Just Lift + pre-made workouts/routines, operable from the TV with Siri Remote focus navigation and 10-foot typography. No analytics/insights/portal features on tvOS.

    Key risks

    • Third-party Compose tvOS fork dependency (drift/abandonment) — largest project-level risk; pin versions and keep the plugin as the single integration seam.
    • BLE hardware proof on Apple TV (cannot be simulated).
    • Compose 1.12 upgrade regression risk for existing platforms.

    Effort

    Time-boxed spike first (~1–2 weeks: Compose upgrade, compose-tvos integration, shared compiles for tvOS, BLE shim, hardware proof). If it passes: roughly 6–10 engineer-weeks total (foundation, app shell + sign-in + navigation, Just Lift/routine TV UX + BLE, CI/distribution).

    Interim workaround

    iPhone screen mirroring (AirPlay) to Apple TV already puts the phone UI on the wall TV at zero cost — viewing solved, interaction still on the phone.

    Collaboration

    Thanks @tree2369 for offering a PR! The build/dependency/BLE foundation touches shared build systems and is probably best project-owned; once it lands there will be well-bounded TV UX packets that would be great to collaborate on.

    Next stage: architecture, gated on the spike outcome (do not deep-design TV UX before Compose-on-tvOS and Apple TV BLE are proven).

  2. 9thLevelSoftware commented on Oct 15, 2026

    @9thLevelSoftware
    OwnerAuthor

    Architecture — tvOS port (enhancement pipeline)

    Decision: a standalone Apple TV app over the existing shared module. The phone apps stay as they are, except a Compose 1.12 upgrade that lands first in its own PR. v1 on the TV is Just Lift plus the routines already saved on the account (Daily Routines). The TV signs in with the existing email and password, pulls those routines through the existing sync, and writes finished sessions back the same way. No new portal API and no new database schema.

    The technical spike from feasibility is still mandatory. It gates implementation, not this design. Machine control from the TV is not accepted until a real Apple TV 4K connects to the machine, sends one workout command, and receives one rep or monitor notification. If that proof fails, we stop and revise. We will not silently switch to a phone-mirroring protocol in the same change.

    What changes relative to the feasibility note

    • The vendored Kable module is the Android GATT patch only. iOS already uses published Kable. tvOS must not grow a target inside that Android patch. The connection manager stays as it is.
    • Sign-in on the TV is the email/password grant the app already has. A device-code flow would be new portal work, so it is not v1. Google/Apple buttons are hidden on the TV. An account that has never set a password sets one on the phone or portal first.
    • "Pre-made workouts" means Daily Routines, not a new catalog and not Cycles or Single Exercise.
    • The existing Android TV-remote hint is not an Apple TV port. tvOS gets its own source set. It must not report itself as iOS (that turns on Apple Health and an iOS-only workout timer), but sync still tags the device as ios because the server only accepts ios or android.

    v1, in one pass

    Wall-TV display of weight, reps, and rest, driven by the Siri Remote, for Just Lift and saved routines. Play/Pause stops the set through the existing stop command. Health sync, CSV, backups, analytics, editors, cycles, and voice safe-word are out. Same App Store listing, not a second app. Minimum tvOS 17 on Apple TV 4K (2nd generation or later).

    AirPlay mirroring remains the interim until this ships.

    Collaboration

    The build, dependency, and Bluetooth foundation stays project-owned. Once the TV shell compiles, focus and layout packets for the TV screens are the right place for a contributed PR.

    Next stage: integration model, then a visual prototype of the TV screens. A thumbs-up on that prototype counts as acceptance.

  3. 9thLevelSoftware commented on Oct 15, 2026

    @9thLevelSoftware
    OwnerAuthor

    Integration model for the Apple TV port is done. Path A still stands: a standalone Apple TV app over the shared module, not a phone mirror and not a new portal API.

    What the map locks for the next stages:

    • v1 screens are the existing Just Lift, Daily Routines, overview, set-ready, active workout, and complete routes, inside a new TV shell. The phone navigation graph stays as it is.
    • Sign-in is the existing email/password grant. Login by itself does not pull routines, so the TV sign-in success path must call the existing sync. A workout saved before that sign-in rides the same push. Google and Apple buttons stay on the phone and are hidden on the TV.
    • The TV is not compiled as iOS. isIosPlatform stays false. Sync rows are tagged ios, not android, because the server only accepts those two values.
    • No schema change, no HealthKit, no CSV, no backups. The Compose upgrade remains a separate phone PR. Machine programming from the TV still waits on a real Apple TV 4K Bluetooth proof before the feature PR.

    Next step is a visual mockup of the TV screens, with weight, reps, and rest readable from the floor. AirPlay mirroring remains the workaround until that hardware proof lands.

  4. 9thLevelSoftware commented on Oct 15, 2026

    @9thLevelSoftware
    OwnerAuthor

    Prototype progress for #1288: the standalone Apple TV architecture and integration model are reviewed. A Phoenix-themed 1080p TV-home browser concept is drafted, but the prototype gate is not complete and no device behavior is claimed.

    The stage requires the phoenix-phantom-prototyping skill and in-app captures. That skill is unavailable in the assigned profile, and the supplied persistent launcher targets an iPhone simulator, not the new TV shell. I am retaining the draft rather than passing browser imagery off as native Apple TV evidence. The capture capability/policy needs to be resolved before the complete TV flow can be published for escalated-model signoff. This is not a request for reporter approval and does not change the standalone scope or the real-hardware BLE implementation gate.

  5. 9thLevelSoftware commented on Oct 15, 2026

    @9thLevelSoftware
    OwnerAuthor

    Prototype capability restored — TV design stage resuming

    The prototype gate blocker (missing phoenix-phantom-prototyping skill + iPhone-only launcher) is resolved:

    1. Skill restored (v1.1.0) to the pipeline worker profiles.
    2. TV-shell capture path built and verified (phantom-tv-preview-launch.sh + tvosPrototypeHost SwiftUI design host): the design prototype now renders on a real tvOS 27 simulator (Apple TV 4K, 1920x1080) with the real tvOS focus engine — end-to-end build → launch → capture verified today, with a hard 1920x1080 assertion on every capture.

    The earlier browser concept (index.html + issue-1288-tv-home-concept.png) is superseded by tvOS-simulator captures. The stage now continues: full architecture-required screen inventory captured on the TV simulator, independent review, published visual assets, then the signoff gate.

    Fidelity note (pre-declared): until the real tvosApp/tvosMain (Compose) lands after spike S4, captures come from the SwiftUI design host and prove TV form factor (focus order, 1080p / 3m floor readability, layout) rather than shared-code rendering. Prototype images will be labeled DESIGN PROTOTYPE — tvOS simulator, not a device build. Feature implementation remains gated on S4 (real Apple TV 4K BLE proof).

  6. tresby commented on Oct 17, 2026

    @tresby

    @9thLevelSoftware Did you need me to do any real world testing on a physical Apple TV to allow this to progress further? Happy to help in any way!

  7. 9thLevelSoftware commented on Oct 20, 2026

    @9thLevelSoftware
    OwnerAuthor

    Additional info from Discord thread:

    Any way i can help with this? need me to run a small POC apple tv build to prove BLE connection between the apple tv and the board?

    — added by ticket bot

  8. 9thLevelSoftware commented on Oct 26, 2026

    @9thLevelSoftware
    OwnerAuthor

    Apple TV beta progress: PR #1352 is merged into main at a923ef0, including the existing 1.0.8 version change. Independent review caught and fixed post-login routine sync before merge. Full shared/Android tests, native TV tests, real simulator remote tests, device builds and required exact-head CI passed.

    Apple's TV provisioning/profile setup is verified. The TV-only TestFlight build/upload run is now running; it is not available to testers yet. No App Store/production submission or unrelated full release was triggered.

    As authorized, real Apple TV/Vitruvian Bluetooth behavior and hardware recovery remain beta test items, not claims of verified hardware safety. App Stop is not a certified emergency stop. I'll post the exact TestFlight build and availability once Apple confirms them.

  9. 9thLevelSoftware commented on Oct 26, 2026

    @9thLevelSoftware
    OwnerAuthor

    Apple TV beta delivery update: PR1352 and version1.0.8 are merged. The TV-only release passed real simulator tests, signed archive, signature and TV-profile validation, but stopped after export because its expected IPA filename was missing; nothing was uploaded.

    The narrow export-handling correction is PR1354: accept exactly one exported IPA only after checking its app, platform and version, then normalize its filename. Independent review approved it; local tooling61/61 and version8/8 pass. Required CI is running before merge and retry.

    TestFlight availability is still unverified. Physical Apple TV/Vitruvian Bluetooth and hardware recovery remain explicitly unverified beta tests; app Stop is not a certified emergency stop. No App Store production submission or unrelated full release was triggered.

  10. 9thLevelSoftware commented on Oct 26, 2026

    @9thLevelSoftware
    OwnerAuthor

    Apple TV beta 1.0.8 (202610262001) is now available to existing internal and external testers.

    Apple readback on 2026-10-27 confirms TV_OS build a0abbf57-e287-41d1-aee4-8b1308961775: VALID, Beta App Review APPROVED, internal/external IN_BETA_TESTING. Exact membership in Me and Reddit Squad is verified; no new testers invited.

    Merged: feature #1352, version #1349, export fix #1354. Signed TV-only run40408355550 passed at 622e6033. No rebuild/re-upload or production App Store submission.

    Try it: open TestFlight on Apple TV using your existing tester Apple Account and select Phoenix 1.0.8 (202610262001). Choose your trainer explicitly; start at minimal resistance. Try Just Lift or sign in and sync saved Daily Routines; use Sync Now after resolving identity prompts. Siri Remote directions/Select navigate, Play/Pause requests Stop, and Menu stops before exit confirmation.

    Experimental limits: physical Apple TV/Vitruvian Bluetooth, hardware stop/recovery and live cloud roundtrips remain unverified. App Stop is not a certified emergency stop; keep access to the machine's normal safety controls. Report TV/tvOS and trainer models plus exact steps. The earlier non-blocking iOS-native suite remains failed (215/4,014 versus 214 baseline); this TV delivery does not certify all phone/full-release gates.

  11. added a commit that references this issue on Oct 28, 2026
    a923ef0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions