Fanful
Open Fanful navigation
Fanful

Fanful roadmap

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 3:54 AM

All workstreamsLive status offline427 done15 not done
1 unlikely idea is hidden from the default board.

Workstream

Fanful web and shared platform

The fanful.net marketing site, creator admin tools, fan-facing pages, commerce flows, agent-readable routes, and shared APIs that native apps consume.

Roadmap stage

Maybe

2 items

Useful sparks that might become real once a dependency or user need gets sharper.

Media

Official Instagram import via Meta OAuth

Maybe

Replace the committed Instagram snapshot with an official API import, scheduled refreshes, R2 copies, and manual curation controls.

Commerce

Stripe Connect platform accounts for Fanful artists

Maybe

Onboard each musician as a connected account, route money directly to artists, and collect a platform fee if Fanful becomes a business.

Roadmap stage

Backlog

8 items

Committed roadmap work that exists, but is not the next thing to pull.

Qa

QA: cross-platform live chat emoji and notification parity

Backlog

Parent: 1499 Shared contract: 1500 Web: 1501 iOS: 1502 Android: 1503 Goal Prove feature parity for the Discord/Slackgrade live chat bundle across web, iOS, and Android. Scope Cr...

Live

Parity: Discord/Slack-grade live chat, custom emoji, and notifications

Backlog

Goal Bring Fanful text live chat up to Discord/Slackgrade parity across web, iOS, and Android for creator communities. In this issue, "community" means the Fanful community scop...

Commerce

Define shared Stripe product price and entitlement management API

Backlog

Parents: 925, 926, 534 Native dependents: iOS 925 and Android 926. Define and implement the shared backend contract for creator/admin Stripe Product, Price, tier, and entitlemen...

Media

Investigate slow cross-device playback handoff between native apps

Backlog

Mark observed that changing track on one phone was slow to update on another while logged in as the same listener on iPhone and Android. Determine whether Durable Object/realtim...

Admin

Run recurring Fanful multiplayer smoke across web, iOS, and Android

Backlog

Context Mark asked Goal Runner to keep periodically testing the real Fanful multiplayer experience across all available surfaces at the same time: web in Brave iOS through iPhon...

Admin

Create cross-platform creator tiers and entitlement management

Backlog

Motivation Creators need to define membership/support/product tiers once and have those tiers drive access across the website, native apps, realtime rooms, live chat, paid webin...

Admin

Add lesson bundles, subscription credits, and cancellation policies

Backlog

Motivation 504 mixes the first lessonbooking slice with later commercial policy work. Keep the first slice focused on fixing the current booking path and basic artist availabili...

Media

Harden Listen Along invites, QR join, and co-scrub across devices

Backlog

Captured from Mark's crossplatform listening feedback in the Codex iOS app session on 20260511. Problem Mark wants two distinct crossdevice behaviors: For one user logged in on ...

Roadmap stage

Next

0 items

Committed follow-ups that are queued behind the active work.

No next items right now.

Roadmap stage

Active

0 items

Current branches and PRs. These should move as GitHub issue labels change.

No active items right now.

Roadmap stage

Recently done

151 items

Shipped work, newest first, with screenshots where the change is visual.

Qa

Audit web parity against Fanful feature promises

Recently done

Context Android has 1261 as a durable featurepromise parity audit against the public Fanful feature set. The web app has shipped many individual slices, but there is not yet an ...

Issue #1869Screenshot pending

Live

Add web publisher notification center UI

Recently done

Parent: 1501 Shared contract: 1500 Goal Add a visible web publisher/admin notification center so artist admins can review creatorappropriate notification events from the web app...

Issue #1673Screenshot pending

Live

Add web custom emoji picker and My emojis UI

Recently done

Parent: 1501 Related: 1499 Goal Finish the web UI slice for community custom emoji parity now that the API, storage, reaction persistence, usage analytics, and executable API jo...

Issue #1659Screenshot pending

Live

Add web listener notification center

Recently done

Parent: 1501 Shared contract: 1500 Goal Give web listeners an accountlevel notification center for the same reaction, reply, scheduled live show, and donationthanks event catego...

Issue #1634Screenshot pending

Live

Add expanded web system emoji reaction controls

Recently done

Parent: 1501 Shared contract: 1500 Goal Expose the shared communitychat system emoji reaction set in the web live/community chat UI instead of limiting web listeners to the lega...

Issue #1632Screenshot pending

Live

Show web community chat typing indicators

Recently done

Parent: 1501 Shared contract: 1500 Parity parent: 1499 Problem The shared communitychat contract already defines realtime typing presence and native Android/iOS have evidence fo...

Issue #1624Screenshot pending

Live

Implement executable custom emoji and notification-center endpoints

Recently done

Parent: 1499\nContract predecessor: 1500\nBlocks native parity: 1502, 1503\nQA parity: 1504\n\n Problem\n\nPR 1534 / 1500 shipped the shared schema, D1 tables, migration, and ag...

Issue #1539Screenshot pending

Web

Add platform filters to the Fanful roadmap

Recently done

Goal Add platform filters to fanful.net/roadmap so Mark can view the main roadmap at a feature/workstream level instead of digging through noisy GitHub issue lists. Scope Add a ...

Issue #1518Screenshot pending

Live

Web live chat: typing, reactions, custom emoji, and notification centers

Recently done

Parent: 1499 Depends on shared contract issue: 1500 Goal Add the Discord/Slackgrade live chat capability set to the web app. Scope Show typing indicators such as Rob is typing.....

Issue #1501Screenshot pending

Commerce

Ship web/backend publisher referral scheme v1

Recently done

Scope Implement the first shippable web/backend publisher referral scheme. Acceptance criteria D1 schema records publisher referral codes, referredpublisher claims, reward terms...

Issue #1491Screenshot pending

Admin

Define shared creator tier CRUD and entitlement contract

Recently done

Parent: 534 Related platform parent: 1052 Parity driver: 1260 Why The public Fanful feature set now has stronger fanfacing account, shop, lesson, listen, and upload/provenance c...

Issue #1303Screenshot pending

Admin

Add web admin membership Stripe Price create/select controls

Recently done

Parent: 1052 Shared backend/API dependency shipped: 1186 Parity siblings: iOS 1195 and Android 1204. Add human web/admin controls for membershiptier Stripe Price create/select n...

Issue #1205Screenshot pending

Admin

Add shared membership Stripe Price create/select API

Recently done

Parent: 1052\nNative dependents: iOS 925 and Android 926. Related platform parent: 534.\n\n Why\n\nThe native creator/admin apps need to let Laurel manage membershiptier prices ...

Issue #1186Screenshot pending

Admin

Add web admin lesson Stripe Price create/select controls

Recently done

Parent: 1052 Depends on: 1083 Related: 1058, 925, 926 Why 1083 is adding the confirmed serverowned Stripe Price createandselect wrapper for one lesson/coaching offering through ...

Issue #1086Screenshot pending

Platform

Define Fanful community and publisher-mode switching contract

Recently done

Context Parent: 1075. Related community shell issue: 560. Fanful's MVP model is one app with fan mode and publisher mode, not one whitelabeled app per artist. Existing community...

Issue #1078Screenshot pending

Platform

Define Fanful one-app fan and publisher mode product model

Recently done

Context Mark clarified the intended MVP product model after the first iOS App Store Connect record was created: Start with one Fanful app, not one whitelabeled app per artist. T...

Issue #1075Screenshot pending

Commerce

Route homepage lesson card to the booking surface

Recently done

Parent: 504. Motivation The first lessonbooking path already has a dedicated /lessons surface, adminmanaged offerings, and open availability. The homepage support band still sen...

Issue #1070Screenshot pending

Commerce

Add shared Stripe catalog readiness API for creator commerce

Recently done

Parent: 1052 Unblocks later native write work in 925 and 926. Related tier/entitlement parent: 534. Why The iOS and Android creatorcommerce panels can already read the shared /a...

Issue #1053Screenshot pending

Admin

Add shared community channel membership access contract

Recently done

Parent/parity context: 921 defined alwayson community channels, and 922/923 need iOS/Android management UI to show membership/entitlement access per channel. That access model i...

Issue #988Screenshot pending

Admin

Add shared community channel rename and archive contract

Recently done

Parent/parity context: 921 clarified the alwayson communitychannel model, while 922 and 923 still need native iOS/Android management parity. Both native issues are blocked on a ...

Issue #987Screenshot pending

Commerce

Add web live-room one-time support donation entry point

Recently done

Parent: 928 Context 928 asks for live donations across web, iOS, Android, and admin reporting. Android child 966 covers the native Android Live tab slice. The web can ship a sma...

Issue #967Screenshot pending

Media

Remove legacy dark Now Playing homepage player

Recently done

Mark sees an old darkbackground Now Playing player low on the homepage. The sticky player is now the canonical playback surface, so the legacy embedded player should likely be r...

Issue #939Screenshot pending

Auth

Decide and clean up signed-in Get Laurel updates homepage CTA

Recently done

Mark questioned whether 'Get Laurel updates' belongs on the homepage when the visitor is already signed in.\n\nAcceptance criteria:\n Audit homepage newsletter/update CTA for si...

Issue #938Screenshot pending

Design

Hide Cmd-K and Ctrl-K shortcut hints on mobile

Recently done

Mobile users should not see CmdK or CtrlK shortcut hints because they are irrelevant on phone layouts.\n\nAcceptance criteria:\n Keyboard shortcut hints are hidden on mobile/tou...

Issue #937Screenshot pending

Auth

Remove Alerts from hamburger menu and keep alerts under Account

Recently done

Mark wants 'Alerts' removed from the hamburger menu because alerts/notifications belong as a suboption inside Account.\n\nAcceptance criteria:\n Mobile hamburger menu no longer ...

Issue #936Screenshot pending

Platform

Keep roadmap off laurelharned.com and scoped to fanful.net

Recently done

Mark clarified that the roadmap is for fanful.net only, not laurelharned.com.\n\nAcceptance criteria:\n laurelharned.com does not expose the public roadmap as a Laurel artistsit...

Issue #935Screenshot pending

Design

Dismiss mobile hamburger menu on outside click, scroll, or page interaction

Recently done

In Safari/mobile, the hamburger/dropdown menu does not autodismiss when Mark clicks outside it or scrolls/interacts with the page.\n\nAcceptance criteria:\n Menu closes on outsi...

Issue #934Screenshot pending

Auth

Hide signed-in homepage join/sign-in CTAs on Laurel site

Recently done

On the Laurel homepage in Safari/mobile, Mark can still see a lowerpage 'new listener? join / sign in' CTA even when signed in and account is available in the topright navigatio...

Issue #933Screenshot pending

Auth

Audit duplicate login and sign-up CTAs in native apps

Recently done

Mark noticed possible duplicate log in / sign up buttons. Native apps should have one clear auth path per context, and every visible auth CTA should work.\n\nAcceptance criteria...

Issue #930Screenshot pending

Admin

Label placeholder admin metrics or replace them with live values

Recently done

Admin/native dashboards currently risk showing numbers that are unclear as real vs fake/demo. Mark wants real numbers where available, such as 0 subscribers or /bin/zsh.00 sales...

Issue #929Screenshot pending

Admin

Enable live donations during live streams

Recently done

During a live stream, listeners should be able to donate/tip in a way that works consistently across web, iOS, and Android while respecting App Store payment policy.\n\nAcceptan...

Issue #928Screenshot pending

Admin

Simplify native Go Live Now for artist accounts

Recently done

When Laurel/admin wants to start a live stream from iOS or Android, the app should offer a simple Go Live Now flow instead of asking for technical stream URL details.\n\nAccepta...

Issue #927Screenshot pending

Admin

Hide listener purchase prompts for artist accounts on native apps

Recently done

When Laurel/admin is logged into iOS or Android, the app should not show listener purchase/subscribe CTAs. The artist is not a buyer in her own app context.\n\nAcceptance criter...

Issue #924Screenshot pending

Live

Separate always-on community channels from live-stream chat

Recently done

Mark clarified that 507 shipped the foundation but the product contract needs to clearly separate two concepts:\n\n1. Alwayson 24/7 community text channels, Slackstyle, such as ...

Issue #921Screenshot pending

Admin

Smoke-test production embedded-room RealtimeKit A/V in two browsers

Recently done

