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 4:36 AM

WebsiteLive status offline151 done10 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

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