Admin
Add native iOS artist Stripe product and price management
Laurel/admin should be able to manage membership commerce from the iOS app instead of seeing purchase prompts. In Stripe terms, this means editing products/entitlements and addi...
A live tracker for what is shipped, what is active, and what is queued next across the Fanful creator platform, agent surfaces, and mobile apps.
GitHub issue labels ยท updated 4:36 AM
Workstream
SwiftUI and AVFoundation work for iPhone: native playback, account handoff, APNs, TestFlight, and the Fanful companion workflows creators and fans need.
Roadmap stage
Useful sparks that might become real once a dependency or user need gets sharper.
No maybe items right now.
Roadmap stage
Committed roadmap work that exists, but is not the next thing to pull.
Admin
Laurel/admin should be able to manage membership commerce from the iOS app instead of seeing purchase prompts. In Stripe terms, this means editing products/entitlements and addi...
Ops
Context The native iOS app now has TestFlight/releasereadiness documentation and physicaldevice build coverage, but the first public App Store submission is a separate checklist...
Roadmap stage
Committed follow-ups that are queued behind the active work.
No next items right now.
Roadmap stage
Current branches and PRs. These should move as GitHub issue labels change.
No active items right now.
Roadmap stage
Shipped work, newest first, with screenshots where the change is visual.
Admin
Motivation Agent/backend lesson availability writes are available through the shared creator.commerce.lessonavailabilityupdate contract, and Android parity shipped in 1880/1882....
Admin
Parent: 925 Shared contract parent: 1052 Parity source: web 1862, agents 1692 and 1750 Related Android parity: 1867 Context Web admin and agent surfaces now expose confirmed sho...
Admin
Context Android now exposes guarded native shop product details controls through 1845 and records executed local APPENV=test evidence through 1847. The shared agent contract is ...
Admin
Parent: 1417 Contract parent: 530 Context The iOS app already consumes the shared lessonpolicyreadiness.v1 read contract and has simulator evidence for ready and unavailable les...
Admin
Parent: 925 Related shared creatorcommerce contract: 1052 Goal Expose the ready creator.shopproduct.visibilityupdate confirmedwrite contract in native iOS so an artist/admin can...
Qa
Parent QA issue: 1504 Related iOS parity issue: 1502 Android precedent: 1604 Journey catalog: 1231 Goal Prove that native iOS can consume local webcreated live chat reply/reacti...
Qa
Parent catalog: 1231 Live chat parent: 1502 Shared notification contract: 159 Goal Add native iOS controls for muting and unmuting community channel notifications, covering the ...
Live
Parent: 1502 Shared parity parent: 1499 Android reference: 1584 Earlier iOS shell: 1527 Goal Let signedin iOS listeners upload a communityscoped custom emoji from the native app...
Live
Parent: 1502 Backend route: /api/admin/notifications Goal Bring the native iOS publisher/admin notification center closer to the live Fanful notification contract by adding refr...
Live
Parent: 1502 Depends on shipped backend route work: 1539 Context iOS already has a native Notifications tab with listener and publisher event rows from the mobile bootstrap/fixt...
Live
Parent: 1502 Depends on shipped backend endpoint issue: 1539 Related shared parity parent: 1499 Goal Replace the native iOS custom emoji "coming soon" shell with real persisted ...
Admin
Parent: 1371 Related commerce parent: 925 Goal Add native iOS publisher controls for creating an inactive membership tier through the alreadyshipped confirmed creatorcommerce ti...
Admin
Parent: 925 Contract parent: 1371 Follows: 1540 Context PR 1552 shipped native iOS archive/restore controls for existing membership tiers. The shared creatorcommerce API on main...
Admin
Parent: 925 Shared lifecycle API: 1371 Crossplatform tier parent: 534 Goal Add native iOS publisher/admin controls for membership tier lifecycle management now that the shared c...
Qa
Goal Update the internal /admin/userjourneys iOS catalog so the latest shipped native iOS parity slices are indexed with exact evidence, related issues, and blocker notes. Scope...
Commerce
Context 1493 tracks referral scheme parity for agents, iOS, and Android. The agent read contract from 1509 is now live through the creatorcommerce manifest, but iOS still lacks ...
Live
Parent: 1502 Shared contract dependency: 1500 Goal Add the native iOS shell for communityscoped custom emoji so the app can render/pick custom emojis from the mobile bootstrap c...
Live
Parent: 1502\nDepends on shared event delivery contract: 1500\n\n Goal\n\nAdd the native iOS notification inbox surface for Discord/Slackgrade Fanful community events without in...
Live
Parent: 1502 Shared contract: 1500 Master parity: 1499 Goal Let iOS listeners react to any community chat message with more than the legacy heartonly control, using system emoji...
Live
Parent: 1499 Depends on shared contract issue: 1500 Web parity reference: 1501 Goal Bring the iOS app to parity with the Discord/Slackgrade Fanful live chat contract. Scope Nati...
Qa
Goal Create fanful.net/userjourneys as the durable catalog of essential Fanful jobs to be done, with iPhone/iOS test steps, screenshots, observations, and links to the related G...
Admin
Parent: 925 Backend/API dependency shipped: 1186 Add the native iOS artist/admin controls for membershiptier Stripe Price create/select now that the shared serverowned creatorco...
Ops
Parent: 636 Why The iOS TestFlight commandline upload path currently depends on Xcode's local Apple account/keychain state. Build 0.1.0 (3) archived successfully, but upload fai...
Admin
Why Mark noted that admin/native screens can be confusing when they show numbers or controls that might be placeholders. In the iOS app, creator/admin metrics and controls shoul...
Admin
Parent: 560 Related: 851 Why Mark's admin feedback: when signed in as Laurel/the creator, the native app should not ask for lowlevel stream URLs. It should provide a simple nati...
Admin
Parent: 560 Parity sibling to create/track for Android and web/agent surfaces as needed. Why Mark clarified that live video/chat rooms are separate from alwayson 24/7 text chann...
Platform
Parent: 560. Related product decision: 1075. Builds on 1107. Context Mark clarified that the MVP should be one Fanful app with fan mode and publisher mode, not a dedicated Laure...
Live
Parent: 560. Contract: 1078. Builds on shipped iOS shell 1090. Context The iOS app now has a selectedcommunity and fan/publisher mode shell, but Mark's oneapp Fanful model also ...
Media
Context Mark asked whether the tiny play buttons in iOS library rows are supposed to be tappable. They should work as direct play/pause controls, but the target is visually and ...
Admin
Parent: 925. Shared backend/API parent: 1052. Backend/agent write slice: 1083. Web parity sibling: 1086. Add the native iOS artist/admin controls for the nowsupported lesson Str...
Platform
Parent: 560. Contract: 1078. Related iOS identity slice: 1077. Android parity sibling: 1087. Add the first native iOS selectedcommunity and fan/publisher mode shell so the app s...
Platform
Context Parent: 1075. Related TestFlight/App Store umbrella: 636. Fanful is now the intended MVP product identity: one app, one human account, multiple creator communities, with...
Media
Parent: 448 Why The shared Listen Along design notes say hosts should be able to share an invite message that includes the current track, shared position, sharedcontrols context...
Commerce
Parent: 530 Parity sibling: Android 858. Ship the native iOS surface for lesson policy and credit state once the shared 530 contract exists. Why Lesson cancellation windows, bun...
Admin
Parent: 925 Parity sibling: Android 959. Ship the safe iOSnative slice for creator commerce before broader Stripe product/price editing. Why 925 remains blocked for actual Strip...
Ops
Context Mark asked to stop using the longer iOS bundle identifiers and make the iOS app be net.fanful.ios. The release config already uses net.fanful.ios, but checkedin Debug st...
Admin
Goal Bring native iOS artist/admin ideaboard curation to parity with web, Android, and agent contracts. Why 599 tracks ideaboard parity across the four channels. Web 511, iOS me...
Commerce
Parent: 928 Related: 700, 709 Context 928 asks for live donations across web, iOS, and Android while respecting App Store payment policy. 700 resolved the Stripeonly posture and...
Admin
Child slice of 922 and 921.\n\nGoal: give Laurel/admin a native iOS Community Channels panel that reflects the current alwayson channel backend honestly, without faking unsuppor...
Admin
iOS child slice for 924.\n\nAcceptance criteria:\n When bootstrap includes artistAdmin, the iOS Account panel uses artist/admin framing instead of listener membership, purchase ...
Admin
Artists logged into the iOS app should be able to create, rename, and configure the artist community text channels defined by the shared channel contract.\n\nAcceptance criteria...
Auth
Parent Part of 873. Depends on the shared displayname update route from the web/API child issue. Scope Add the matching native iOS Account/Profile displayname editor after the s...
Commerce
Goal Bring Cloudflare Registrar domain purchase parity to the iOS admin surface after the platform/web contract in 680 is stable. Scope Decode and display domain search quote, p...
Commerce
Context Issue 700 documents the paymentpolicy posture for Stripeonly native commerce before external TestFlight or App Store review. The policy audit found that iOS currently ha...
Commerce
Context\n\nMark's direction is Stripeonly for support/shop/lessons and no Apple inapp purchase. Before an App Store or external TestFlight review build, iOS needs an explicit po...
Live
Context 629 / PR 660 added public creatorapproved community chat automation replies with durable audit rows and listenervisible attribution. iOS already has base community chat ...
Live
Parent: 505 Split from: 524 Related Android parity issue: 655 Related admin/agent safety issue: 656 Production credential blocker: 650 Goal Bring the iOS app into parity with th...
Live
Context 639 is adding community chat reactions, lightweight replies, and mention parsing/rendering on the web surface. iOS already has base community chat in Live from 571, so n...
Live
Why 528 connected persistent community channels to scheduled/live/ended broadcast context after 571 had already shipped the base iOS communitychat Live tab. iOS should consume t...
Admin
Why 599 tracks parity for the member idea/upvoting board that shipped on web in 511. iOS should get a native implementation rather than relying on a webonly board. Scope Add nat...
Live
Motivation 507 is adding firstparty community chat channels as a platform feature, not only a web /live widget. The iOS app needs the same communityscoped chat experience in the...
Media
Motivation Common Design tried to resume 448 iOS evidence on 20260512 after Xcode began seeing both the physical iPhone and iOS 26.5 simulators. The iOS smoke preflight now runs...
Commerce
Motivation This issue now owns the first focused lessonbooking slice from the broader booking notes: make the current lesson entry path work, let Laurel/creators define basic av...
Design
Motivation Physicaldevice smoke on Mark's iPhone 17 Pro Max showed the signedin Account tab rendering its lower Account actions behind the persistent mini player and native bott...
Admin
Captured from Mark's realdevice testing request in the Codex iOS app session on 20260511/12. Problem Mark wants realaccount iOS smoke using listener demo accounts and laurel@lau...
Media
Mark reported from the physical iPhone build that tapping the playing song name opens the full Now Playing sheet, but tapping the blank/right side of the miniplayer bar does not...
Media
Mark asked that comment reaction behavior stay consistent across iOS, Android, and web: comments should have one emoji reaction option, a heart/Like, and users should be able to...
Media
Captured from Mark's iPhone feedback in the Codex iOS app session on 20260511. Problem Track cards can show truncated copy like "Offline caching requires a signed native manifes...
Media
Captured from Mark's physical iPhone feedback in the Codex iOS app session on 20260511. Problem When "Romance Anonimo" ends on iPhone, audio stops but the playhead remains at th...
Media
Captured from Mark's rapid iOS physicaldevice feedback in the Codex iOS app session on 20260511. Problem Mark reported that the bottom navbar is missing on iPhone. Shared design...
Admin
Motivation Mark asked for realaccount native testing across iOS, Android, and web using listener accounts and Laurel's artist account, including comments, live chat, golive flow...
Media
Motivation PR 373 shipped the shared web/backend Listen Along state contract. The iOS app should now adopt that contract so a joined friend session can actually coplay, copause,...
Media
Motivation Mark tested on a physical iPhone and found that tapping the playing song name opens the expanded player, but tapping the blank/rightside area of the mini player bar d...
Auth
Motivation Mark's iPhone feedback showed confusing notification state: email notifications appeared enabled before email confirmation, while push seemed blocked or still prompti...
Qa
Motivation Mark wants Laurel and friends to test the native iOS app through TestFlight, not only by plugging in his iPhone and pressing CmdR in Xcode. Scope Document the exact l...
Platform
Motivation Mark observed that the iOS app currently lacks a bottom navigation bar, while the shared player/design notes point toward native app chrome similar to Spotify, Apple ...
Media
Motivation Sameaccount Listen here handoff is intentionally exclusive: one listener account on two devices should stop the other device. Mark wants a separate social listening m...
Admin
Goal\nBring /admin analytics visibility into iOS and Android for Laurel/owner accounts, not just compact metric tiles.\n\n Scope\n Native analytics overview for listeners, playb...
Admin
Goal\nWhen Laurel signs into iOS or Android, she can handle the same practical email work available in /admin: view inbound mail, reply to people, review campaign drafts, send p...
Media
Motivation Mark observed that on iPhone, when Romance Anonimo ends, audio stops but the playhead remains at the end of the track and the large primary button still shows a pause...
Auth
Motivation Mark enabled iPhone push through the system prompt, but the app still showed the large enablepush button, confusing device counts, and contradictory copy such as iOS ...
Media
Mark feedback from the Android app session applies across platforms: comments should use one primary reaction, heart/like, not competing star/heart/save actions. Expected behavi...
Qa
Motivation Mark wants each native app to expose a selfcontained roadmap/about surface so a tester can see what this build contains, what is partly shipped, and what remains with...
Qa
Motivation Mark will be testing the iOS app on simulators, physical iPhones, and eventually TestFlight. When playback sync, push, auth, offline downloads, or API origin behavior...
Media
Goal Add a native iOS share affordance so listeners can share a Laurel track or the current Now Playing item through the system share sheet. Scope Add share controls to track ro...
Media
Goal Add native iOS playback speed controls to the expanded Now Playing surface so listeners can slow down or speed up longform audio without leaving the app. Scope Add a native...
Media
Goal Add a native iOS sleep timer so listeners can start Laurel's music and let the app pause itself after a chosen interval. Listener jobs to be done Start a timer from the exp...
Media
Goal Make the iOS app behave like a real listener app on a physical iPhone when audio leaves the foreground: background playback, route changes, interruptions, and mediaservice ...
Commerce
Motivation The iOS app can now expose listener/support/catalog surfaces, but lesson booking is still a webonly handoff. A listener should be able to pick an available lesson slo...
Commerce
Goal Give the native iOS app a Support surface that feels like Laurel's app, not just a weblink grid. Scope Add a mobilesafe support/catalog endpoint for membership tiers, publi...
Platform
Goal Give the native iOS app a real Dates surface instead of only handing listeners to the website. Why now The website already has structured performance data through getPublic...
Media
Goal Add a clear native iOS playbackdevice context pill so listeners can tell whether playback is local, remote, connected, offline, or localonly without reading the larger stat...
Design
Goal Make the native iOS app feel like Laurel Harned's listener app from the first screen instead of a generic MusicWebs utility shell. Why now The core iOS features are now bro...
Media
Motivation The iOS app currently offers a Live hub handoff, while the website already has a real Laurel Live room with room state, stream/replay metadata, presence, and live not...
Media
Goal Add a native Continue Listening surface so returning iOS listeners can resume the most relevant inprogress track without hunting through the full library. Scope Use existin...
Media
Goal Make the native iOS library easier to browse as Laurel's catalog grows by adding native search and quick filters. Scope Add a SwiftUI search field for track title/composer/...
Media
Goal Add a native iOS video playback surface so video tracks are not only labeled as video, and keep the player aligned with the shared web/Android design direction. Scope Use n...
Qa
Goal Document the exact morning path for Mark to test the native iOS listener app on a physical iPhone and prepare an internal TestFlight build. Scope Physical iPhone testing ch...
Design
Goal After the core player surfaces land, add the last layer of native polish so iOS feels intentional while staying aligned with web and Android design decisions. Listener jobs...
Auth
Goal Extend the iOS account surface beyond base signin so listeners can manage the account tasks that matter on the website without losing nativeapp context. Listener jobs to be...
Media
Goal Make the iOS listener app explicit about crossdevice playback ownership, progress sync, and API gaps so it behaves consistently with the website and future Android app. Lis...
Media
Goal Bring the native iOS player closer to website player parity by adding queue/nextup behavior and full iOS system remotecontrol integration. Listener jobs to be done See what...
Media
Goal Bring the native iOS player in line with the shared player design direction: a genuinely compact persistent mini player while browsing, plus a native expanded Now Playing s...
Auth
Motivation PR 212 added a Turnstile challenge for brandnew verified sessions that post timed comments on the website. The native iOS timedcomments composer added in 142 posts th...