Goal Prove the production embeddedroom media path with real RealtimeKit credentials, not just mocked local journeys or Durable Object socket smoke tests. Scope Create or reuse a...

Issue #902Screenshot pending

Auth

Add shared listener display-name update contract

Recently done

Parent Part of 873. Scope Add the shared signedin listener displayname update contract that native clients can use without depending on Better Auth internals. Add a server route...

Issue #892Screenshot pending

Auth

Restore production magic-link sign-in for native smoke accounts

Recently done

Summary Manual native crossdevice smoke is blocked because the production magiclink signin endpoint is failing. Android can reach the network and the account form is interactive...

Issue #879Screenshot pending

Auth

Add editable listener profile and display name

Recently done

Context Mark asked for an editprofile path so listeners can change their display name after account creation. This also surfaced during native chat testing because message attri...

Issue #873Screenshot pending

Platform

Add filtering and search to the Fanful competitor matrix

Recently done

Context PR 426 shipped the first static Fanful competitor matrix at /fanful/competitors and documented that filters/search can come later if the data keeps growing. Goal Make th...

Issue #865Screenshot pending

Live

Add calendar invite export for embedded rooms

Recently done

Parent: 505 Related room slices: 523, 524, 839, 844 Production credential blocker: 650 Goal Let a listener, student, or host add a firstparty embedded room to their calendar wit...

Issue #848Screenshot pending

Live

Add native embedded-room index for invited rooms

Recently done

Motivation Issue 505 needs iOS and Android to treat embedded rooms as a native platform feature, not only as a web URL handed out by email. The current native contract can read ...

Issue #844Screenshot pending

Admin

Attach lesson bookings to first-party embedded rooms

Recently done

Motivation Issue 505 needs the first paid lesson/coaching path to stop treating Zoom as the default handoff. The embedded room layer already supports sourceType: lessonbooking, ...

Issue #839Screenshot pending

Commerce

Add gated Cloudflare Registrar final registration execution

Recently done

Goal Turn a paid artistdomainregistrationintents row from issue 680 into an actual Cloudflare Registrar registration only after a fresh quote check, exactdomain confirmation, pa...

Issue #732Screenshot pending

Commerce

Track Cloudflare Registrar domain purchase parity across web, iOS, Android, and agents

Recently done

Why 680 is a meaty Cloudflare Registrar purchase feature with irreversible billing/registration boundaries and four product surfaces. Track parity as a linked issue family so ea...

Issue #729Screenshot pending

Platform

Publish public privacy and support URLs for native store submissions

Recently done

Context\n\nApple App Store Connect and Google Play both need stable public privacy/support URLs before broader TestFlight/Play testing and production submission. The current iOS...

Issue #699Screenshot pending

Qa

Capture Fanful marketing screenshots and production smoke evidence

Recently done

Context The cloud handoff for 690 could not capture Playwright screenshots because the container lacked browser system dependencies. Local or another capable Codex environment s...

Issue #694Screenshot pending

Platform

Deploy and verify fanful.net Worker routing

Recently done

Context 690 preserves local code for serving Fanful marketing pages from the existing Worker. Production deployment and domain smoke evidence are still separate because the clou...

Issue #691Screenshot pending

Qa

Add durable screenshots and production smoke evidence for Fanful marketing pages

Recently done

Goal Capture durable screenshots and production smoke evidence for the Fanful marketing/comparison surfaces so PRs and postmerge notices are reviewable after branches are delete...

Issue #689Screenshot pending

Ops

Deploy and verify fanful.net Cloudflare routing

Recently done

Goal Deploy the Fanful.net routing changes and verify production behavior on the apex and www hosts. Acceptance checks https://fanful.net/ serves the Fanful marketing page. http...

Issue #686Screenshot pending

Commerce

Build Cloudflare Registrar domain purchase flow

Recently done

Goal Let a Fanful artist buy an available domain through Fanful using Cloudflare Registrar, charge exactly Cloudflare's cost with no markup, and then let Fanful manage the DNS s...

Issue #680Screenshot pending

Auth

Build Fanful subdomain and BYO domain setup

Recently done

Goal Let Fanful artists claim a branded web address before we sell or transfer domains for them. This is the first domain issue because the DNS model affects website routing, cr...

Issue #678Screenshot pending

Live

Install production RealtimeKit credentials for embedded rooms

Recently done

Parent: 505 Followup from 523 / PR 597. Why this exists PR 597 deployed the firstparty embeddedroom RealtimeKit media path, remote D1 migration 0022embeddedroommediaparticipants...

Issue #650Screenshot pending

Live

Add community chat reactions, lightweight replies, and mentions

Recently done

Add low-density reactions, reply context, and scoped mention rendering for community chat without turning the Live tab into a full Discord clone.

Chat affordances

Live

Add configurable community chat slow mode and rate-limit controls

Recently done

Add creator-configurable slow mode and per-listener rate limits across REST and WebSocket posting, scoped to creator community and channel.

Community slow mode

Admin

Track member idea-board parity across web, iOS, Android, and agents

Recently done

Why 511 shipped the firstparty web member idea/upvoting board. This is a meaty product feature, so parity should be tracked as a linked issue family rather than buried inside on...

Issue #599Screenshot pending

Live

Define multi-community listener app shell, Live tab, and presence model

Recently done

Context Mark's 20260512 crossplatform design feedback says the listener app should feel social and realtime, with a prominent Live tab, notifications, visible community presence...

Issue #560Screenshot pending

Media

Track Picture-in-Picture parity across web, iOS, and Android

Recently done

Motivation PictureinPicture/background video continuity is now a parity feature family, not one platformonly issue. Android and iOS have shipped native slices, with web still tr...

Issue #552Screenshot pending

Live

Add advanced community chat moderation and Discord-lite affordances

Recently done

First slice: expose creator/admin flag, hide, and restore review controls for community notes while keeping flagged/hidden notes out of public reads and realtime updates.

Community note review flow

Live room showing the event-linked community channel

Live

Connect community channels to live broadcasts

Recently done

Link scheduled/live/replay rooms to one persistent community channel so broadcasts, member webinars, and between-stream chat feel like one conversation without duplicating message history.

Broadcast-linked community

Live

Wire Cloudflare realtime media engine for embedded rooms

Recently done

Attach Cloudflare Realtime or Calls media sessions to embedded rooms with token minting, WebRTC track exchange, device controls, and operational fallback states.

Issue #523Screenshot pending

Media

Add unattended native UI smoke harness for Listen Along device evidence

Recently done

Context Common Design issue 448 still needs nativedevice Listen Along invite/QR/coscrub evidence. The current code is healthier than before: iOS preflight passes, the iPhone app...

Issue #512Screenshot pending

Admin

Build first-party member idea upvoting board

Recently done

Scope for this issue Build a firstparty member idea board for Laurel now, shaped as the reusable MusicWebs/Fanful alternative to Canny later. The first shippable slice should le...

Issue #511Screenshot pending

Live

Build on-platform Zoom alternative for paid lessons, coaching, and webinars

Recently done

Create first-party embedded rooms with host/attendee roles, durable chat, access policies, and a Cloudflare-native media path for lessons, coaching calls, webinars, and private paid sessions.

Issue #505Screenshot pending

Media

Align web and native playback catalogs for reliable Listen Here handoff

Recently done

Mark confirmed that Listen Here / crossdevice playback handoff is impressive when the same track exists on both surfaces, but can become nonsensical when web and native apps hav...

Issue #470Screenshot pending

Media

Harden web Listen Along invite auto-join credentials

Recently done

Problem During Common Design 448 smoke on 20260511, an Android emulator host created a production Listen Along invite and a separate web listener was signed in through Better Au...

Issue #462Screenshot pending

Qa

Audit native mobile surfaces for remaining web handoffs except Stripe support checkout

Recently done

Captured from Mark's nativeapp parity directive in the Codex iOS app session on 20260511. Problem Mark explicitly does not want native iOS/Android features to cheat by linking o...

Issue #449Screenshot pending

Auth

Fix native mobile push state, email verification copy, and device registration

Recently done

Captured from Mark's rapid mobile feedback in the Codex iOS app session on 20260511. Problem iPhone and Android settings currently imply email notifications are ON even when ema...

Issue #444Screenshot pending

Platform

Collate competitor platform notes and Fanful feature matrix

Recently done

Goal Create one durable place for notes from other platforms and add an entrepreneurfacing web view that compares Fanful against relevant creator, commerce, course, funnel, and ...

Issue #422Screenshot pending

Media

Retarget native Listen Along state-sync references after #370 shipped

Recently done

Motivation PR 373 closed 370 by shipping the shared web/backend Listen Along state endpoint. Some docs and one Android listenerfacing/debug string still say realtime coscrub is ...

Issue #386Screenshot pending

Media

Run manual cross-platform realtime smoke with demo accounts

Recently done

Motivation Mark asked for thorough crossplatform smoke testing across web, iPhone, and Android using demo listener accounts and the Laurel artist account. The existing issue 288...

Issue #381Screenshot pending

Media

Implement realtime Listen Along co-playback and co-scrub sync

Recently done

Motivation Mark wants Listen Along to be more than an invite/join state: two different listener accounts should be able to keep playback synchronized, and either participant sho...

Issue #370Screenshot pending

Media

Align shared listener catalog and media queue across web, iOS, and Android

Recently done

Motivation Mark feedback from crossdevice playback testing: Listen here handoff is impressive when both surfaces reference the same item, but sync becomes nonsense when web and ...

Issue #355Screenshot pending

Media

Define shared autoplay and ended-state behavior for the player

Recently done

Motivation Mark feedback from iPhone testing: when Romance Anonimo ended, playback stopped at the end while the large play/pause control still showed pause. He also raised wheth...

Issue #354Screenshot pending

Design

Move themeColor metadata to viewport exports

Recently done

Motivation\n\nNext 16 warns during every production build that no longer belongs in the metadata export. The warning repeats for many routes and makes CI output noisier while we...

Issue #342Screenshot pending

Commerce

Remove remaining native listener web handoffs except Stripe checkout

Recently done

Motivation Mark was explicit: Live, Dates, Shop, Lessons, and Account should be native in iOS/Android, not webview shortcuts. The main exception is Support/Stripe checkout, wher...

Issue #327Screenshot pending

Media

Make native offline availability copy listener-friendly

Recently done

Motivation Mark saw truncated native copy like Offline caching requires a signed native manifest... on iPhone track rows. That sounds like internal implementation detail and doe...

Issue #326Screenshot pending

Media

Add web Listen Along invite, share link, and QR join UI

Recently done

Motivation Listen Along needs a web surface as well as native app surfaces: a listener should be able to invite a friend by link, or show a QR code when they are beside each oth...

Issue #322Screenshot pending

Auth

Promote Join/Login to primary cross-platform navigation

Recently done

Motivation Guest signin/join is currently too buried and too playbackhandoffspecific. Mark wants account entry to be a primary navigation action: on web, the homepage topright C...

Issue #319Screenshot pending

Media

Fix web player dismissal, remote banner, and duplicate controls

Recently done

Motivation Mark's screenshots show the web player taking over too much of the page when playback is remote or expanded. The bottom mini player remains visible under the expanded...

Issue #318Screenshot pending

Media

Build Cloudflare Listen Along sessions, invite links, and QR-safe join contract

Recently done

Motivation Social listening needs a crossdevice contract before native apps can implement it cleanly. A listener should be able to invite another listener to listen along remote...

Issue #313Screenshot pending

Qa

Paginate live GitHub roadmap issue fetch

Recently done

Motivation Production /api/roadmap is GitHubbacked, but the server fetch currently requests only perpage=100 from the GitHub Issues API. The roadmap has grown beyond 100 GitHub ...

Issue #302Screenshot pending

Design

Fix wide roadmap Kanban sticky headers

Recently done

The shipped roadmap stage headers still feel off in wide Kanban view. Observed from Mark's screenshot: card text briefly appears above the floating stage header while scrolling ...

Issue #301Screenshot pending

Admin

Native artist admin parity: create, schedule, and control live rooms

Recently done

Goal\nWhen Laurel signs into iOS or Android, she can create a live room, go live now, schedule a future room, update chat/subscriber settings, and end/cancel live events without...

Issue #297Screenshot pending

Admin

Native artist admin parity: subscribers and membership plan management

Recently done

Goal\nWhen an owner or Laurel artistadmin signs into iOS or Android, they can manage subscriber and membership state without webadmin handoff for routine support work.\n\n Scope...

Issue #294Screenshot pending

Qa

Make roadmap workstreams trust platform labels

Recently done

Motivation The live /roadmap page reads GitHub issues and infers a Web/iOS/Android workstream. Newer native issues carry explicit labels like area:iosapp and area:androidapp, bu...

Issue #292Screenshot pending

Media

Polish the web player queue, artwork, and motion to flagship quality

Recently done

Motivation The web player should not merely be functional; it should feel like the strongest surface. Use Spotifylevel product expectations as a reference for clear hierarchy, c...

Issue #289Screenshot pending

Media

Add cross-platform realtime listener smoke matrix for web and native apps

Recently done

Motivation Mark recommended thorough realaccount testing across listener comments, live chat, live creation, and playback sync using demo listener accounts and the Laurel artist...

Issue #288Screenshot pending

Admin

Expose native-ready Live, Dates, Shop, Lessons, and go-live contracts

Recently done

Motivation Mark wants iOS and Android to avoid cheating by linking to web for app features. Support/Stripe checkout can link out, but Live, Dates, Shop, Lessons, and artist goli...

Issue #287Screenshot pending

Media

Add shared autoplay-next queue preference across web, iOS, and Android

Recently done

Motivation When a track ends, the platform needs a deliberate queue policy. Mark asked whether a next track should autoplay and suggested an adjustable autoplaynext toggle, espe...

Issue #286Screenshot pending

Media

Align canonical media catalog and playback queue identity across platforms

Recently done

Motivation Mark noticed playback sync can become nonsense when web and native apps do not expose the same playlist/catalog order and media identities. Example: one platform has ...

Issue #285Screenshot pending

Media

Design shared Listen along mode separate from same-account Listen here handoff

Recently done

Motivation Current handoff behavior is good for one listener using multiple devices: Listen here claims playback and the other device should stop. Mark wants a separate social m...

Issue #284Screenshot pending

Auth

Clarify email verification, resend, and push readiness across web/native

Recently done

Motivation Mark's nativeapp feedback exposed a shared accountstate problem that web/backend should help solve: email notification state, email verification prompts, push registr...

Issue #283Screenshot pending

Design

Add subtle motion polish to roadmap stage headers

Recently done

Followup to 166. The stage headers are now visually distinct and sticky. Add a small polish pass so they feel smoother in use: restrained transitions, hover/focus affordance, an...

Issue #207Screenshot pending

Media

Define shared listener player design contract across web, iOS, and Android

Recently done

Goal Create the durable design source of truth for the Laurel/MusicWebs listener player across web, iOS, and Android so platform work does not drift into three different audio p...

Issue #167Screenshot pending
Account notification settings with separate email and push controls

Platform

Add shared notification preferences, email/push granularity, and device-token APIs

Recently done

Add the website/backend account layer for per-category email versus push preferences and native APNs/FCM device-token registration.

Shared notification preference API

Roadmap

Split the public roadmap into Web, iOS, and Android workstreams

Recently done

Make `/roadmap` separate website/shared-platform, iOS native app, and Android native app work so future branches and agents can stay focused.

Issue #135Screenshot pending

Apps

Prepare options for native mobile apps

Recently done

Research native iOS/Android, Kotlin Multiplatform, React Native, Flutter, and PWA options so future Fanful listener apps start from the right architecture.

Native app options

Admin

Clarify notification preferences across email, browser, and future mobile

Recently done

Goal Design and implement a clearer notification preference model that works for launch email alerts now, browser push next, and future iOS/Android app notifications later. Prod...

Issue #118Screenshot pending

Admin

Expand artist analytics with attribution funnels and listener cohorts

Recently done

Followup from 108. This builds on the firstparty analytics event stream and durable playback state after the initial dashboard lands. Context 108 ships the schema, ingestion, se...

Issue #115Screenshot pending

Media

Wire explicit player analytics intents from the persistent media player

Recently done

Followup from 108. This belongs with the active 98 media player surface, not the analytics foundation branch. Context 108 added firstparty analytics storage, ingestion routes, d...

Issue #114Screenshot pending

Admin

Integrate first-party analytics into admin navigation and global page tracking

Recently done

Followup from 108. This should wait for the active admin/email and roadmap/admin layout branches to settle before touching shared admin UI files. Context 108 added an isolated /...

Issue #113Screenshot pending

Admin

๐Ÿ›ก๏ธ Security center and API authorization audit follow-up

Recently done

Source From Mark's Obsidian notes: TOPIC 8 SECURITY.md and howcodexworkswithmark.md (ranked priority 7 in the corrected list), plus Mark's followup confirmation in Codex chat. G...

Issue #107Screenshot pending
Homepage support cards with subtle hover polish

Design

Add small design delight and polished flourishes

Recently done

Adds restrained motion and microinteractions to CTAs, support cards, newsletter success, and the listening room while respecting reduced-motion preferences.

Subtle flourishes

Media

โš™๏ธ Fan account settings: alert toggle, deletion, contributions

Recently done

Source From Mark's Obsidian notes: TOPIC 5 FAN ACCOUNT SETTINGS.md (ranked priority 5), plus Mark's followup confirmation in Codex chat. Goal Make /account feel fast, stable, co...

Issue #103Screenshot pending

Auth

โœ… Account creation, magic-link, and email confirmation flows

Recently done

Source From Mark's Obsidian notes: TOPIC 4 AUTH AND SIGN UP.md (ranked priority 4), plus Mark's followup confirmation in Codex chat. Goal Implement the agreed relationship betwe...

Issue #102Screenshot pending

Auth

๐Ÿ” Make auth session state consistent across the site

Recently done

Source From Mark's Obsidian notes: TOPIC 4 AUTH AND SIGN UP.md (ranked priority 4). Goal Eliminate contradictory loggedin/loggedout UI states across the site and use Better Auth...

Issue #101Screenshot pending

Auth

๐Ÿ“ Join the List modal/panel and logged-in newsletter UX

Recently done

Source From Mark's Obsidian notes: TOPIC 4 AUTH AND SIGN UP.md (ranked priority 4), plus Mark's followup confirmation in Codex chat. Goal Replace the disruptive Join the list ju...

Issue #100Screenshot pending

Email

๐Ÿ“ฅ Debug inbound email ingestion and Codex mail workflow

Recently done

Source From Mark's Obsidian notes: TOPIC 1 ADMIN AND EMAIL.md and howcodexworkswithmark.md (ranked priority 1). Goal Make inbound mail to site addresses visible and understandab...

Issue #95Screenshot pending

Admin

โœ‰๏ธ Complete admin email portal: subscribers, inboxes, compose, campaigns

Recently done

Source From Mark's Obsidian notes: TOPIC 1 ADMIN AND EMAIL.md (ranked priority 1). Goal Make /admin/email a complete email/subscriber work area rather than a crowded block on th...

Issue #94Screenshot pending

Admin

๐Ÿ›ก๏ธ Admin access and route structure for Mark and Laurel

Recently done

Source From Mark's Obsidian notes: TOPIC 1 ADMIN AND EMAIL.md (ranked priority 1). Goal Make the admin surface clearer and safer for the two real admins: Mark and Laurel. Detail...

Issue #93Screenshot pending

Operations

Codex PR email reply intake and feedback routing

Recently done

Adds a privacy-safe intake helper and operating docs for routing replies to codex@laurelharned.com into PR comments or follow-up GitHub issues.

Reply intake helper

Fanful architecture guardrails

Platform

Fanful multi-artist workspace and onboarding architecture

Recently done

Documents the Laurel-first Fanful platform path, second-artist pilot, artist data rules, workspace split triggers, and the Awesound/Fanful boundary.

Architecture guardrails

Admin media provenance review queue

Media

Media provenance, Laurel-owned replacements, and large uploads

Recently done

Track where each public asset came from, capture upload rights metadata, add a replacement review queue, and document the future resumable large-upload path before more artists depend on the media library.

Provenance review

Admin timed-comment moderation controls

Admin

Admin timed-comment moderation and anti-abuse controls

Recently done

Give Laurel and Mark admin controls to hide, flag, and restore timed comments while keeping the public player limited to visible notes.

Issue #85Screenshot pending

Comment controls

Operations

Record holistic roadmap triage and next work lanes

Recently done

Read ahead through queued feedback, cluster it into coherent next issues, and update the fallback roadmap plus handoff docs before more deep coding.

Queue reset

Homepage launch polish and listening story

Design

Homepage launch polish: timed comments story, guitar favicon, and navigation clarity

Recently done

Give the browser tab a Laurel-specific guitar icon, surface the timed-comments/listening story on the homepage, and make mobile navigation back from Listen obvious.

Launch polish

Original platform landing page

Platform

Build original platform landing page for Fanful positioning

Recently done

Add the original platform-facing page that used Laurel as the proof case before the public naming moved fully to Fanful.

Platform page

Confirmed listener account state

Auth

Unify listener signup, sign-in, sign-out, and account state UX

Recently done

Audit newsletter confirmation, listen-page account creation, magic-link login, account settings, and sign-out so listeners see one coherent account/subscription state.

Issue #74Screenshot pending

Account state

Realtime

Fix Durable Object runtime exports and production realtime smoke tests

Recently done

Resolve or prove harmless the Cloudflare deploy warning around PlaybackCoordinator and LiveRoomCoordinator exports, then add production-oriented socket smoke checks.

Realtime smoke

QA

Sync roadmap fallback data and project tracker after overnight ships

Recently done

Sync static roadmap fallback data, project tracker notes, worklog, prompt notes, and transcript after the overnight PR batch.

Fallback synced

Admin-only security center

QA

Admin security center and abuse-test journeys

Recently done

Add an admin-only security center for access, runtime configuration, abuse controls, and focused tests for route gating and raw timed-comment HTML escaping.

Security center

Commerce

Fix production Stripe checkout on Cloudflare Workers

Recently done

Use Stripe's fetch/Web Crypto runtime paths under Cloudflare Workers and keep checkout failures bounded and inspectable.

Checkout smoke

Live GitHub-backed roadmap board

Roadmap

Live GitHub-backed roadmap with polling, anchors, kanban, and PR screenshots

Recently done

Make /roadmap read live issue status, poll GitHub, jump between sections, show a wide-screen board, and attach shipped PR screenshots.

Live tracker

Roadmap priorities after Fanful promotion

Roadmap

Promote Fanful roadmap priorities

Recently done

Move Mark's favorite Fanful ideas into the committed queue and document the parallel work plan.

Priorities reset

Operations roadmap and PR notice work

Operations

Harden Stripe secrets and PR notification ops

Recently done

Clarify Stripe secret setup, prefer codex@laurelharned.com for PR notices, and document the reply/screenshot hygiene loop.

Ops scripts

Public homepage performance dates

Dates

Use live D1 performance dates on the public homepage

Recently done

Homepage performance dates now read from D1, hide drafts, move old published dates into Recent automatically, and show ticket links.

Auto-classified dates

Fanful theme system preview

Platform

Theme system for multiple musician sites

Recently done

Adds typed Fanful artist theme presets, app-level CSS variables, feature-flagged modules, docs, and a roadmap theme/module preview.

Theme presets

Electronic press kit and booking inquiry page

Bookings

Electronic press kit and booking page

Recently done

Adds public `/press` EPK content, downloads, presenter-ready copy, media links, technical needs, and a validated booking inquiry flow.

EPK page

Waveform comments, replies, and reactions

Listening

Advanced waveform comments and reactions

Recently done

Adds seekable waveform peaks, threaded timed comments, visible-only moderation, reaction toggles, markers, and rollback on failed D1 comment saves.

Waveform replies

Apps

Mobile listener bootstrap contract for future native apps

Recently done

Adds `GET /api/mobile/bootstrap`, a typed native-client response builder, mobile architecture docs, and journey coverage for guest and signed-in bootstrap fields.

Bootstrap API

Lessons booking workflow with admin scheduling controls

Lessons

Lessons booking with calendar and Zoom workflow

Recently done

Adds D1 lesson offerings, availability, bookings, meeting URLs, notes, reminders, public booking, admin controls, and Stripe Checkout metadata.

Lesson booking

Fan membership tiers on the support page

Community

Fan memberships and patron tiers