Media
Polish iOS library cards with artwork, media-kind labels, locked/loading/error states, and clear member-only calls to action.
Richer iOS media states

Media
Make iOS progress writes durable across spotty connectivity, backgrounding, and future offline playback with a local retry queue.
Durable iOS progress queue
Platform
Define shared native fixtures and contract tests under contracts/mobile-listener/v1 so Swift and Kotlin clients stay aligned with website APIs without forcing a shared UI stack.
Shared native contract fixtures
Operations
Prepare the iOS project for real distribution with bundle identity, signing notes, release-safe configuration, app assets, and TestFlight documentation.

Admin
Add an iOS artist companion area for read-only signal and authenticated handoff to deeper web admin modules.
iOS artist dashboard companion

Admin
Give Laurel a role-gated iPhone companion workflow for live-room status, quick room controls, presence, and chat moderation.
iOS live companion

Platform
Give iOS listeners a native home base with stable web handoff links for Laurel features that are not yet fully native.
Native hub links
Media
Let entitled iOS listeners save eligible recordings for offline playback under the #536 protected-native-cache decision once the signed offline manifest and entitlement refresh contracts are ready.
Media
Bring the website's timed listening conversation into iOS playback with visible comments, timestamp seeking, replies, reactions, and moderation-aware states.

Media
Connect iOS to the Fanful playback sync socket so website, iPhone, and Android sessions can hand off track, position, and active-device state.
iOS playback handoff

Platform
Add APNs registration and account notification settings that distinguish OS push permission from per-category email and push preferences.
iOS notification settings

Platform
Let iOS listeners sign in natively, refresh account state, and unlock paid/member entitlements through the existing Fanful account contracts.
Native iOS account sign-in
Apps
Create the first SwiftUI listener app that consumes the mobile bootstrap/progress contracts, streams playable tracks with AVPlayer, and documents Xcode simulator and phone testing.
Media
Current Session 3 Status PR: 117 โ https://github.com/markitics/laurelharned/pull/117 Branch: codex/session3audiovideoplayer Latest pushed commit: c98bb8e fix: harden playback h...
GitHub issues are the engineering source of truth. This page reads public Fanful roadmap issues, merges them with curated summaries and screenshots, infers the Web/iOS/Android/agent workstream, polls for label changes, and can overlay short-lived sanitized Codex status when an active agent publishes it.
Open GitHub roadmap issues