Recently done

Adds recurring supporter tiers, Stripe subscription checkout/webhook recording, account membership state, and centralized member media entitlements.

Membership tiers

Live room with Stream metadata and realtime chat

Live

Cloudflare Stream livestream with moderated realtime chat

Recently done

Adds Stream input/playback metadata, signed chat sockets, Durable Object realtime notes and presence, subscriber gates, moderation state, and replay metadata.

Stream + chat

Inbound reply center in admin

Email

Email portal analytics and inbound reply center

Recently done

Add opens, clicks, bounces, suppression lists, inbound retention, reply workflows, and per-artist email usage accounting.

Reply center

Shop feature flag and digital download workflow

Commerce

Shop feature flags, inventory, and digital downloads

Recently done

Adds D1-backed shop feature flags, inventory counts, digital download metadata, public `/shop`, admin product controls, and checkout inventory checks.

Shop controls

Roadmap with Maybe Later section

Roadmap

Show possible future ideas separately from committed work

Recently done

Keep current Laurel work distinct from optional Fanful ideas, so the public tracker can be complete without hiding the next sparks.

Maybe Later

Playback coordinator status on the listen page

Media

Cross-device playback coordinator

Recently done

Use Durable Objects and WebSockets so desktop, mobile web, and future native apps can share active playback state and device handoff.

Device sync

Cross-device playback coordination state

Media

Playback engine and sync architecture

Recently done

Choose the playback engine, add Media Session and same-browser handoff, load signed-in D1 progress, and document the future device-sync path.

Native media + sync notes

Musician email portal in admin

Email

Musician email portal

Recently done

Admin campaign drafts, preview sends, confirmed-subscriber broadcasts, inbound inbox rows, message attempts, and per-artist usage accounting are D1-backed.

Admin email

Live room with chat foundation

Live

Livestream room and chat foundation

Recently done

Make the live room D1-backed, add admin room controls, and lay the Cloudflare-native path for realtime chat/moderation.

D1 live room

Admin commerce reporting

Commerce

Stripe payments

Recently done

Stripe Checkout Sessions, signed webhook persistence, listener purchase history, and D1-backed admin commerce reporting are wired.

Checkout + webhook

Admin R2 upload workflow

Media

R2 upload workflow

Recently done

Let Laurel upload audio/video and optional artwork from `/admin`; the Worker writes files to R2, publishes metadata into D1, and serves uploaded media with range requests.

Admin uploads

Laurel Instagram media imported into the homepage

Media

Laurel Instagram media import

Recently done

Homepage hero and media rail now use a committed Laurel Instagram snapshot with source links and a documented path to official Meta API import.

Instagram snapshot

Roadmap after automated journey tests shipped

QA

Automated browser journey tests

Recently done

Codify listener sign-in, comments, sign-out, and admin editing journeys so deployments are tested like a human would use them.

Playwright + Wrangler

Newsletter confirmation email flow

Auth

Email confirmation and magic-link login

Recently done

Cloudflare Email sends account verification and magic links; newsletter confirmation signs the listener in and confirms the global Laurel mailing list.

Magic links

Owner and artist admin role gate

Auth

Mark owner and Laurel artist-admin roles

Recently done

Document and enforce Mark's owner privileges, Laurel's artist-admin privileges, and normal listener account permissions.

Admin gate

Admin dashboard gate and overview

Admin

Real D1-backed admin dashboard

Recently done

Admin reads live D1 tracks, performances, subscribers, comments, and drafts, and can add/edit Laurel tour dates.

D1 dashboard

Audio player on the listening page

Media

Real open-source audio playback

Recently done

Replace simulated playback with a legal open-source/public-domain audio source, attribution, and real play/pause/progress.

Real playback

Operations

Public project tracker

Recently done

A public roadmap backed by GitHub issues so project status survives chat compaction and late-night context drift.

Issue #3Screenshot pending

This page

Listener data

Listener accounts, newsletter, comments, and D1 persistence

Recently done

Better Auth email/password accounts, newsletter rows, timed comments, progress writes, and the first account page.

Issue #2Screenshot pending

Deployed

Foundation

Cloudflare foundation and first deployment

Recently done

Next.js on Cloudflare Workers via OpenNext, D1, R2, migrations, seed data, custom routes, and deployment notes.

Issue #1Screenshot pending

Deployed

Workstream

iOS mobile app

SwiftUI and AVFoundation work for iPhone: native playback, account handoff, APNs, TestFlight, and the Fanful companion workflows creators and fans need.

Roadmap stage

Maybe

0 items

Useful sparks that might become real once a dependency or user need gets sharper.

No maybe items right now.

Roadmap stage

Backlog

2 items

Committed roadmap work that exists, but is not the next thing to pull.

Admin

Add native iOS artist Stripe product and price management

Backlog

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

Prepare first production iOS App Store submission

Backlog

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

Next

0 items

Committed follow-ups that are queued behind the active work.

No next items right now.

Roadmap stage

Active

0 items

Current branches and PRs. These should move as GitHub issue labels change.

No active items right now.

Roadmap stage

Recently done

108 items

Shipped work, newest first, with screenshots where the change is visual.

Admin

Add native iOS lesson availability controls

Recently done

Motivation Agent/backend lesson availability writes are available through the shared creator.commerce.lessonavailabilityupdate contract, and Android parity shipped in 1880/1882....

Issue #1883Screenshot pending

Admin

Add native iOS shop product creation controls

Recently done

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...

Issue #1868Screenshot pending

Admin

Add iOS shop product details controls

Recently done

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 ...

Issue #1850Screenshot pending

Admin

Add iOS lesson policy cutoff controls

Recently done

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...

Issue #1671Screenshot pending

Admin

Add iOS shop product visibility controls

Recently done

Parent: 925 Related shared creatorcommerce contract: 1052 Goal Expose the ready creator.shopproduct.visibilityupdate confirmedwrite contract in native iOS so an artist/admin can...

Issue #1658Screenshot pending

Qa

Add iOS web-created live chat notification QA evidence

Recently done

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...

Issue #1614Screenshot pending

Qa

Add iOS community channel notification mute controls

Recently done

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 ...

Issue #1610Screenshot pending

Live

Add iOS native custom emoji file upload

Recently done

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...

Issue #1600Screenshot pending

Live

Add iOS publisher notification refresh and mark-read actions

Recently done

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...

Issue #1589Screenshot pending

Live

Add iOS notification inbox refresh and mark-read actions

Recently done

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...

Issue #1585Screenshot pending

Live

Persist iOS custom emoji reactions in community chat

Recently done

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 ...

Issue #1579Screenshot pending

Admin

Add iOS membership tier creation controls

Recently done

Parent: 1371 Related commerce parent: 925 Goal Add native iOS publisher controls for creating an inactive membership tier through the alreadyshipped confirmed creatorcommerce ti...

Issue #1573Screenshot pending

Admin

Add iOS membership tier profile and benefit editing

Recently done

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...

Issue #1555Screenshot pending

Admin

Add iOS membership tier lifecycle controls

Recently done

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...

Issue #1540Screenshot pending

Qa

Update iOS journey catalog for notification, emoji, and referral evidence

Recently done

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...

Issue #1533Screenshot pending

Commerce

iOS publisher referral summary and handoff

Recently done

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 ...

Issue #1530Screenshot pending

Live

iOS custom emoji picker and My emojis shell

Recently done

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...

Issue #1527Screenshot pending

Live

iOS notification inbox shell for listener and publisher events

Recently done

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...

Issue #1522Screenshot pending

Live

iOS live chat: system emoji reactions

Recently done

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...

Issue #1512Screenshot pending

Live

iOS live chat parity: typing, reactions, custom emoji, and notifications

Recently done

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...

Issue #1502Screenshot pending

Qa

Build Fanful iOS user journey evidence catalog

Recently done

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...

Issue #1231Screenshot pending

Admin

Add iOS membership Stripe Price create/select controls

Recently done

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...

Issue #1195Screenshot pending

Ops

Add unattended iOS TestFlight upload credential path

Recently done

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...

Issue #1165Screenshot pending

Admin

Label or replace iOS creator admin placeholders

Recently done

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...

Issue #1164Screenshot pending

Admin

Make iOS creator Go Live one-tap and native

Recently done

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...

Issue #1163Screenshot pending

Admin

Add native iOS community channel management

Recently done

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...

Issue #1162Screenshot pending

Platform

Add iOS first-run Fanful fan/publisher onboarding

Recently done

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...

Issue #1147Screenshot pending

Live

Add iOS joined-community switcher sheet

Recently done

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 ...

Issue #1107Screenshot pending

Media

Make iOS library row play controls easier to tap

Recently done

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 ...

Issue #1101Screenshot pending

Admin

Add iOS lesson Stripe Price create/select controls

Recently done

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...

Issue #1095Screenshot pending

Platform

Add iOS community and publisher-mode shell

Recently done

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...

Issue #1090Screenshot pending

Platform

Align iOS onboarding and TestFlight metadata with the Fanful one-app model

Recently done

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...

Issue #1077Screenshot pending

Media

Polish iOS Listen Along invite share copy

Recently done

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...

Issue #1061Screenshot pending

Commerce

Add iOS lesson policy and credit surfaces

Recently done

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...

Issue #1051Screenshot pending

Admin

Add iOS native creator-commerce readiness panel

Recently done

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...

Issue #1049Screenshot pending

Ops

Use net.fanful.ios as the checked-in iOS bundle identifier

Recently done

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...

Issue #1046Screenshot pending

Admin

Add native iOS idea-board admin curation controls

Recently done

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...

Issue #1045Screenshot pending

Commerce

Add iOS live-room support donation entry point with payment-policy gating

Recently done

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...

Issue #970Screenshot pending

Admin

Add native iOS community channel management readiness panel

Recently done

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...

Issue #957Screenshot pending

Admin

Hide listener purchase prompts for artist accounts on iOS

Recently done

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 ...

Issue #946Screenshot pending

Admin

Add native iOS artist community channel management

Recently done

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...

Issue #922Screenshot pending

Auth

Add iOS native display-name editor

Recently done

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...

Issue #894Screenshot pending

Commerce

Add iOS domain purchase status and checkout handoff

Recently done

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...

Issue #730Screenshot pending

Commerce

Gate iOS native checkout entry points for App Review builds

Recently done

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...

Issue #709Screenshot pending

Commerce

Resolve iOS App Store payment policy for Stripe-only native commerce

Recently done

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...

Issue #700Screenshot pending

Live

Render creator-approved chat automation attribution on iOS

Recently done

Context 629 / PR 660 added public creatorapproved community chat automation replies with durable audit rows and listenervisible attribution. iOS already has base community chat ...

Issue #662Screenshot pending

Live

Add iOS embedded-room webinar attendee and host states

Recently done

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...

Issue #654Screenshot pending

Live

Add native iOS community chat reactions, replies, and mentions

Recently done

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...

Issue #646Screenshot pending

Live

Show event-linked community channels in native iOS Live

Recently done

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...

Issue #607Screenshot pending

Admin

Add native iOS member idea-board parity

Recently done

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...

Issue #600Screenshot pending

Live

Add native iOS community chat channels to Live

Recently done

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...

Issue #571Screenshot pending

Media

Fix iOS queue preflight failures before Listen Along smoke

Recently done

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...

Issue #509Screenshot pending

Commerce

Fix first lesson-booking path and manual availability

Recently done

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...

Issue #504Screenshot pending

Design

Fix iOS Account scrolling under mini player and bottom navigation

Recently done

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...

Issue #501Screenshot pending

Admin

Add native iOS magic-link or test-credential path for artist/admin sign-in

Recently done

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...

Issue #486Screenshot pending

Media

Make the iOS mini-player tap target open Now Playing across the full bar

Recently done

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...

Issue #469Screenshot pending

Media

Add iOS timed comment Like details and single-heart reaction parity

Recently done

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...

Issue #468Screenshot pending

Media

Remove iOS offline manifest debug copy from listener track cards

Recently done

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...

Issue #447Screenshot pending

Media

Fix iOS ended-state playback UI and autoplay-next behavior

Recently done

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...

Issue #446Screenshot pending

Media

Restore iOS bottom navigation visibility with mini player

Recently done

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...

Issue #445Screenshot pending

Admin

Add native iOS artist/listener real-account end-to-end smoke

Recently done

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...

Issue #402Screenshot pending

Media

Adopt Listen Along state sync in the iOS app

Recently done

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,...

Issue #385Screenshot pending

Media

Make the entire native iOS mini player bar open Now Playing

Recently done

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...

Issue #351Screenshot pending

Auth

Add native iOS email verification resend and notification eligibility copy

Recently done

Motivation Mark's iPhone feedback showed confusing notification state: email notifications appeared enabled before email confirmation, while push seemed blocked or still prompti...

Issue #325Screenshot pending

Qa

Prepare iOS TestFlight beta upload and tester onboarding

Recently done

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...

Issue #324Screenshot pending

Platform

Add native iOS bottom navigation and keep mini player above it

Recently done

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 ...

Issue #323Screenshot pending

Media

Add native iOS Listen Along invite, share link, and QR join UI

Recently done

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...

Issue #317Screenshot pending

Admin

Native artist admin parity: analytics dashboards and drill-downs

Recently done

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...

Issue #296Screenshot pending

Admin

Native artist admin parity: email inbox, replies, and campaigns

Recently done

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...

Issue #295Screenshot pending

Media

Fix iOS end-of-track state and queue advancement

Recently done

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...

Issue #291Screenshot pending

Auth

Fix native push registration state after OS permission grant

Recently done

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 ...

Issue #290Screenshot pending

Media

Unify iOS timed comment reactions to one heart-like model

Recently done

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...

Issue #278Screenshot pending

Qa

Add an in-app roadmap and About build summary to iOS

Recently done

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...

Issue #264Screenshot pending

Qa

Add native iOS diagnostics and support summary

Recently done

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...

Issue #262Screenshot pending

Media

Add native iOS track sharing

Recently done

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...

Issue #260Screenshot pending

Media

Add native iOS playback speed controls

Recently done

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...

Issue #258Screenshot pending

Media

Add native iOS sleep timer controls

Recently done

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...

Issue #256Screenshot pending

Media

Add native iOS audio session and background playback handling

Recently done

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 ...

Issue #254Screenshot pending

Commerce

Add native iOS lesson booking flow

Recently done

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...

Issue #252Screenshot pending

Commerce

Add native iOS support, memberships, and shop catalog

Recently done

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...

Issue #250Screenshot pending

Platform

Add native iOS performance dates surface

Recently done

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...

Issue #248Screenshot pending

Media

Add native iOS playback device context pills

Recently done

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...

Issue #246Screenshot pending

Design

Brand the iOS app with a native Laurel home surface

Recently done

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...

Issue #244Screenshot pending

Media

Add a native iOS listener Live Room surface

Recently done

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...

Issue #242Screenshot pending

Media

Add native iOS Continue Listening resume panel

Recently done

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...

Issue #239Screenshot pending

Media

Add native iOS library search and media filters

Recently done

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/...

Issue #237Screenshot pending

Media

Add a native iOS video playback surface in Now Playing

Recently done

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...

Issue #235Screenshot pending

Qa

Document iPhone testing and TestFlight release for the iOS app

Recently done

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...

Issue #233Screenshot pending

Design

Polish iOS player motion, haptics, and accessibility against the shared design contract

Recently done

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...

Issue #227Screenshot pending

Auth

Complete native iOS account settings beyond sign-in

Recently done

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...

Issue #226Screenshot pending

Media

Add iOS cross-device playback handoff and sync conflict states

Recently done

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...

Issue #225Screenshot pending

Media

Add queue, skip, and remote-control parity to the iOS player

Recently done

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...

Issue #224Screenshot pending

Media

Refactor the iOS player into a compact mini player and expanded Now Playing sheet

Recently done

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...

Issue #218Screenshot pending

Auth

Add native-safe Turnstile flow for iOS timed comments

Recently done

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...

Issue #213Screenshot pending
iOS media rows with artwork, media kind, progress, and locked states

Media

Add artwork, video-aware media UI, and richer playback states to the iOS app

Recently done

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

Richer iOS media states

iOS app showing a pending progress update waiting to sync

Media

Add reliable playback progress queue and retry to the iOS app

Recently done

Make iOS progress writes durable across spotty connectivity, backgrounding, and future offline playback with a local retry queue.

Durable iOS progress queue

Platform

Add shared native mobile API contracts and generated models

Recently done

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

Add release signing, TestFlight, and App Store readiness to the iOS app

Recently done

Prepare the iOS project for real distribution with bundle identity, signing notes, release-safe configuration, app assets, and TestFlight documentation.

Issue #152Screenshot pending
iOS artist dashboard companion for an admin account

Admin

Add artist dashboard and web admin handoff to the iOS app

Recently done

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

iOS artist dashboard companion

iOS listener shell signed out with the artist live companion hidden until admin sign-in

Admin

Add artist live controls and moderation companion mode to the iOS app

Recently done

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

iOS live companion

iOS listener hub web handoff tiles

Platform

Add listener hub links for Live, Dates, Support, Shop, Lessons, and Account to the iOS app

Recently done

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

Add offline downloads and signed media cache to the iOS app

Recently done

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.

Issue #144Screenshot pending

Media

Add timed comments, replies, and reactions to the iOS app

Recently done

Bring the website's timed listening conversation into iOS playback with visible comments, timestamp seeking, replies, reactions, and moderation-aware states.

Issue #142Screenshot pending
iOS playback handoff sign-in state

Media

Add playback sync and Listen Here handoff to the iOS app

Recently done

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

iOS native notification settings in the Account panel

Platform

Add notification preferences and push registration to the iOS app

Recently done

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

iOS notification settings

iOS native account panel with sign-in and create-account controls

Platform

Add native account sign-in and entitlements to the iOS app

Recently done

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

Build first native iOS listener app

Recently done

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.

Issue #129Screenshot pending

Media

๐ŸŽง Persistent audio/video player with scrubbing and mixed media playlist

Recently done

Current Session 3 Status PR: 117 โ€” https://github.com/markitics/laurelharned/pull/117 Branch: codex/session3audiovideoplayer Latest pushed commit: c98bb8e fix: harden playback h...

Issue #98Screenshot pending

Workstream

Android app

Kotlin, Compose, and Media3 work for Android: native playback, FCM, media sessions, Play readiness, and matching Fanful listener and creator jobs.

Roadmap stage

Maybe

0 items

Useful sparks that might become real once a dependency or user need gets sharper.

No maybe items right now.

Roadmap stage

Backlog

3 items

Committed roadmap work that exists, but is not the next thing to pull.

Admin

Add native Android artist Stripe product and price management

Backlog

Laurel/admin should be able to manage membership commerce from the Android app with parity to iOS. In Stripe terms, this means editing products/entitlements and adding or select...

Commerce

Add Android lesson policy and credit surfaces

Backlog

Motivation 530 tracks lesson bundles, subscription credits, cancellation windows, skipweek behavior, refunds, and tierlinked lesson benefits as shared platform policy. Android n...

Ops

Prepare Android Play Store internal testing release

Backlog

Motivation The Android app now has a productionRelease build and a Play Store runbook, but it is not actually ready for Google Play internal testing until release/uploadkey sign...

Roadmap stage

Next

0 items

Committed follow-ups that are queued behind the active work.

No next items right now.

Roadmap stage

Active

0 items

Current branches and PRs. These should move as GitHub issue labels change.

No active items right now.

Roadmap stage

Recently done

77 items

Shipped work, newest first, with screenshots where the change is visual.

Admin

Add native Android lesson availability controls

Recently done

Parent lesson platform issue: 530 Android parity audit: 1261 Shared agent/backend availability write: 1550 Agent confirmation widget: 1753 Related Android lesson policy slice: 1...

Issue #1880Screenshot pending

Admin

Add native Android lesson policy cutoff controls

Recently done

Parent Android issue: 858 Shared lesson policy parent: 530 Android parity audit: 1261 Related iOS proof: 1671 / iOS userjourney rows for lesson policy cutoff updates Why Fanful'...

Issue #1877Screenshot pending

Admin

Add native Android membership tier lifecycle controls

Recently done

Parent: 534 Related Android parent: 926 Parity audit: 1261 Related shared contract: 1371 Related iOS parity: 1573 Why The public Fanful Memberships promise includes recurring su...

Issue #1874Screenshot pending

Admin

Add native Android shop product creation controls

Recently done

Parent: 926 Shared contract parent: 1052 Parity source: web 1862, agents 1692 and 1750 Audit parent: 1261 Context Web admin and agent surfaces now expose confirmed shop product ...

Issue #1867Screenshot pending

Admin

Add Android shop product details controls

Recently done

Context The shared creatorcommerce contract now advertises creator.shopproduct.detailsupdate as ready through /api/agent/creatorcommerce. This contract supports safe store item ...

Issue #1845Screenshot pending

Admin

Add Android shop product visibility controls

Recently done

Parent: 926 Related shared creatorcommerce contract: 1052 Parity/audit parent: 1261 Related iOS slice: 1658 Goal Expose the ready creator.shopproduct.visibilityupdate confirmedw...

Issue #1836Screenshot pending

Admin

Add Android shop product Stripe Price create/select controls

Recently done

Parent: 926 Shared backend/API parent: 1052 Parity sibling context: agent creator shop product tools are covered by the shared MCP/agent smoke suite. Add native Android artist/a...

Issue #1833Screenshot pending

Qa

Capture Android mixed-surface live chat parity QA

Recently done

Parent QA issue: 1504 Android implementation issue: 1503 (closed after PRs 1542, 1577, 1580, 1582, 1588, and 1599) Feature parent: 1499 Goal Produce documented Android evidence ...

Issue #1604Screenshot pending

Admin

Android native publisher notification center

Recently done

Parent: 1503 Crossplatform parity: 1499 QA followup: 1504 Goal Give Android publisher/admin users a native notification center surface for the publisher notification events now ...

Issue #1592Screenshot pending

Live

Android native custom emoji file upload

Recently done

Parent: 1503 Shared parity parent: 1499 Goal Let signedin Android listeners upload a communityscoped custom emoji from the native app instead of handing off to Fanful web. Scope...

Issue #1584Screenshot pending

Commerce

Android publisher referral summary and handoff

Recently done

Context Parent 1493 tracks referral scheme parity for agents, iOS, and Android. Agent read parity shipped in 1509 and iOS publisher referral summary parity shipped in 1530. Andr...

Issue #1538Screenshot pending

Live

Android live chat parity: typing, reactions, custom emoji, and notifications

Recently done

Parent: 1499 Depends on shared contract issue: 1500 Web parity reference: 1501 iOS parity reference: 1502 Goal Bring the Android app to parity with the Discord/Slackgrade Fanful...

Issue #1503Screenshot pending

Admin

Add Android membership Stripe Price create/select controls

Recently done

Parent: 926 Shared backend/API dependency shipped: 1186 Parity siblings: iOS 1195 and web 1205. Add the native Android artist/admin controls for membershiptier Stripe Price crea...

Issue #1204Screenshot pending

Admin

Label or replace Android creator admin placeholders

Recently done

Parity sibling: iOS 1164. Android creator/admin screens should either show real backend values or explicitly label placeholder/unavailable states. Mark specifically called out c...

Issue #1168Screenshot pending

Admin

Make Android creator Go Live one-tap and native

Recently done

Parity sibling: iOS 1163. Parent: 560. Related: 851. Android should match iOS/web creator intent: a creator should be able to start a live room with a simple native "Go live now...

Issue #1167Screenshot pending

Admin

Add native Android community channel management

Recently done

Parity sibling: iOS 1162. Parent: 560. Android should match the agreed community model: live video/event chat is separate from alwayson text channels like general, intros, membe...

Issue #1166Screenshot pending

Media

Make Android library row play controls easier to tap

Recently done

Context Parity followup from 1101. The iOS libraryrow direct play/pause control now has a clearer visible target and a 56pt hit area. Android also has an explicit libraryrow Fil...

Issue #1104Screenshot pending

Admin

Add Android lesson Stripe Price create/select controls

Recently done

Parent: 926. Shared backend/API parent: 1052. Backend/agent write slice: 1083. Web parity sibling: 1086. iOS parity sibling: 1095. Add the native Android artist/admin controls f...

Issue #1098Screenshot pending

Platform

Add Android community and publisher-mode shell

Recently done

Parent: 560 Contract: 1078 Related: iOS 1090, Android mode cue 1087 Why 1090 is adding an iOS selectedcommunity and fan/publisher mode shell. Android now has the smaller Account...

Issue #1091Screenshot pending

Platform

Add Android Fanful app-mode cue to Account

Recently done

Parent: 1078 Parity siblings: iOS 1077, Android identity/docs 1084 Related: 560 Why iOS now shows a native Fanful appmode cue in Account so the app presents one Fanful app with ...

Issue #1087Screenshot pending

Platform

Align Android onboarding and Play metadata with the Fanful one-app model

Recently done

Context Parent: 1075. iOS sibling: 1077. Related Android releasereadiness umbrella: 847. Fanful is now the intended MVP product identity: one app, one human account, multiple cr...

Issue #1084Screenshot pending

Media

Polish Android Listen Along invite share copy

Recently done

Parent: 448 Sibling: 1061 Why The shared Listen Along contract says native share sheets should mirror the web invitemessage pattern: include enough context for a friend to under...

Issue #1062Screenshot pending

Admin

Add Android always-on community channel readiness/create panel

Recently done

Parent: 923 Depends on shipped shared contract: 921 Context 923 asks for full native Android artist community channel management. The shared 921 terminology/cap contract is now ...

Issue #983Screenshot pending

Commerce

Add Android Live tab one-time support donation entry point

Recently done

Parent: 928 Context 928 asks for live donations across web, iOS, and Android. Current investigation shows a safe Androidfirst slice is available now: Existing /api/checkout alre...

Issue #966Screenshot pending

Admin

Add Android native creator-commerce readiness panel

Recently done

Parent: 926 Ship the safe Androidnative slice for creator commerce before broader price/product editing. Scope: Add an Android artist/admin panel that reads the existing /api/ag...

Issue #959Screenshot pending

Admin

Hide listener purchase prompts for artist accounts on Android

Recently done

Android child slice for 924. Acceptance criteria: When bootstrap includes artistAdmin, the Android Account panel uses artist/admin framing instead of listener membership, purcha...

Issue #954Screenshot pending

Admin

Add native Android artist community channel management

Recently done

Artists logged into the Android app should be able to create, rename, and configure artist community text channels with parity to iOS and web.\n\nAcceptance criteria:\n Laurel/a...

Issue #923Screenshot pending

Live

Format Android live-room start dates for listeners

Recently done

Problem During the 851 multiplayer smoke pass, Android Seeker showed the live room start as a raw ISO timestamp: Starts 20260808T00:00:00.000Z The same room is humanformatted on...

Issue #905Screenshot pending

Auth

Add Android native display-name editor

Recently done

Parent Part of 873. Depends on the shared displayname update route from the web/API child issue. Scope Add a native Android editprofile/displayname path. Show the current listen...

Issue #893Screenshot pending

Live

Add Android embedded-room calendar export action

Recently done

Motivation PR 856 adds GET /api/rooms/{roomId}/calendar plus the Android model field for endpoints.calendarExport, but Android does not yet have a native action that downloads/s...

Issue #861Screenshot pending

Commerce

Add Android domain purchase status and checkout handoff

Recently done

Goal Bring Cloudflare Registrar domain purchase parity to the Android admin surface after the platform/web contract in 680 is stable. Scope Decode and display domain search quot...

Issue #731Screenshot pending

Admin

Add native Android idea-board admin curation controls

Recently done

Why 601 is adding the native Android member ideaboard flow: browse, submit, vote, and refresh. Android also supports artist/admin mode, so Laurel should eventually curate the id...

Issue #677Screenshot pending

Live

Render creator-approved chat automation attribution on Android

Recently done

Context 629 / PR 660 added public creatorapproved community chat automation replies with durable audit rows and listenervisible attribution. Android base community chat is track...

Issue #663Screenshot pending

Live

Add Android embedded-room webinar attendee and host states

Recently done

Parent: 505 Related server/web slice: 524 Related iOS parity issue: 654 Related admin/agent safety issue: 656 Production credential blocker: 650 Context 524 adds the web/admin/s...

Issue #655Screenshot pending

Live

Add native Android community chat reactions, replies, and mentions

Recently done

Context 639 is adding community chat reactions, lightweight replies, and mention parsing/rendering on the web surface. Android base community chat is tracked separately in 572, ...

Issue #647Screenshot pending

Admin

Add native Android member idea-board parity

Recently done

Why 599 tracks parity for the member idea/upvoting board that shipped on web in 511. Android should get a native implementation rather than relying on a webonly board. Scope Add...

Issue #601Screenshot pending

Live

Add native Android community chat channels to Live

Recently done

Motivation 507 is adding firstparty community chat channels as a platform feature, not only a web /live widget. The Android app needs the same communityscoped chat experience in...

Issue #572Screenshot pending

Admin

Add native Android magic-link or test-credential path for artist/admin sign-in

Recently done

Problem Issue 316 still cannot complete the Laurel artist/admin smoke from Android because the native Android auth surface currently exposes email/password signin only. I can cr...

Issue #484Screenshot pending

Media

Adopt Listen Along state sync in the Android app

Recently done

Motivation PR 373 shipped the shared web/backend Listen Along state contract. The Android app has invite/join UI, but realtime coplayback and coscrub should now move from the ol...

Issue #384Screenshot pending

Media

Add Android autoplay-next toggle and ended-state behavior

Recently done

Motivation Mark expects the Android player to follow the shared autoplaynext contract: if a listener has a next queue item and autoplay is enabled, Android should advance cleanl...

Issue #372Screenshot pending

Commerce

Add native Android Shop surface

Recently done

Motivation Mark wants Shop to be native in iOS and Android. The app should not link to the website for normal browsing or product detail tasks. Scope Add a native Android Shop d...

Issue #365Screenshot pending

Commerce

Add native Android Lessons surface

Recently done

Motivation Lessons should be a native Android module, not a website handoff. A listener should be able to discover lesson availability and request/booking options from inside th...

Issue #364Screenshot pending

Commerce

Add native Android Support surface with Stripe checkout handoff

Recently done

Motivation Support is the explicit exception to the nowebhandoff rule: Mark wants Stripehosted checkout for support/contributions rather than Apple/Google inapp purchase. The An...

Issue #363Screenshot pending

Auth

Add Android bottom navigation and account avatar menu

Recently done

Motivation Mark's Android feedback: the top bar currently reads like a website shell (Fanful Listener, laurelharned.com, refresh icon). The app should feel like a native media/l...

Issue #362Screenshot pending

Media

Unify Android timed comment reactions to one Like action

Recently done

Motivation Mark feedback from the Android app session: timed comments should not show star, heart, and save as competing peer actions. The shared product direction is one visibl...

Issue #353Screenshot pending

Admin

Add native Android artist-admin end-to-end smoke with Laurel and listener accounts

Recently done

Motivation Mark wants the Android app tested as a real artist/listener product, not just a UI shell. Artist account laurel@laurelharned.com should be able to go live from Androi...

Issue #316Screenshot pending

Auth

Add native Android email verification resend and notification eligibility copy

Recently done

Motivation Mark's nativeapp feedback: email notifications can be separate from email confirmation, push should be enableable for any loggedin native user, and unconfirmed email ...

Issue #315Screenshot pending

Media

Add Android Listen Along invite, share link, and QR join UI

Recently done

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...

Issue #314Screenshot pending

Admin

Native artist admin parity: timed comment and live note moderation

Recently done

Goal\nGive Laurel native iOS and Android moderation for timed comments and liveroom notes.\n\n Scope\n Native moderation queue combining recent/flagged/hidden timed comments and...

Issue #298Screenshot pending

Platform

Replace Android website-like top header with native bottom navigation and profile entry

Recently done

Mark feedback: the current Android top area reads like a website header (Fanful Listener, laurelharned.com, refresh icon). The Android app should feel native, closer to Spotifys...

Issue #280Screenshot pending

Media

Add native Android mixed audio/video queue playback

Recently done

Goal: prove Android can play audio and video in one native queue, matching the web demo capability. Expected behavior: Android library/queue shows both audio and video items. Se...

Issue #279Screenshot pending

Media

Unify web timed comment reactions to one heart-like model

Recently done

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...

Issue #277Screenshot pending

Media

Unify Android timed comment reactions to one heart-like model

Recently done

Mark feedback: Android currently exposes star, heart, and savestyle actions for comments, which is confusing. Product direction is one primary reaction: heart/like. Expected beh...

Issue #276Screenshot pending

Commerce

Add native Android support, shop, and lessons surfaces

Recently done

Goal: replace generic listenerhub web handoffs for Support, Shop, and Lessons with native Android surfaces. Expected behavior: Support: native ways to support Laurel, with exter...

Issue #275Screenshot pending

Platform

Add native Android performance dates surface

Recently done

Goal: listeners should be able to browse Laurel performance dates natively in Android without a web handoff. Expected behavior: List upcoming and recent dates. Show venue/date/t...

Issue #274Screenshot pending

Admin

Replace Android artist live web handoff with native go-live controls

Recently done

Goal: when Laurel is logged in as the artist/admin, she should be able to go live from the Android app without a web handoff. Expected behavior: Native live status panel for off...

Issue #273Screenshot pending

Media

Add native Android listener Live Room for livestream viewing

Recently done

Goal: loggedin listeners should be able to view Laurel livestreams natively in the Android app, without opening a web handoff. Expected behavior: Show live/offline/scheduled sta...

Issue #272Screenshot pending

Media

Hide raw Android playback event identifiers from listener UI

Recently done

Mark noticed raw event names such as trackcompleted, playbackstart, playbackseek, and trackchanged appearing in the Android app. Expected behavior: No internal event or analytic...

Issue #271Screenshot pending

Design

Polish Android player chrome and accessibility against the shared design contract

Recently done

Motivation The Android app has one persistent Media3 player, queue, background controls, and an expanded Now Playing sheet. Now it needs a polish pass so the compact player, exp...

Issue #269Screenshot pending

Design

Brand the Android app with a native Laurel home surface

Recently done

Motivation The Android app now has substantial native functionality, but the first screen still feels like a generic Material utility surface. iOS has a native Laurel homesurfac...

Issue #267Screenshot pending

Qa

Add an in-app roadmap and About build summary to Android

Recently done

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...

Issue #265Screenshot pending

Media

Align Android mini and expanded player with shared player design notes

Recently done

Workstream Android mobile app. Goal Bring the Android player shell into alignment with the shared player design notes in docs/design/player/, especially the Spotify/Applestyle s...

Issue #189Screenshot pending

Media

Fix mobile bootstrap demo streams when seeded R2 media objects are missing

Recently done

Context The native Android MediaSession work can start the shared player and foreground media notification, but production mobile bootstrap is currently handing the app a playab...

Issue #172Screenshot pending

Media

Add playback queue and next-up controls to the Android app

Recently done

Workstream Android mobile app. Goal Make Android playback feel like a real listener app with a clear queue, nextup context, and tracktotrack continuity instead of one isolated p...

Issue #165Screenshot pending

Media

Add artwork, video-aware media UI, and richer playback states to the Android app

Recently done

Workstream Android mobile app. Goal Bring the Android listener library and player closer to the website media surface before deeper social/offline work lands. Listener jobs to b...

Issue #164Screenshot pending

Media

Add MediaSessionService background playback and notification controls to the Android app

Recently done

Wrap Android playback in a native MediaSessionService so lock-screen, headphones, audio focus, and foreground playback notifications work correctly.

Issue #158Screenshot pending

Media

Add reliable playback progress queue and WorkManager retry to the Android app

Recently done

Make Android progress writes durable across spotty connectivity, backgrounding, and future offline playback with a local queue and WorkManager retry.

Issue #156Screenshot pending

Operations

Add release signing, Play Store readiness, and Android build flavors

Recently done

Prepare the Android project for real distribution with package identity, debug/release flavors, safe network config, signing notes, and Play testing documentation.

Issue #153Screenshot pending

Admin

Add artist dashboard and web admin handoff to the Android app

Recently done

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

Issue #151Screenshot pending

Admin

Add artist live controls and moderation companion mode to the Android app

Recently done

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

Issue #149Screenshot pending

Platform

Add listener hub links for Live, Dates, Support, Shop, Lessons, and Account to the Android app

Recently done

Give Android listeners a native home base with stable web handoff links for Laurel features that are not yet fully native.

Issue #147Screenshot pending

Media

Add offline downloads and signed media cache to the Android app

Recently done

Let entitled Android 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.

Issue #145Screenshot pending

Media

Add timed comments, replies, and reactions to the Android app

Recently done

Bring the website's timed listening conversation into Android playback with visible comments, timestamp seeking, replies, reactions, and moderation-aware states.

Issue #143Screenshot pending

Media

Add playback sync and Listen Here handoff to the Android app

Recently done

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

Issue #141Screenshot pending

Platform

Add notification preferences and push registration to the Android app

Recently done

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

Issue #139Screenshot pending

Platform

Add native account sign-in and entitlements to the Android app

Recently done

Let Android listeners sign in natively, refresh account state, and unlock paid/member entitlements through the existing Fanful account contracts.

Issue #137Screenshot pending

Apps

Build first native Android listener app

Recently done

Create the first Kotlin/Compose listener app that consumes the mobile bootstrap/progress contracts, streams playable tracks with Media3/ExoPlayer, and documents emulator and phone testing.

Issue #130Screenshot pending

Workstream

Agents and developers

Agent-readable Fanful routes, MCP/action contracts, markdown mirrors, and developer surfaces that let assistants understand and operate creator and fan workflows safely.

Roadmap stage

Maybe

0 items

Useful sparks that might become real once a dependency or user need gets sharper.

No maybe items right now.

Roadmap stage

Backlog

0 items

Committed roadmap work that exists, but is not the next thing to pull.

No backlog items right now.

Roadmap stage

Next

0 items

Committed follow-ups that are queued behind the active work.

No next items right now.

Roadmap stage

Active

0 items

Current branches and PRs. These should move as GitHub issue labels change.

No active items right now.

Roadmap stage

Recently done

91 items

Shipped work, newest first, with screenshots where the change is visual.

Auth

Expose listener display-name update to agents

Recently done

Scope Move listener.profile.displayname.update from contractonly to an executable, confirmed agent write. Deliverables Add a confirmed listener write wrapper, likely through POS...

Issue #1715Screenshot pending

Web

Mark listener community post action contract ready

Recently done

Problem listener.community.post in /api/agent/actioncontracts still reports contractonly, even though PR 1553 / issue 1546 shipped fanfullistenercommunitymessagesread and fanful...

Issue #1710Screenshot pending

Web

Expose member idea submit and vote agent writes

Recently done

Problem Fanful exposes member ideaboard reads to agents, but the actioncontract manifest still marks member.ideas.submitandvote as contractonly. A listener should be able to ask...

Issue #1702Screenshot pending

Admin

Expose shop product creation agent writes

Recently done

Motivation Fanful creatorcommerce agents can now update existing shop product visibility, safe details, inventory metadata, and Stripe Price mappings, but they still cannot crea...

Issue #1692Screenshot pending

Commerce

Expose shop product Stripe Price agent writes

Recently done

Parent: 1052 Related: 1681, 1682, 918, 799 Why PR 1682 made safe existing shop product details agentwritable, but deliberately left product prices and Stripe Price mapping block...

Issue #1684Screenshot pending

Live

Shared live-chat contract for typing, reactions, custom emoji, and notifications

Recently done

Parent: 1499 Goal Define and implement the shared Fanful contract for Discord/Slackgrade live chat primitives before individual clients build UI on divergent assumptions. Scope ...

Issue #1500Screenshot pending
Fanful pricing page with the LAUREL3 referral code captured

Growth

Major ship: Fanful publisher referral scheme

Recently done

Add a publisher referral loop with shareable artist codes, first-party referral capture, Stripe-safe checkout attribution, reward qualification, admin visibility, and docs for how the growth loop was built.

Publisher referrals v1

Platform

Make idea-board artist scoping tenant-aware

Recently done

Parent: 526. Related: 511, 525, 527. Why The shipped ideaboard data model already stores artistid, and the module should remain reusable for future Fanful creator communities. T...

Issue #1108Screenshot pending

Commerce

Add confirmed lesson Stripe Price creation agent wrapper

Recently done

Parent: 1052 Builds on: 1053, 1057 Related: 799, 925, 926, 534 Why 1057 lets an agent select or clear an alreadyknown Stripe Price mapping for one lesson/coaching offer, but the...

Issue #1083Screenshot pending

Admin

Fix admin Stripe catalog journey after price selection wrapper merge

Recently done

Parent: 1052 Related: 1058, 1057, 1059, 1060 Why Main CI is red after 1059 and 1060 both landed. The browser journey failure is in tests/journeys/admin.spec.ts, where the 1059 a...

Issue #1064Screenshot pending

Admin

Add web admin Stripe catalog readiness panel

Recently done

Parent: 1052 Builds on: 1053 Related: 925, 926, 1057, 534 Why 1053 shipped the shared Stripe catalog readiness API and made it visible to agents and native discovery, while 925/...

Issue #1058Screenshot pending

Admin

Add confirmed lesson Stripe Price selection agent wrapper

Recently done

Parent: 1052 Builds on: 1053 Related: 799, 925, 926, 534 Why 1053 made the shared Stripe catalog/readiness boundary visible to web/admin, agents, iOS, and Android, but all billi...

Issue #1057Screenshot pending

Admin

Add confirmed embedded-room roster and stage agent wrapper

Recently done

Context 800 now has confirmed live status, schedule update, and liveevent create wrappers. The remaining useful embeddedroom/stage gap is narrower than the whole 505 Zoomalterna...

Issue #1028Screenshot pending

Admin

Add confirmed live event creation wrapper for agents

Recently done

Why Parent 800 now has shipped live status preview/write, live schedule preview, and confirmed existingevent schedule updates. The remaining creator scheduling gap is creating a...

Issue #1012Screenshot pending

Admin

Add confirmed live schedule update wrapper for agents

Recently done

Why Parent 800 has shipped live status preview/write and live schedule preview, but the schedule path is still contractonly. Artists should be able to ask an agent to apply a pr...

Issue #998Screenshot pending

Commerce

Correct live support agent attribution readiness after #968

Recently done

Context PR 976 shipped the 971 agentreadable live support preview while 968 was still treated as a blocker. 968 has now shipped liveeventattributed support metadata, purchase ro...

Issue #979Screenshot pending

Commerce

Expose agent-readable live donation readiness and purchase preview

Recently done

Parent: 928 Context 928 originally covered web, iOS, and Android live donations. Mark's parity direction also requires agentic surfaces so assistants can answer what live suppor...

Issue #971Screenshot pending

Admin

Add live donation attribution and artist totals

Recently done

Parent: 928 Context 928 requires artist/admin visibility into donation totals for a live stream. Existing support checkout records generic support/donation purchases, but livero...

Issue #968Screenshot pending

Admin

Add live schedule preview agent tool

Recently done

Why 800 has shipped live status preview and confirmed live status writes, but agents still cannot safely preview a new live schedule or reschedule/edit payload before a creator ...

Issue #960Screenshot pending

Admin

Add confirmed creator service price/policy write wrapper for agents

Recently done

Parent: 799 PR 906 shipped the nonmutating creator service price/policy preview surface. The next executable slice is a confirmed write wrapper that can safely turn a preview in...

Issue #945Screenshot pending

Admin

Add confirmed live status write wrapper for agents

Recently done

Parent: 800 PR 912 shipped the nonmutating live status preview action for agents. The next executable slice is the confirmed write wrapper that can safely turn a preview into a ...

Issue #920Screenshot pending

Platform

Use case: partiful alternative

Recently done

Add a user persona: events (paid tickets like eventbrite or Luna)

Issue #915Screenshot pending

Auth

Define agent display-name update contract

Recently done

Parent Part of 873. Depends on the shared displayname update route from the web/API child issue. Scope Decide and expose the agentfacing listener profile update contract. If age...

Issue #895Screenshot pending

Ops

Add public Fanful agent work log

Recently done

Goal Add fanful.net/worklog as a public work diary for humans and agents, with instructions at the top and D1backed agent worklog entries below. Scope Create a public /worklog p...

Issue #868Screenshot pending

Platform

Consolidate Fanful marketing checkpoint PR stack

Recently done

Context During travel/offline cleanup, several partial Fanful marketing and agentsupport branches were preserved as draft PRs so local work would not remain stranded on one lapt...

Issue #849Screenshot pending

Platform

Create docs.fanful.net developer docs for humans and agents

Recently done

Why Mark asked for docs.fanful.net to be like docs.stripe.com, targeting both AI agents and human developers. This should become the developerfacing entrypoint for Fanful's agen...

Issue #830Screenshot pending

Web

Fix fanful.net roadmap branding and navigation

Recently done

Context Mark noticed fanful.net/roadmap still shows Laureloriented navigation/branding. Fanful roadmap pages should not feel like Laurel's artist website when served on fanful.n...

Issue #829Screenshot pending

Web

Add Fanful developers and agents hub

Recently done

Context Mark wants a Developers and agents topnav category that summarizes the Fanful MCP server, ChatGPT app direction, agentreadable pages, and automation posture. Scope Build...

Issue #828Screenshot pending

Platform

Build Fanful target-user pages

Recently done

Context Mark wants specific Fanful pages for target user types under /users, with the option to move some to /blog later. Scope Create the top 10 targetuser pages: /users/musici...

Issue #827Screenshot pending

Platform

Build Who uses Fanful landing page

Recently done

Context Mark wants Fanful's version of Stripe Solutions: "Who uses Fanful?" for use cases by creator/professional type. Scope Build /users as the landing page for Fanful target ...

Issue #826Screenshot pending

Platform

Refine Fanful features overview

Recently done

Context The existing /features page needs to become the overall Fanful product overview that the navbar can link to. Scope Refine /features as an overview of Fanful products/fea...

Issue #825Screenshot pending

Platform

Build Fanful feature detail pages

Recently done

Context Mark wants productspecific Fanful feature pages behind the top navbar. Scope Create individual feature pages for major Fanful product areas, starting with: /features/liv...

Issue #824Screenshot pending

Platform

Add sticky Fanful top navigation

Recently done

Context Mark wants fanful.net to have a sticky top navigation inspired by Stripe's toplevel categories, adjusted for Fanful. Scope Add a sticky Fanful navbar to fanful.net marke...

Issue #823Screenshot pending

Web

Add Fanful comparison links to competitor source notes

Recently done

Context Mark asked that every individual company listed under /compare/all "Platforms checked / Source notes" keep its existing public source links and also gain an internal Com...

Issue #820Screenshot pending

Auth

Add agent grant management and revocation surface

Recently done

Why Fanful users need a humanreadable place to inspect and revoke agent access after approving an MCP/CLI/ChatGPT/Codex/Claude client. That should be separate from the codeexcha...

Issue #819Screenshot pending

Auth

Build agent authorization approval and code exchange endpoints

Recently done

Why 816 needs a concrete first executable slice for firstparty agent authorization. This issue owns the signedin approval and onetime code exchange path, while keeping the userf...

Issue #818Screenshot pending

Auth

Build first-party agent authorization and token exchange

Recently done

Why 810 selects scoped delegated grants as the Fanful agent authorization model, 811 owns the durable grant/token state, and 812 owns resolving scoped principals in /mcp and /ap...

Issue #816Screenshot pending

Auth

Resolve scoped agent principals in MCP and agent manifests

Recently done

Why The current public MCP endpoint and agent manifests are guest/readsafe, while admin reads are local environmentgated. After 810 and 811, the MCP and HTTP manifest layers nee...

Issue #812Screenshot pending

Auth

Add scoped agent authorization grants and revocation state

Recently done

Why After 810 defines the Fanful agent authorization model, Fanful needs durable state for scoped agent grants so private MCP/ChatGPT/CLI reads can be authorized, expired, and r...

Issue #811Screenshot pending

Auth

Define the Fanful agent authorization model

Recently done

Why 809 needs a concrete auth design before implementation starts. Public MCP and public manifests already work, but private listener/creator access needs a portable authorizati...

Issue #810Screenshot pending

Auth

Map first-party auth sessions into MCP and ChatGPT agent clients

Recently done

Why Fanful now has public MCP discovery and safe public/read manifests, but private creator/listener reads still rely on firstparty web sessions or local environmentgated admin ...

Issue #809Screenshot pending

Auth

Expose fan profile and notification preferences to agents

Recently done

Why For listeners/fans to use Fanful entirely through agent clients, they need safe access to ordinary account workflows too: inspect profile/contact state, understand notificat...

Issue #808Screenshot pending

Media

Expose fan live-room and Listen Along readiness to agents

Recently done

Why Fan/listener agent parity needs more than creator golive controls. A listener should be able to ask an agent whether a live room, webinar, Listen Along session, or gated eve...

Issue #807Screenshot pending

Auth

Expose fan membership and entitlement status to agents

Recently done

Why A listener/fan should be able to ask an agent what memberships, tiers, purchases, credits, or gated experiences they currently have access to. 777 exposes the tier catalog, ...

Issue #805Screenshot pending

Auth

Track listener and fan agent parity beyond the idea board

Recently done

Why The first agent work exposed public manifests and the member idea board, but Mark's AX goal is broader: listeners/fans should be able to interact with Fanful through agent c...

Issue #801Screenshot pending

Admin

Expose live scheduling and go-live agent actions

Recently done

Why Mark's AX goal explicitly calls out artists scheduling a golive through agents. Embedded rooms and live/community work already exist as platform issues, but agent scheduling...

Issue #800Screenshot pending

Admin

Expose creator service price and policy agent actions

Recently done

Why Mark's AX goal explicitly calls out creators using agents to do real work, including "amend price of their coaching." The shared write envelope in 786 makes this safer, but ...

Issue #799Screenshot pending

Admin

Expose Fanful payment-routing readiness status

Recently done

Motivation Fanful now advertises a 2% platform fee and has a Stripe Connect feerouting plan, but admin and agent surfaces should clearly show that live applicationfee routing is...

Issue #798Screenshot pending

Platform

Add Cloudflare cost-unit notes to Fanful pricing

Recently done

Motivation Fanful pricing now lists plan limits based on what can create Cloudflare cost, but the page should be more explicit about the actual metered units: email sends, R2 st...

Issue #795Screenshot pending

Commerce

Document Stripe Connect fee-routing plan for Fanful

Recently done

Motivation Fanful's public pricing now advertises a 2% platform fee on fan payments, but the production checkout code currently records that policy in metadata rather than routi...

Issue #792Screenshot pending

Web

Add agent-readable roadmap markdown mirror

Recently done

Motivation Mark asked to be able to check progress on fanful.net/roadmap or GitHub issues while Codex keeps working. The browser roadmap exists, but the Fanful marketing archite...

Issue #788Screenshot pending

Platform

Fix artist-host pricing markdown alias

Recently done

Motivation Laurel's Fanful artist host uses /tiers for the fanfacing paidaccess table, with /pricing as a friendly alias. The browser alias exists, but the markdown alias does n...

Issue #784Screenshot pending

Commerce

Wire Laurel fan membership tiers to Stripe Prices

Recently done

Motivation Laurel's fanfacing membership tiers are seeded in D1 and checkout can create subscription sessions today, but the seeded tiers still have stripepriceid = NULL. That m...

Issue #782Screenshot pending

Admin

Expose fan membership tier catalog across admin, web, and agents

Recently done

Motivation The Fanful pricing/admin work now distinguishes artist platform plans from fanfacing membership tiers. Laurel's fan tiers already exist in D1 and on /tiers, but the t...

Issue #777Screenshot pending

Admin

Persist Fanful artist plan assignments in D1

Recently done

Motivation Fanful admin entitlements are visible now, but the artist platformplan assignment is still hardcoded in application code. The next backend/platform step is to make th...

Issue #774Screenshot pending

Commerce

Record Fanful platform fee policy on fan checkouts

Recently done

Motivation Fanful now advertises a 2% platform fee on fan payments, but checkout metadata should carry that policy consistently so webhooks, admin records, analytics, future age...

Issue #768Screenshot pending

Auth

Expose Fanful MCP over HTTPS for agent clients

Recently done

Why Fanful now has a local stdio MCP server and public agentreadable manifests, but ChatGPT Apps SDK connectors and many hosted agent clients need a reachable HTTPS MCP endpoint...

Issue #754Screenshot pending

Commerce

Set up Laurel Fanful subdomain and fan-facing tiers page

Recently done

Motivation Laurel should be the concrete Fanful case study tenant: laurel.fanful.net should behave like the artist brought an existing site to Fanful, and her fans should have a...

Issue #741Screenshot pending

Admin

Show Fanful plan entitlements in publisher admin

Recently done

Motivation Artists/publishers need to understand exactly what their Fanful plan unlocks inside their admin panel, especially as pricing limits and support tiers become real. Sco...

Issue #740Screenshot pending

Commerce

Create Fanful artist pricing tiers and Stripe products

Recently done

Motivation Fanful needs simple annual artist pricing that reflects real Cloudflare cost drivers and sets expectations before any artist upgrades. Proposed tiers Tester: $2/year,...

Issue #739Screenshot pending

Platform

Align Fanful.net branding, navigation, and features surface

Recently done

Motivation Fanful is the current platform name and fanful.net should read as the platform home, not a MusicWebs salvage route or hidden app path. Scope Remove new/publicfacing M...

Issue #738Screenshot pending

Commerce

Expose Cloudflare Registrar domain purchase actions to agents

Recently done

Goal Expose the domainpurchase flow to future MCP, ChatGPT app, or CLI agents through a permissioned serverside contract rather than browser automation over the web checkout. Sc...

Issue #733Screenshot pending

Web

Add Fanful migration guide pages for top alternatives

Recently done

Motivation The Fanful comparison pages now name migration/importer intent, but highintent searchers and AI agents need concrete switching guidance for each major source platform...

Issue #721Screenshot pending

Agents

Add audited live-event action log and dedicated go-live route

Recently done

Record live-event admin and automation writes with redacted before/after summaries, and give agents a confirmed status-only route for go-live, end, and cancel transitions.

Live-event admin audit

Design

Expand Fanful thematic guide SEO and schema

Recently done

Context 690 preserves initial thematic guide routes for 2026 ecommerce, coaching, and community platform comparisons. The handoff calls out richer guide content and SEO/schema a...

Issue #693Screenshot pending

Platform

Deepen Fanful alternative pages with proof and migration content

Recently done

Context 690 preserves scaffolded onetoone alternative pages for Shopify, Substack, Bandcamp, Patreon, Kajabi, Circle, and Linktree. The handoff explicitly says the current copy ...

Issue #692Screenshot pending

Platform

Preserve Fanful.net marketing and comparison architecture

Recently done

Context A cloud Codex session created a local Fanful.net marketing/comparison surface but could not use GitHub or Cloudflare from that environment. This local branch preserves t...

Issue #690Screenshot pending

Platform

Expand Fanful thematic 2026 comparison guides

Recently done

Goal Turn the thematic /blog/best...platforms2026 pages into more useful comparison guides for highintent searches. Initial routes /blog/bestecommerceplatforms2026 /blog/bestcoa...

Issue #688Screenshot pending

Platform

Deepen Fanful 1:1 alternative comparison pages

Recently done

Goal Improve the /compare/COMPANYalternative pages beyond scaffold copy so each page has stronger competitorspecific proof, transparent tradeoffs, source notes, and migration gu...

Issue #687Screenshot pending

Platform

Fanful.net marketing and comparison architecture

Recently done

Goal Move Fanful marketing and comparison surfaces onto fanful.net with a Shopifystyle comparison architecture, agentreadable markdown mirrors, and a durable path for iterative ...

Issue #685Screenshot pending

Platform

Build Fanful ChatGPT app on top of the MCP server

Recently done

Why Mark asked to research and build a ChatGPT app if relevant. The current direction from the project docs is MCP first, ChatGPT app second: keep the MCP server as the portable...

Issue #674Screenshot pending

Media

Expose listener and fan experiences to agents

Recently done

Why Mark's Agent Experience goal says listener/fan experiences should be doable through Claude Code, ChatGPT, Codex, or another agent client. A fan should be able to ask what th...

Issue #673Screenshot pending

Agents

Expose live scheduling and go-live controls to agents

Recently done

Expose live room scheduling, go-live readiness, event-linked community channels, live-note moderation, and embedded-room stage controls through the agent manifest and MCP surface.

Agent live controls

Commerce

Expose creator coaching and commerce actions to agents

Recently done

Why Mark's Agent Experience goal explicitly includes creator workflows such as changing coaching prices and managing commercial policy from Claude Code, ChatGPT, Codex, or anoth...

Issue #671Screenshot pending

Agents

Add audited embedded-room roster and chat moderation actions

Recently done

Record embedded-room roster/stage writes and private room-chat moderation with actor attribution, redacted summaries, and executable agent-safe moderation/audit endpoints.

Issue #656Screenshot pending

Agents

Expose community chat reactions, replies, and mentions to agents

Recently done

Expose community chat reply context, reaction toggles, and scoped mention metadata through the agent manifest and server-side tool contract.

Agent chat affordances

Live

Add community chat notification digests and mention routing

Recently done

Route community chat digests and mentions through listener notification preferences, creator-community membership, and mute boundaries.

Chat notification routing

Agents

Build community chat automation reply processor

Recently done

Turn confirmed creator-approved community automation rules into visibly attributed public replies with trigger linkage, revocation, and durable audit rows.

Automation reply processor

Agents

Add executable community chat agent manifest endpoint

Recently done

Expose `GET /api/agent/community-chat` so agents can discover caller capabilities, public channel state, event-linked channels, and permissioned operation descriptors without browser automation.

Agent manifest endpoint

Agents

Add audited community chat agent automations and admin action log

Recently done

Add durable audit rows and creator-approved automation rules before agents can perform repeated moderation, settings, channel, or public creator-speech actions.

Community chat audit registry

Ops

Publish llms.txt and agent-readable integration docs

Recently done

Why 606 called out llms.txt and markdown docs as part of making the site agentready. Agents should be able to discover the platform's public docs and safe integration surfaces w...

Issue #610Screenshot pending

Auth

Ship first MusicWebs/Fanful MCP server slice

Recently done

Why 442 identified a permissioned MCP server as the canonical agent contract, and 606 called out MCP as one of the remaining agentready implementation slices. Scope Build the fi...

Issue #609Screenshot pending

Auth

Define agent-facing API contracts for listener and admin actions

Recently done

Why 606 split the remaining agentready checklist after 442 established agents as the fourth surface. MCP, CLI, ChatGPT app, and future agent integrations all need explicit serve...

Issue #608Screenshot pending

Admin

Expose member idea board to agents

Recently done

Why 599 tracks parity for the member idea/upvoting board that shipped on web in 511. Agent parity means future MusicWebs/Fanful MCP, ChatGPT app, or CLI tools can use the board ...

Issue #602Screenshot pending

Agents

Expose community chat channels to agents

Recently done

Defines the first agent-safe community chat contract so MCP, ChatGPT app, CLI, and automation clients can read channel state, understand event-linked channels, and respect listener/admin/creator-speech permissions without browser automation.

Agent contract seed

Commerce

Add paid webinar access and bring-attendee-on-stage controls

Recently done

Add purchase/membership gates, stage role promotion, attendee moderation, and paid private stream controls on top of the embedded room contract.

Issue #524Screenshot pending
Community channel beside the Live page

Live

Build first-party live chat channels

Recently done

Replaces the Discord-shaped gap with Laurel-owned community channels on `/live`: durable D1 messages, signed realtime sockets, listener posting, guest reading, and admin moderation.

Community channels

Operations

Sanitized Codex status stream for active roadmap items

Recently done

Add a privacy-filtered Durable Object status stream so active roadmap cards can show short-lived Codex progress without exposing private terminal or mailbox details.

Issue #112Screenshot pending

Analytics

Ambitious first-party analytics, dashboards, and playback progress

Recently done

Build a first-party event stream, durable listener playback state, source/referrer insight, and artist-facing analytics views without depending on GA4.

First-party dashboard

Roadmap kanban with sticky headings

Roadmap

Roadmap kanban polish and realtime Codex status

Recently done

Polish the public roadmap layout, park unlikely ideas by default, and document the right architecture for live Codex/agent status updates.

Kanban polish

Operations

Codex ops dashboard for queued feedback, worktrees, and time buckets

Recently done

Make queued feedback, active branches/worktrees, time buckets, and post-merge feedback handling easier to inspect so future sessions drift less.

Ops snapshot

How this stays current

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